Openstack 테스트
🏗️ OpenStack (Kolla-Ansible) & Rancher VM 구축 테스트
1. 사전 준비 (Storage Node 설정)
대상: Openstack-02, Openstack-03 노드 OpenStack의 Cinder(블록 스토리지)가 사용할 물리 디스크 공간을 LVM으로 구성합니다.
설명:PV (Physical Volume): 실제 디스크(/dev/sdb)를 LVM이 쓸 수 있게 초기화합니다.VG (Volume Group): 초기화된 디스크를cinder-volumes라는 이름의 그룹으로 묶습니다. Kolla-Ansible은 기본적으로 이 이름을 찾아 스토리지를 구성합니다.
# 1. 물리 볼륨(PV) 생성 (sdb 디스크 초기화)
sudo pvcreate /dev/sdb
# 2. 볼륨 그룹(VG) 생성 (이름 'cinder-volumes'는 Kolla 기본값 고정)
sudo vgcreate cinder-volumes /dev/sdb
2. 배포 노드 환경 구성 (Controller)
대상: Openstack-01 노드 OpenStack을 배포할 컨트롤러 노드에 Python 가상환경과 Ansible 도구를 설치합니다.
# 1. 필수 시스템 패키지 및 컴파일러 설치
sudo apt update && sudo apt install -y python3-dev libffi-dev gcc libssl-dev python3-venv git
# 2. Python 가상환경(venv) 생성 (시스템 파이썬과 격리)
sudo python3 -m venv /opt/kolla-venv
# 3. 가상환경 소유권 변경 및 활성화
sudo chown -R hc-admin:hc-admin /opt/kolla-venv
source /opt/kolla-venv/bin/activate
# 4. Pip(패키지 매니저) 최신화
pip install -U pip wheel
# 5. Ansible Core 설치 (Kolla 호환 버전: 2.15 ~ 2.16)
pip install "ansible-core>=2.15,<2.17"
# 6. Kolla-Ansible 설치 (버전 18.x = OpenStack Caracal 대응)
pip install "kolla-ansible>=18.0.0,<19.0.0"
# 7. Ansible Galaxy 의존성 컬렉션 설치
kolla-ansible install-deps
3. Kolla 설정 파일 구성
대상: Openstack-01 노드 Kolla-Ansible의 설정 파일들을 /etc/kolla로 복사하고 환경에 맞게 수정합니다.
# 1. 설정 디렉토리 생성 및 예제 파일 복사
sudo mkdir -p /etc/kolla
sudo chown -R hc-admin:hc-admin /etc/kolla
cp -r /opt/kolla-venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/
# 2. 인벤토리 파일(서버 목록) 복사
cp /opt/kolla-venv/share/kolla-ansible/ansible/inventory/multinode .
3-1. globals.yml 수정 (메인 설정)
핵심 설정 설명:kolla_internal_vip_address: 고가용성(HA)을 위한 가상 IP입니다. 모든 노드가 이 IP를 공유합니다.network_interface: OpenStack 관리/API 통신용 인터페이스 (내부망).neutron_external_interface: VM이 외부와 통신할 때 나가는 통로 (외부망).nova_compute_virt_type:kvm으로 설정하여 하드웨어 가속을 사용합니다 (성능 필수).
# /etc/kolla/globals.yml
# --- 기본 배포 설정 ---
kolla_base_distro: "ubuntu"
kolla_install_type: "source"
openstack_release: "2024.1" # (Caracal)
# --- 네트워크 설정 (중요) ---
kolla_internal_vip_address: "172.16.16.241" # HAProxy VIP
network_interface: "eth0" # 관리 네트워크
neutron_external_interface: "ens19" # 외부 VM 네트워크
enable_neutron_provider_networks: "yes" # Flat/VLAN 네트워크 사용
# --- 스토리지 설정 (Cinder LVM) ---
enable_cinder: "yes"
enable_cinder_backend_lvm: "yes"
cinder_volume_group: "cinder-volumes"
# --- 서비스 및 성능 설정 ---
enable_haproxy: "yes"
nova_compute_virt_type: "kvm" # HW 가속 사용
nova_compute_cpu_mode: "host-passthrough" # 호스트 CPU 기능 그대로 사용
3-2. Nova Compute 오버라이드 설정 (VNC 콘솔 고정)
# 1. 사용자 정의 설정 폴더 생성
# custom 필요한 설정이 있을 경우, /etc/kolla/config에 넣으면 됨
mkdir -p /etc/kolla/config/nova
# 2. nova-compute.conf 생성 (공인 IP 211.x 대역 명시)
cat << EOF >> /etc/kolla/config/nova/nova-compute.conf
[vnc]
novncproxy_base_url = <http://211.239.112.41:6080/vnc_lite.html>
EOF
4. OpenStack 배포 실행
대상: Openstack-01 노드
# 1. 서비스 비밀번호 자동 생성
kolla-genpwd
# (선택사항: vi /etc/kolla/passwords.yml 에서 keystone_admin_password 수정 가능)
# 2. 서버 부트스트랩 (기본 의존성 및 Docker 설치)
kolla-ansible bootstrap-servers -i multinode
# 3. 배포 전 검사 (설정 오류 확인)
kolla-ansible prechecks -i multinode
# 4. 실제 배포 (컨테이너 다운로드 및 실행 - 시간 소요됨)
kolla-ansible deploy -i multinode
# 5. 배포 후 처리 (인증 파일 생성)
kolla-ansible post-deploy -i multinode
# 6. 관리자 권한 획득
sudo chown -R hc-admin:hc-admin /etc/kolla/
source /etc/kolla/admin-openrc.sh
# 7. OpenStack CLI 클라이언트 설치
pip install python-openstackclient
배포 상태 확인
# 전체 서비스 목록
openstack service list
# 컴퓨트 노드(Hypervisor) 상태 (Up/Enabled 확인)
openstack compute service list
# 네트워크 에이전트 상태 (Alive 확인)
openstack network agent list
# 스토리지 서비스 상태
openstack volume service list
5. OpenStack 네트워크 및 리소스 구성
5-1. 외부 네트워크 (Flat Network) 생성
설명: VM이 호스트의 물리 네트워크(ens19)와 직접 연결되도록 Flat 네트워크를 생성합니다.
openstack network create --share --external \\
--provider-physical-network physnet1 \\
--provider-network-type flat public_flat
# 서브넷 생성 (IP 할당 범위 지정)
# Rancher 노드들에게 고정 IP(238~240)를 줄 것이므로, DHCP 풀은 그 외 대역(241~)으로 설정
openstack subnet create --network public_flat \\
--allocation-pool start=172.16.16.241,end=172.16.16.254 \\
--dns-nameserver 8.8.8.8 --gateway 172.16.16.1 \\
--subnet-range 172.16.16.0/24 public_flat_subnet
5-2. 보안 그룹 (Security Group) 설정
설명: rancher-sg라는 방화벽 그룹을 만들고, Rancher 및 Kubernetes 구동에 필요한 포트를 오픈합니다.
# 보안 그룹 생성
openstack security group create rancher-sg --description "Security group for Rancher RKE2 Cluster"
# Rule 추가
# 1. ICMP (Ping)
openstack security group rule create --proto icmp rancher-sg
# 2. SSH (22)
openstack security group rule create --proto tcp --dst-port 22 rancher-sg
# 3. Web Access (80, 443)
openstack security group rule create --proto tcp --dst-port 80 rancher-sg
openstack security group rule create --proto tcp --dst-port 443 rancher-sg
# 4. RKE2
# RKE2 Node Registration (노드 가입)
openstack security group rule create --proto tcp --dst-port 9345 rancher-sg
# Etcd 클라이언트 및 피어 통신
openstack security group rule create --proto tcp --dst-port 2379:2380 rancher-sg
# Canal/Flannel VXLAN (파드 간 통신)
openstack security group rule create --proto udp --dst-port 8472 rancher-sg
# Kubelet Metrics (로그/상태 확인)
openstack security group rule create --proto tcp --dst-port 10250 rancher-sg
# Kubernetes API (Internal)
openstack security group rule create --proto tcp --dst-port 6443 rancher-sg
# NodePort 서비스용 (옵션)
openstack security group rule create --proto tcp --dst-port 30000:32767 rancher-sg
5-3. 이미지 및 키페어 등록
# 1. Ubuntu 22.04 클라우드 이미지 다운로드
wget <https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img>
# 2. Glance 이미지 등록
openstack image create "ubuntu22" --file jammy-server-cloudimg-amd64.img --disk-format qcow2 --container-format bare --public
# 3. SSH 키페어 생성 (접속용)
openstack keypair create mykey > mykey.pem
chmod 600 mykey.pem
# 4. Flavor(사양) 생성 (4 vCPU, 8GB RAM, 200GB Disk)
openstack flavor create --id 3 --ram 8192 --disk 200 --vcpus 4 m1.large
6. Rancher VM 배포
Cinder 볼륨을 부팅 디스크로 사용하는 VM 3대를 고정 IP로 생성합니다.
# 1. Rancher-01 (Master/Etcd) - IP: 172.16.16.238
openstack server create --flavor m1.large \\
--block-device source_type=image,uuid=$(openstack image show ubuntu22 -f value -c id),destination_type=volume,volume_size=200,boot_index=0,delete_on_termination=false \\
--key-name mykey \\
--security-group rancher-sg \\
--nic net-id=$(openstack network show public_flat -f value -c id),v4-fixed-ip=172.16.16.238 \\
rancher-01
# 2. Rancher-02 (Control/Worker) - IP: 172.16.16.239
openstack server create --flavor m1.large \\
--block-device source_type=image,uuid=$(openstack image show ubuntu22 -f value -c id),destination_type=volume,volume_size=200,boot_index=0,delete_on_termination=false \\
--key-name mykey \\
--security-group rancher-sg \\
--nic net-id=$(openstack network show public_flat -f value -c id),v4-fixed-ip=172.16.16.239 \\
rancher-02
# 3. Rancher-03 (Control/Worker) - IP: 172.16.16.240
openstack server create --flavor m1.large \\
--block-device source_type=image,uuid=$(openstack image show ubuntu22 -f value -c id),destination_type=volume,volume_size=200,boot_index=0,delete_on_termination=false \\
--key-name mykey \\
--security-group rancher-sg \\
--nic net-id=$(openstack network show public_flat -f value -c id),v4-fixed-ip=172.16.16.240 \\
rancher-03
7. 네트워크 브릿지 수동 연결 (중요)
Neutron 컨테이너가 외부 인터페이스(ens19)를 OVS 브릿지(br-ex)에 자동으로 매핑하지 못할 경우, VM 통신이 되지 않습니다. 수동으로 연결해 줍니다.
# 모든 Openstack 노드에서 필요 시 수행
sudo docker exec openvswitch_vswitchd ovs-vsctl add-br br-ex
sudo docker exec openvswitch_vswitchd ovs-vsctl add-port br-ex ens19
sudo ip link set br-ex up
8. Trouble Shooting (트러블슈팅 가이드)
🚨 1. VM 생성 시 Network 부여 실패 (Build Error)
- 증상: VM 상태가 Error로 빠지며 생성이 안 됨.
- 원인: Neutron Agent가 OVS와 통신하지 못하거나 물리 인터페이스 매핑 실패.
- 확인 및 조치:
# Nova 로그에서 에러 확인
sudo cat /var/log/kolla/nova/nova-compute.log | grep ERROR
# Neutron 에이전트 로그 확인
sudo docker logs --tail 50 neutron_openvswitch_agent
🚨 2. VIP 설정 실수로 인한 클러스터 깨짐
- 증상: Horizon 접속 불가, API 호출 실패.
- 조치 순서:
globals.yml에서kolla_internal_vip_address수정 확인.sudo docker restart keepalived haproxy실행.- VIP가 인터페이스에 올라왔는지
ip a로 확인. kolla-ansible reconfigure -i multinode실행.- 그래도 안 되면:
stop후start로 전체 재기동.
🚨 3. VM Disk I/O Error
- 증상: VM 내부에서
Input/output error발생, 파일 시스템 Read-only 전환. - 원인: 호스트 서버의 스토리지 멀티패스 경로가 끊김.
- 조치: 스토리지 제공 서버(Compute Node)에서 경로 확인.Bash
sudo multipath -ll
🚨 4. NoVNC 콘솔 화면 미출력
- 증상: 콘솔 창은 뜨지만 검은 화면이거나 연결 실패.
- 원인: 브라우저가 내부 IP(172.x)로 접속을 시도함 (NAT 환경 문제).
- 조치:
/etc/kolla/config/nova/nova-compute.conf생성(커스텀 설정 파일)[vnc] novncproxy_base_url = <http://211.239.112.41:6080/vnc_auto.html>설정 후docker restart nova_novncproxy.
🚨 5. Openstack Node 강제 재부팅 후, VM I/O Error 발생
- 증상: VM이 전원은 켜지나, Read only로 켜지거나 서비스 에러 발생
- 원인: Openstack 구성상, 로컬 디스크라도 Cinder 구성하면 Openstack 내에서는 iSCSI 방식으로 동작하게 되는데, Openstack 에서 iSCSI가 준비되지 않았을 때 VM을 강제로 Start하여 에러 발생
- 조치: VM Hard Reboot
- 방지: VM이 자동으로 올라올때까지 대기(강제 시작 X)