본문으로 바로가기

Kolla-Ansible 배포

  • Kolla-Ansible을 OVN으로 배포하는 경우 openvswitch를 kolla-ansible에서 배포되므로 반드시 서비스망을 제외한 SSH 접속이나 콘솔에서 배포를 진행해야 합니다.
  • pull 작업을 먼저 하지 않을 경우 인터넷이 연결이 끊기기 때문에 로컬 레포를 사용하는 경우가 아닐 시 deploy보다 먼저 진행되야 합니다.

TLS Certificate

Kolla ansible에서 필요한 인증서를 생성합니다.

# kolla-ansible -i inventory/multinode certificates
......
devcom01                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
devcom02                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
devcon01                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
devcon02                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
localhost                  : ok=30   changed=24   unreachable=0    failed=0    skipped=6    rescued=0    ignored=0

설치 이후 CLI 명령어 사용을 위해 keystone에 인증서를 추가해줍니다.

# devcon01
# ca-certificates.crt 파일을 복사
# cp /etc/ssl/certs/ca-certificates.crt /root/


# root.crt 파일과 복사한 ca-certificates.crt 합쳐 줌
# cat /etc/kolla/certificates/ca/root.crt >> /root/ca-certificates.crt

Openstack 설치 모듈 및 서비스 모듈 다운로드

# Octavia key 생성 
# kolla-ansible -i /root/inventory/multimode octavia-certificates

# devcon01
# 설치 모듈 배포
# kolla-ansible -i /root/inventory/multinode bootstrap-servers

# devcon01
# 환경설정 검사
# kolla-ansible -i /root/inventory/multinode prechecks

# devcon01
# 각 서비스 모듈 다운로드
# kolla-ansible -i /root/inventory/multinode pull

서비스 모듈 동시 배포

  1. 서비스 모듈을 동시에 배포하는 방법과 Network를 분리하여 배포하는 방법이 있습니다. 네트워크를 분리하여 배포하는 방법이 keepalived 를 별도로 설정하지 않아도 되어 작업이 용이할 수 있습니다.

네트워크 서비스 모듈 배포

아래 배포 시에 더 이상 진행되지 않고 네트워크를 기다리는 경우 다음 장의 “브릿지 인터페이스 VIP 설정”장으로 이동하여 설정을 완료하십시오.

# devcon01
# 네트워크 관련 모듈 배포
# kolla-ansible -i /root/inventory/multinode deploy

아래와 같이 노드들의 연결을 대기 중일 경우 다음 장의 “브릿지 인터페이스 VIP 설정”장으로 이동하여 설정을 완료하십시오.

TASK [openvswitch : Ensuring OVS bridge is properly setup] 
************************************************************************ 
changed: [devcon01] => (item=['br-ex', 'enp7s0']) 

브릿지 인터페이스 VIP 설정

배포 시에 네트워크를 분리하지 않고 전체 모듈을 동시에 설치할 경우에는 keepalived가 실행되어 추후 진행되는 과정에서 vip를 찾지 못하여 설치 오류가 발생합니다. 이때, 아래의 과정을 진행합니다.

배포 시에 아래의 화면에서 멈추어 있는 경우 keepalived와 ip 설정을 진행합니다.
Alt+F1, Alt+F2를 이용해 터미널을 전환할 수 있습니다.

TASK [openvswitch : Set system-id] 
************************************************************************************************ 
changed: [devcon01] 
changed: [devcon02] 
changed: [devcom01] 
changed: [devcon03] 
changed: [devcom02] 
 
TASK [openvswitch : Ensuring OVS bridge is properly setup] 
************************************************************************ 
changed: [devcon01] => (item=['br-ex', 'enp7s0']) 

기존 네트워크 인터페이스명을 br-ex로 변경합니다. 내부 네트워크의 VIP를 사용하는 경우 아래의 내용과 다를 수 있으니 적절하게 수정하시기 바랍니다. 아래의 명령을 수행한 이 후에는 반드시 ping으로 vip로의 접속을 확인하시기 바랍니다. 접속이 안될 경우에는 이후 과정에서 openstack 설치에 실패하게 됩니다.

# devcon01, devcon02 
root@devcon01:~# cat /etc/kolla/keepalived/keepalived.conf  
vrrp_script check_alive { 
    script "/check_alive.sh" 
    interval 2 
    fall 2 
    rise 10 
}      
 
vrrp_instance kolla_internal_vip_51 { 
    state BACKUP 
    nopreempt 
    interface br-ex 
    virtual_router_id 51 
    priority 1 
    advert_int 1 
    virtual_ipaddress { 
        192.168.140.50 dev br-ex 
    } 
    authentication { 
        auth_type PASS 
        auth_pass 5HsO30ewcmJ3mtgqRD7qZAm0ffORFDHuqv5h4rSE 
    } 
    track_script { 
        check_alive 
    } 
} 
 
# devcon01, devcon02, devcon03 
root@devcon01:~# docker restart keepalivdjaed 
 
# devcon01, devcon02, devcon03 
root@devcon01:~# ping 192.168.140.50 
PING 192.168.140.50 (192.168.140.50) 56(84) bytes of data. 
64 bytes from 192.168.140.50: icmp_seq=1 ttl=64 time=0.045 ms 
64 bytes from 192.168.140.50: icmp_seq=2 ttl=64 time=0.051 ms 
64 bytes from 192.168.140.50: icmp_seq=3 ttl=64 time=0.065 ms 
^C 
--- 192.168.140.50 ping statistics --- 
3 packets transmitted, 3 received, 0% packet loss, time 2026ms 
rtt min/avg/max/mdev = 0.045/0.053/0.065/0.008 ms 
root@devcon01:~# 

br-ex 인터페이스 IP 설정

설정 이후에는 ping 명령어 등으로 네트워크에 정상 접속되는 지 확인합니다.

# devcon01, devcon02, devcom01, devcom02, devcom03 
root@devcon01:~# cat /etc/netplan/01-netcfg.yaml 
network: 
  version: 2 
  renderer: networkd 
  ethernets: 
    enp5s0: {} # 기존 게이트웨이 통신을 하는 서비스망 IP가 적용된 externnal 인터페이스 
    br-ex: 
      addresses: [x.x.x. 

    
# devcon01, devcon02, devcom01, devcom02, devcom03
root@devcon01:~# netplan apply
 
 
# devcon01, devcon02, devcom01, devcom02, devcom03
root@devcon01:~# ping 192.168.140.254     <- 게이트워이 IP 
PING 192.168.140.254 (192.168.140.254) 56(84) bytes of data. 
64 bytes from 192.168.140.254: icmp_seq=1 ttl=64 time=2.18 ms 
64 bytes from 192.168.140.254: icmp_seq=2 ttl=64 time=2.19 ms 
64 bytes from 192.168.140.254: icmp_seq=3 ttl=64 time=1.86 ms 
^C 
--- 192.168.140.254 ping statistics --- 
3 packets transmitted, 3 received, 0% packet loss, time 2003ms 
rtt min/avg/max/mdev = 1.857/2.073/2.188/0.153 ms 

위 명령이 각 서버에 정상적으로 반영되었으면 네트워크 설정 완료 대기 작업이 아래와 같이 출력되고 다음 작업으로 넘어갑니다. 네트워크 설정 대기는 시간이 약간 소요됩니다. 각 서버에서 네트워크가 정상적으로 설정되었다면 일정 시간 대기하면 자동으로 인식합니다. 각 서버 당 1~2분 정도 소요됩니다.

TASK [openvswitch : Ensuring OVS bridge is properly setup] 
************************************************************************ 
changed: [devcon01] => (item=['br-ex', 'enp7s0']) 
changed: [devcon02] => (item=['br-ex', 'enp2s0']) 
changed: [devcon03] => (item=['br-ex', 'enp0s31f6']) 
changed: [devcom02] => (item=['br-ex', 'enp2s0']) 
changed: [devcom01] => (item=['br-ex', 'enp0s31f6']) 

서비스 모듈 분리 배포

네트워크 서비스 모듈 배포

# devcon01
# 네트워크 관련 모듈 배포
# kolla-ansible -i /root/inventory/multinode deploy -t common,openvswitch,ovn

아래와 같이 노드들의 연결을 대기 중일 경우 다음 장의 “br-ex 인터페이스 IP 설정”으로 이동하여 설정을 완료하십시오.

TASK [openvswitch : Ensuring OVS bridge is properly setup] 
************************************************************************ 
changed: [devcon01] => (item=['br-ex', 'enp7s0']) 

br-ex 인터페이스 IP 설정

설정 이후에는 ping 명령어 등으로 네트워크에 정상 접속되는 지 확인합니다.

# devcon01, devcon02, devcom01, devcom02, devcom03 
root@devcon01:~# cat /etc/netplan/01-netcfg.yaml 
network: 
  version: 2 
  renderer: networkd 
  ethernets: 
    enp5s0: {} # 기존 게이트웨이 통신을 하는 서비스망 IP가 적용된 externnal 인터페이스 
    br-ex: 
      addresses: [x.x.x. 

    
# devcon01, devcon02, devcom01, devcom02, devcom03
root@devcon01:~# netplan apply
 
 
# devcon01, devcon02, devcom01, devcom02, devcom03
root@devcon01:~# ping 192.168.140.254     <- 게이트워이 IP 
PING 192.168.140.254 (192.168.140.254) 56(84) bytes of data. 
64 bytes from 192.168.140.254: icmp_seq=1 ttl=64 time=2.18 ms 
64 bytes from 192.168.140.254: icmp_seq=2 ttl=64 time=2.19 ms 
64 bytes from 192.168.140.254: icmp_seq=3 ttl=64 time=1.86 ms 
^C 
--- 192.168.140.254 ping statistics --- 
3 packets transmitted, 3 received, 0% packet loss, time 2003ms 
rtt min/avg/max/mdev = 1.857/2.073/2.188/0.153 ms 

위 명령이 각 서버에 정상적으로 반영되었으면 네트워크 설정 완료 대기 작업이 아래와 같이 출력되고 다음 작업으로 넘어갑니다. 네트워크 설정 대기는 시간이 약간 소요됩니다. 각 서버에서 네트워크가 정상적으로 설정되었다면 일정 시간 대기하면 자동으로 인식합니다. 각 서버 당 1~2분 정도 소요됩니다.

TASK [openvswitch : Ensuring OVS bridge is properly setup] 
************************************************************************ 
changed: [devcon01] => (item=['br-ex', 'enp7s0']) 
changed: [devcon02] => (item=['br-ex', 'enp2s0']) 
changed: [devcon03] => (item=['br-ex', 'enp0s31f6']) 
changed: [devcom02] => (item=['br-ex', 'enp2s0']) 
changed: [devcom01] => (item=['br-ex', 'enp0s31f6']) 

네트워크 이외의 모듈 배포

네트워크가 정상적으로 설정되고 각 노드들과 통신이 완료되면 수행합니다.

inventory/multinode 를 복사하여 인터페이스를 변경합니다.

# devcon01
# cp /root/inventory/multinode /root/inventory/multinode.br-ex
# vi /root/inventory/multinode.br-ex
interface name(ex, enp2s0) => br-ex
:1,$s/enp7s0/br-ex/g
:1,$s/enp2s0/br-ex/g
:1,$s/enp4s0/br-ex/g
:1,$s/enp0s31f6/br-ex/g


# devcon01
# 네트워크 이외의 모듈 배포
# kolla-ansible -i /root/inventory/multinode.br-ex deploy --skip-tags common,openvswitch,ovn

설치 완료

모든 배포가 완료되면 아래와 같은 로그가 출력되고 쉘이 다시 나타납니다.

TASK [octavia : Create security groups for octavia] ******************************************************************************************************************************************
fatal: [devcon01 -> {{ groups['octavia-api'][0] }}]: FAILED! => {"msg": "The conditional check 'item.enabled | bool' failed. The error was: error while evaluating conditional (item.enabled | bool): 'dict object' has no attribute 'enabled'\n\nThe error appears to be in '/usr/local/share/kolla-ansible/ansible/roles/octavia/tasks/prepare.yml': line 54, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Create security groups for octavia\n  ^ here\n"}

NO MORE HOSTS LEFT ***************************************************************************************************************************************************************************

PLAY RECAP ***********************************************************************************************************************************************************************************
devcom01                      : ok=39   changed=30   unreachable=0    failed=0    skipped=45   rescued=0    ignored=0   
devcom02                      : ok=39   changed=30   unreachable=0    failed=0    skipped=46   rescued=0    ignored=0   
devcon01                      : ok=373  changed=253  unreachable=0    failed=1    skipped=195  rescued=0    ignored=1   
devcon02                      : ok=245  changed=165  unreachable=0    failed=0    skipped=184  rescued=0    ignored=1   
localhost                  : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Command failed ansible-playbook -e @/etc/kolla/globals.yml  -e @/etc/kolla/passwords.yml -e CONFIG_DIR=/etc/kolla  --skip-tags common,openvswitch,ovn -e kolla_action=deploy /usr/local/share/kolla-ansible/ansible/site.yml  --inventory /root/inventory/multinode.br-ex

설치 검증 및 도구 설치

인증서 복사

# 합쳐진 ca-certificates.crt 파일을 keystone에 복사
# docker cp /root/ca-certificates.crt keystone:/etc/keystone/certs/

admin-openrc.sh 및 도구 설치

# devcon01 
root@devcon01:~# kolla-ansible post-deploy

# devcon01 
root@devcon01:~# vi /etc/kolla/admin-openrc.sh 
// 맨 하단에 export 추가 
export OS_CACERT=/root/ca-certificates.crt

# devcon01 
root@devcon01:~# pip install python-openstackclient python-glanceclient python-neutronclient

# devcon01
root@devcon01:~# apt install mariadb-client-core-10.3 -y

Kolla-Ansible 정상 배포 확인

# devcon01
root@devcon01:~# . /etc/kolla/admin-openrc.sh

# devcon01 
root@devcon01:~# openstack catalog list 

# devcon01 
root@devcon01:~# openstack endpoint list

# devcon01 
root@devcon01:~# openstack compute service list

# devcon01 
root@devcon01:~# openstack volume service list

# devcon01 
root@devcon01:~# openstack network agent list

# devcon01
root@devcon01:~# mysql -uroot -p -h 192.168.140.50

설치 후 추가 작업

기본 Flavor 생성

# devcon01
root@devcon01:~# . /etc/kolla/admin-openrc.sh
root@devcon01:~# openstack flavor create m1.tiny --id m1.tiny --ram 1024 --disk 10 --vcpus 1
root@devcon01:~# openstack flavor create m1.small --id m1.small --ram 2048 --disk 20 --vcpus 1
root@devcon01:~# openstack flavor create m1.medium --id m1.medium --ram 4096 --disk 40 --vcpus 2
root@devcon01:~# openstack flavor create m1.large --id m1.large --ram 8192 --disk 80 --vcpus 4
root@devcon01:~# openstack flavor create m1.xlarge --id m1.xlarge --ram 16384 --disk 160 --vcpus 8

 

외부 네트워크 라우터 생성

  • 외부 네트워크 생성을 위하여 ml2_type_flat의 flat_networks의 값을 확인합니다.
root@devcon01:~# vi /etc/kolla/neutron-server/ml2_conf.ini 
 
[ml2] 
type_drivers = flat,vlan,vxlan,geneve 
tenant_network_types = geneve 
mechanism_drivers = ovn 
extension_drivers = port_security 
             
[ml2_type_vlan] 
network_vlan_ranges = 
             
[ml2_type_flat] 
flat_networks = physnet1 
             
[ml2_type_vxlan] 
vni_ranges = 1:1000 
             
[ml2_type_geneve] 
vni_ranges = 1001:2000 
max_header_size = 38 
             
[ovn]        
ovn_nb_connection = tcp:172.16.0.250:6641 
ovn_sb_connection = tcp:172.16.0.250:6642 
ovn_metadata_enabled = True 
enable_distributed_floating_ip = False 
  • 관리 > 네트워크 > 네트워크 페이지로 이동 후 네트워크 생성을 클릭합니다. 이 때 외부네트워크와 공유를 체크하여 다른 프로젝트에서도 해당 외부네트워크를 사용할 수 있도록 처리합니다. 필요시 가용성 구역 힌트에 nova를 입력합니다.
  • 서브넷 정보를 추가합니다. 생성될 서브넷의 대역을 설정합니다. 아래는 192.168.140.128에서 128개의 아이피를 사용할 수 있도록 설정하였습니다.
  • 서브넷 세부정보에서 DHCP할당 대역을 설정합니다. 인스턴스가 만들어질 때 자동으로 할당되는 아이피 Pools의 대역 정보를 설정합니다.
  • Pools 할당 시 192.168.140.xx,192.168.140.xx 형식으로 범위를 입력할 수 있지만, 두 Pools 간 띄어쓰기, 공백이 있으면 네트워크 생성이 되지 않으므로 반드시 형식에 맞게 입력합니다.

  • 관리 > 네트워크 > 라우터 페이지로 이동하여 라이터 생성 버튼을 클릭합니다. 다음과 같이 프로젝트와 방금 생성한 외부 네트워크를 선택합니다. 필요시 가용성 구역 힌트에 nova를 입력합니다.
  • 프로젝트 > 네트워크 > 네트워크 토폴로지 페이지로 이동하여 생성된 네트워크의 구성을 확인합니다.
  • 프로젝트 > 네트워크 > 네트워크 페이지로 이동하여 네트워크를 추가 확인합니다. 필요시 가용성 구역 힌트에 nova를 입력합니다.

 
  • 서브넷의 정보를 추가합니다.
  • 서브넷을 생성합니다.
  • 프로젝트 > 네트워크 > 네트워크 토폴로지 페이지로 이동하여 생성된 네트워크의 구성을 확인합니다.

 

 

 

728x90