본문으로 바로가기

728x90

Kolla-ansible로 Openstack(XENA) All-in-one 설치하기

동적으로 서버 인스턴스를 생성하고 관리하기 위한 Openstack을 Kolla-Ansible을 이용하여 설치하는 과정을 정리합니다. 본 서버는 물리적인 장비에 직접 설치하는 과정으로 작성되었습니다. 또한, root 계정으로 설치하여 별도의 sudo 명령을 포함하지 않습니다.

1. 설치 환경

물리장비 정보

  • CPU : Intel(R) Xeon(R) CPU E5649 @ 2.53GHz * 2EA
  • Memory : 48G(8GB * 6EA)
  • Disk : 1T + 3T
  • 네트워크 : 2 Ethernet

운영체제 정보

  • 운영체제 : Ubuntu Server 20.04.5 LTS
  • 호스트명 : aio01

네트워크

root@aio01:~# vi /etc/netplan/00-*.yaml

    enp3s0f0:
      addresses:
      - 192.168.140.250/24
      gateway4: 192.168.140.254
      nameservers:
        addresses:
        - 8.8.8.8
        - 8.8.8.4
        - 168.126.63.1
        search: []
    enp3s0f1:
      addresses:
      - 172.16.0.250/16
        #gateway4: 172.16.0.101
        #nameservers:
        #addresses: []
        #search: []
  version: 2

  root@aio01:~# netplan apply

설정 내용 확인

root@aio01:~# ifconfig -a

enp3s0f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.140.250  netmask 255.255.255.0  broadcast 192.168.140.255
        inet6 fe80::226:55ff:feee:753c  prefixlen 64  scopeid 0x20<link>
        ether 00:26:55:ee:75:3c  txqueuelen 1000  (Ethernet)
        RX packets 688711  bytes 550586849 (550.5 MB)
        RX errors 0  dropped 8992  overruns 0  frame 0
        TX packets 22219  bytes 2019314 (2.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 28  memory 0xb1a60000-b1a80000


enp3s0f1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.0.250  netmask 255.255.0.0  broadcast 172.16.255.255
        inet6 fe80::226:55ff:feee:753d  prefixlen 64  scopeid 0x20<link>
        ether 00:26:55:ee:75:3d  txqueuelen 1000  (Ethernet)
        RX packets 2  bytes 128 (128.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 75  bytes 5476 (5.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 64  memory 0xb1a20000-b1a40000

2. 네트워크 계획 및 Openstack 모듈

네트워크 계획

  • 외부 네트워크
    • 인터페이스 : enp3s0f0
    • IP : 192.168.140.250
    • 외부 네트워크를 통하여 모듈을 받아오기위한 그리고 외부에서 접속을 하기 위한 네트워크입니다. 실제 인터넷에 연결되어 있어야 외부에서 모듈을 받아 올수 있으므로 비교적 간단하게 설치가 가능합니다.
  • 내부 네트워크
    • 인터페이스 : enp3s0f1
    • IP : 172.16.0.250
    • 내부적인 통신을 위하여 설정하는 IP로 실제 인터넷에 연결되어 있지 않아도 됩니다. 다만, 이 아이피는 Openstack에서 내부 통신용으로 대표하는 IP로 설정됩니다.

Openstack 모듈

본 설치 설명에서는 아래의 구성요소를 설치할 계획입니다.

구성요소 설명
아이덴티티 (Keystone) 오픈스택 아이덴티티(Keystone)는 사용자들이 접근할 수 있는 오픈스택 서비스들에 매핑되는 사용자들의 중앙 디렉터리를 제공한다
컴퓨트 (Nova) Nova는 OpenStack 컴퓨팅 리소스를 위한 전체 관리 및 액세스 툴로 스케줄링, 생성, 삭제를 처리합니다.
네트워킹 (Neutron) Neutron은 기타 OpenStack 서비스 전반에서 네트워크를 연결합니다.
블록 스토리지 (Cinder) Cinder는 셀프 서비스 API를 통해 액세스할 수 있는 퍼시스턴트 블록 스토리지입니다.
이미지 (Glance) Glance는 다양한 위치에 있는 가상 머신 디스크의 이미지를 저장하고 검색합니다.
오브젝트 스토리지 (Swift) Swift는 내결함성이 뛰어난 오브젝트 스토리지 서비스로, RESTful API를 사용해 구조화되지 않은 애플리케이션을 저장 및 검색합니다.
대시보드 (Horizon) 오픈스택 대시보드(Horizon)는 관리자와 사용자들에게 클라우드 기반 자원 배치의 접근, 제공, 자동화를 위한 그래픽 인터페이스를 제공한다.
오케스트레이션 (Heat) Heat는 오픈스택 네이티브 REST API와 클라우드포메이션 호환 쿼리 API를 통해 여러 개의 복합 클라우드 애플리케이션들을 조직하기 위한 서비스이다.
컨테이너 인프라 관리 서비스(magnum) 컨테이너 인프라 관리 서비스 (magnum)은 Docker Swarm, Kubernetes 및 Mesos와 같은 컨테이너 오케스트레이션 엔진 (COE)가 OpenStack에서 첫 번째 클래스 자원으로 사용 가능하도록 만들어 주는 OpenStack API 서비스입니다.
공유 파일 시스템 (Manila) 오픈스택 공유 파일 시스템(Manila)은 오픈 API를 제공하여 벤더 독립적인 프레임워크 안의 공유물들을 관리한다. 초기 표준에는 공유물에 대한 작성, 삭제, 접근 권한 부여/거부 기능을 포함하며 독립적으로나 각기 다른 다양한 네트워크 환경에서 사용할 수 있다. EMC, 넷앱, HP, IBM, 오라클, Quobyte, 히타치 데이터 시스템의 상용 스토리지 어플라이언스들뿐 아니라 레드햇 GlusterFS와 같은 파일시스템 기술 또한 지원된다.
고 가용성 서비스 (Masakari) 가상머신의 고가용성(HA)를 실현하는 기능으로 가상머신(VM)에 장애가 발생시 오퍼레이터를 거치지 않고 자동으로 복구해 주는 기능이다. 오픈스택 환경에서 HA 워크로드를 관리하기 위해 만들었으며 모니터링과 자동 복구와 같은 기능들을 지원한다.
로드밸런서 서비스 (Octavia) 가상 머신이나 컨테이너에 애플리케이션 올려 외부 트래픽에 노출할 때 로드밸런서를 구성합니다.

 

3. 필요 프로그램 설치 및 설정

서버는 Ubuntu Server 20.04.5 버전을 기준으로 설치하였습니다. 다른 운영체제에서는 명령이 다를 수 있으니 다른 명령을 사용해야할 수 있습니다. (예, apt, yum 등)

기본적인 도구 설치

// 모듈 설치 경로 업데이트
root@aio01:~# apt update

// SSHD 설치하기
root@aio01:~# apt install openssh-server

// SSHD 자동시작
root@aio01:~# systemctl enable ssh

// 기본 네트워크 도구를 설치하고 SSHD의 상태를 확인합니다.
root@aio01:~# apt install net-tools
root@aio01:~# netstat -lntup

// 호스트 이름을 설정합니다.
root@aio01:~# hostnamectl status
root@aio01:~# hostnamectl set-hostname aio01

// hosts에 호스트 이름을 등록합니다.
root@aio01:~# /etc/hosts
127.0.1.1 aio01

// root 사용자가 SSHD에 접속할 수 있도록 권한을 허용합니다.
root@aio01:~# vim /etc/ssh/sshd_config
PermitRootLogin yes

// SSHD를 다시 시작합니다.
root@aio01:~# systemctl restart sshd

Cinder 및 Swift 파티션 나누기

/dev/sdb에 Cinder의 크기는 1.5T, Swift의 크기는 500G * 3개로 구성하였습니다. 아래 파티션 구성의 내용은 실제 명령 수행 테스트는 진행하지 않았습니다. 기존에 설치된 디스크의 파티션이 있어 다시 사용하였습니다. (여기에서 사용된 명령이 일부 다를 수 있습니다.)

// 파티션 관리에 들어가서 파티션을 생성합니다.
root@aio01:~# parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary 0 1500G
(parted) mkpart KOLLA_SWIFT_DATA 1500G 2000G
(parted) mkpart KOLLA_SWIFT_DATA 2000G 2500G
(parted) mkpart KOLLA_SWIFT_DATA 2500G 3000G
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore
(parted) set 1 lvm on
(parted) print
(parted) q

// 디스크 물리 볼륨 생성합니다.
root@aio01:~# pvcreate /dev/sdb1

// 물리 볼륨에 가상볼륨 cinder-volumes 를 추가합니다.
root@aio01:~# vgcreate cinder-volumes /dev/sdb1

// 다른 파티션을 포맷합니다.
root@aio01:~# sudo mkfs.xfs -f -L swift1 /dev/sdb2
root@aio01:~# sudo mkfs.xfs -f -L swift2 /dev/sdb3
root@aio01:~# sudo mkfs.xfs -f -L swift3 /dev/sdb4

// 디스크 상태를 출력합니다.
root@aio01:~# fdisk -l
Disk /dev/sdb: 2.74 TiB, 2996997980160 bytes, 5853511680 sectors
Disk model: RS2BL080
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 88189749-87AF-46E6-88D9-D4F1BCC98CB4

Device          Start        End    Sectors   Size Type
/dev/sdb1        2048 2929686527 2929684480   1.4T Linux LVM
/dev/sdb2  2929686528 3906250751  976564224 465.7G Linux filesystem
/dev/sdb3  3906250752 4882812927  976562176 465.7G Linux filesystem
/dev/sdb4  4882812928 5853509631  970696704 462.9G Linux filesystem

// 가상 볼륨을 출력합니다.
root@aio01:~# vgdisplay
  --- Volume group ---
  VG Name               cinder-volumes
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1335
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1.36 TiB
  PE Size               4.00 MiB
  Total PE              357627
  Alloc PE / Size       357627 / 1.36 TiB
  Free  PE / Size       0 / 0
  VG UUID               2GA0go-96MX-M9d6-hbFJ-8wPu-a7YU-bXtw3J

  --- Volume group ---
  VG Name               ubuntu-vg
  System ID
  Format                lvm2
  Metadata Areas        1
...

// 가상 볼륨을 출력합니다.
root@aio01:~# vgs
  VG             #PV #LV #SN Attr   VSize    VFree
  cinder-volumes   1   3   0 wz--n-    1.36t    0
  ubuntu-vg        1   2   0 wz--n- <927.34g    0

// 디스크의 구조를 출력합니다.
root@aio01:~# lsblk
NAME                                              MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0                                               7:0    0    62M  1 loop /snap/core20/1611
loop1                                               7:1    0  63.2M  1 loop /snap/core20/1634
loop2                                               7:2    0  67.8M  1 loop /snap/lxd/22753
loop3                                               7:3    0    47M  1 loop /snap/snapd/16292
loop4                                               7:4    0    48M  1 loop /snap/snapd/17336
sda                                                 8:0    0 930.4G  0 disk
├─sda1                                              8:1    0   1.1G  0 part /boot/efi
├─sda2                                              8:2    0     2G  0 part /boot
└─sda3                                              8:3    0 927.3G  0 part
  ├─ubuntu--vg-ubuntu--lv                         253:0    0   800G  0 lvm  /
  └─ubuntu--vg-lv--0                              253:1    0 127.3G  0 lvm  [SWAP]
sdb                                                 8:16   0   2.7T  0 disk
├─sdb1                                              8:17   0   1.4T  0 part
│ ├─cinder--volumes-cinder--volumes--pool_tmeta   253:2    0    88M  0 lvm
│ │ └─cinder--volumes-cinder--volumes--pool-tpool 253:4    0   1.4T  0 lvm
│ │   └─cinder--volumes-cinder--volumes--pool     253:5    0   1.4T  1 lvm
│ └─cinder--volumes-cinder--volumes--pool_tdata   253:3    0   1.4T  0 lvm
│   └─cinder--volumes-cinder--volumes--pool-tpool 253:4    0   1.4T  0 lvm
│     └─cinder--volumes-cinder--volumes--pool     253:5    0   1.4T  1 lvm
├─sdb2                                              8:18   0 465.7G  0 part /srv/node/d0
├─sdb3                                              8:19   0 465.7G  0 part /srv/node/d1
└─sdb4                                              8:20   0 462.9G  0 part /srv/node/d2
sr0                                                11:0    1  1024M  0 rom

 

라이브러리 및 프로그램 설치

Kolla-ansible 설치 시에 git을 통해 받아오는 경로에 따라 xena버전이 아닌 다른 모듈을 설치할 수 있습니다. @Repository 이름을 통해 다른 버전을 받아 올 수 있습니다. master의 경우 최신 버전을 다운로드합니다.

Kolla-ansible의 버전에 따라 필요한 ansible 버전이 다를 수 있습니다. xena 버전의 경우 ansible-2.9 ~ ansible-2.10 버전이 필요하여 설치 시 명시하였습니다.

// apt 정보 업데이트
root@aio01:~# sudo apt update

// Python 설치
root@aio01:~# sudo apt install python3-dev libffi-dev gcc libssl-dev

// ansible 설치
root@aio01:~# sudo apt-add-repository ppa:ansible/ansible-2.10
root@aio01:~# sudo apt update
root@aio01:~# sudo apt policy ansible
root@aio01:~# sudo apt install ansible=2.10.7-1ppa~focal
root@aio01:~# ansible --version
root@aio01:~# ansible 2.10.17
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.10 (default, Jun 22 2022, 20:18:18) [GCC 9.4.0]
  
// PIP(Python Installs Packages) 설치
root@aio01:~# sudo apt install python3-pip

// PIP 모듈 업데이트
root@aio01:~# sudo pip3 install -U pip

// Kolla-ansible 설치
root@aio01:~# sudo pip3 install git+https://opendev.org/openstack/kolla-ansible@stable/xena
-- root@aio01:~# sudo pip3 install git+https://opendev.org/openstack/kolla-ansible@master

// Kolla 모듈 설정 파일 복사
root@aio01:~# mkdir -p /etc/kolla
root@aio01:~# chown $USER:$USER /etc/kolla/
root@aio01:~# cp -r /usr/local/share/kolla-ansible/etc_examples/kolla/* /etc/kolla

// Kolla-ansible 관련 종속 모듈 설치
root@aio01:~# kolla-ansible install-deps

// Ansible 동작 환경 설정
root@aio01:~# vim /etc/ansible/ansible.cfg
[defaults]
host_key_checking=False
pipelining=True
forks=100

// 설치 방식에 따른 설정 파일 복사
root@aio01:~# mkdir kolla-ansible
root@aio01:~# cd kolla-ansible
root@aio01:~/kolla-ansible# cp /usr/local/share/kolla-ansible/ansible/inventory/* .

암호 생성 및 수정

// 암호 생성
root@aio01:~/kolla-ansible# kolla-genpwd

// 데이터 베이스와 keystone 암호를 고정
root@aio01:~/kolla-ansible# vi /etc/kolla/password.yml
database_password: openstack
keystone_admin_password: openstack

 

반응형

 

4. 설치

구성요소 설정하기

Openstack의 구성요서를 설정합니다. 아래의 예시는 위에서 설명된 모듈을 기준으로 작성되었습니다. 운영체제는 ubuntu이며 Openstack 버전은 xena로 설정하였습니다.

  • All-in-One으로 구성되므로 haproxy와 keepalived는 필요하지 않습니다.
  • Horizon 은 설치하려는 구성요소를 기준으로 추가하였습니다.
  • 네트워크는 OVN을 기준으로 설정하였습니다.
// 설정 파일 편집
root@aio01:~/kolla-ansible# vi /etc/kolla/globals.yml

# 운영 환경
kolla_base_distro: "ubuntu"

# 설치 형태
kolla_install_type: "source"

# Openstack 버전
openstack_release: "xena"

# 내부 네트워크 IP(All-in-one 이므로 network interface에 할당된 IP를 설정)
kolla_internal_vip_address: "172.16.0.250"

# 외부 네트워크 IP(All-in-one 이므로 network interface에 할당된 IP를 설정)
kolla_external_vip_address: "192.168.140.250"

# 내부 네트워크 인터페이스 설정
network_interface: "enp3s0f1"

# 외부 네트워크 인터페이스 설정
neutron_external_interface: "enp3s0f0"

# 네트워크 방식
neutron_plugin_agent: "ovn"

# 설치 구성요소 선택
enable_openstack_core: "yes"
enable_glance: "{{ enable_openstack_core | bool }}"
enable_haproxy: "no"
enable_keepalived: "no"
enable_keystone: "{{ enable_openstack_core | bool }}"
enable_mariadb: "yes"
enable_memcached: "yes"
enable_neutron: "{{ enable_openstack_core | bool }}"
enable_nova: "{{ enable_openstack_core | bool }}"
enable_rabbitmq: "{{ 'yes' if om_rpc_transport == 'rabbit' or om_notify_transport == 'rabbit' else 'no' }}"
enable_cinder: "yes"
enable_cinder_backup: "yes"
enable_cinder_backend_lvm: "yes"
enable_fluentd: "yes"
enable_heat: "{{ enable_openstack_core | bool }}"
enable_horizon: "{{ enable_openstack_core | bool }}"
enable_horizon_heat: "{{ enable_heat | bool }}"
enable_horizon_magnum: "{{ enable_magnum | bool }}"
enable_horizon_manila: "{{ enable_manila | bool }}"
enable_horizon_masakari: "{{ enable_masakari | bool }}"
enable_horizon_octavia: "{{ enable_octavia | bool }}"
enable_magnum: "yes"
enable_manila: "yes"
enable_masakari: "yes"
enable_neutron_provider_networks: "yes"
enable_nova_ssh: "yes"
enable_octavia: "yes"
enable_ovn: "{{ enable_neutron | bool and neutron_plugin_agent == 'ovn' }}"
enable_swift: "yes"

glance_backend_file: "yes"

# Cinder 설정
cinder_volume_group: "cinder-volumes"

# 가상머신 설정
nova_compute_virt_type: "kvm"
nova_console: "novnc"

Swift 설정하기

Swift 사용을 위해 스토리지 노드를 초기화합니다. 아래는 쉘을 만들어서 처리하였습니다.

root@aio01:~/kolla-ansible# vi swift.sh
#!/bin/bash

STORAGE_NODES=(192.168.140.250)
#STORAGE_NODES=(192.168.0.2 192.168.0.3 192.168.0.4)
KOLLA_SWIFT_BASE_IMAGE="kolla/oraclelinux-source-swift-base:4.0.0"

mkdir -p /etc/kolla/config/swift

# Object ring
docker run \
  --rm \
  -v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
  $KOLLA_SWIFT_BASE_IMAGE \
  swift-ring-builder \
    /etc/kolla/config/swift/object.builder create 10 3 1

for node in ${STORAGE_NODES[@]}; do
    for i in {0..2}; do
      docker run \
        --rm \
        -v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
        $KOLLA_SWIFT_BASE_IMAGE \
        swift-ring-builder \
          /etc/kolla/config/swift/object.builder add r1z1-${node}:6000/d${i} 1;
    done
done

# Account ring
docker run \
  --rm \
  -v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
  $KOLLA_SWIFT_BASE_IMAGE \
  swift-ring-builder \
    /etc/kolla/config/swift/account.builder create 10 3 1

for node in ${STORAGE_NODES[@]}; do
    for i in {0..2}; do
      docker run \
        --rm \
        -v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
        $KOLLA_SWIFT_BASE_IMAGE \
        swift-ring-builder \
          /etc/kolla/config/swift/account.builder add r1z1-${node}:6001/d${i} 1;
    done
done

# Container ring
docker run \
  --rm \
  -v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
  $KOLLA_SWIFT_BASE_IMAGE \
  swift-ring-builder \
    /etc/kolla/config/swift/container.builder create 10 3 1

for node in ${STORAGE_NODES[@]}; do
    for i in {0..2}; do
      docker run \
        --rm \
        -v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
        $KOLLA_SWIFT_BASE_IMAGE \
        swift-ring-builder \
          /etc/kolla/config/swift/container.builder add r1z1-${node}:6002/d${i} 1;
    done
done

for ring in object account container; do
  docker run \
    --rm \
    -v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
    $KOLLA_SWIFT_BASE_IMAGE \
    swift-ring-builder \
      /etc/kolla/config/swift/${ring}.builder rebalance;
done


root@aio01:~/kolla-ansible# chmod 755 swift.sh

root@aio01:~/kolla-ansible# ./swift.sh

Octavia 설정하기

로드 발랜서를 정상적으로 사용하기 위해서는 TLS설정이 필요합니다. 아래는 인증서를 자동으로 만들기위한 과정입니다.

# 인증서 발급 정보를 추가합니다.
root@aio01:~/kolla-ansible# vi /etc/kolla/globals.yml

# Octavia 관련 설정
octavia_certs_country: KR
octavia_certs_state: Seoul
octavia_certs_organization: Company
octavia_certs_organizational_unit: Octavia

// 인증서를 초기화합니다.
root@aio01:~/kolla-ansible# kolla-ansible octavia-certificates

설치하기

아래의 작업은 대략 2시간정도 소요됩니다. (상황에 따라 달라질 수 있습니다.)

아래의 작업에서 모듈배포(deploy)는 반드시 물리서버에 직접 붙어서 작업해야 합니다. Openstack 배포시에 네트워크 정보를 재설정하는 부분이 포함되어 있어 SSH로 원격에서 접속할 경우 네트워크 연결이 끊기게 되며 끊긴 이후부터는 설치과정이 중지됩니다. 또한 끊긴 이 후부터는 물리서버에서 Openstack 모듈을 삭제하고 재부팅해야 네트워크가 복원됩니다.

# Kolla를 통한 배포를 위해 종속 모듈을 설치합니다.
# 대략 5분정도 소요됩니다.
root@aio01:~/kolla-ansible# kolla-ansible -i ./all-in-one bootstrap-servers

# 환경설정(/etc/kolla/globals.yml)의 오류가 없는지 확인합니다.
# 대략 10분정도 소요됩니다.
root@aio01:~/kolla-ansible# kolla-ansible -i ./all-in-one prechecks

# 환경설정에 따라 필요한 설치 모듈을 미리 다운로드합니다.
# 대략 30분정보 소요되었습니다. 네트워크의 상황에 따라 달라질 수 있습니다.
root@aio01:~/kolla-ansible# kolla-ansible -i ./all-in-one pull

# 모듈을 배포합니다.
# 대략 1시간 정보 소요되었습니다. 서버의 사양에 따라 달라 질 수 있습니다.
# 반드시 물리서버에서 직접 작업해야 합니다.
# (또는 설정에서 외부네트워크로 설정된 네트워크가 아닌 다른 네트워크로 연결해서 작업해야 합니다.)
root@aio01:~/kolla-ansible# kolla-ansible -i ./all-in-one deploy


# 모듈을 확인합니다.
# 대략 3분 정보 소요되었습니다.
root@aio01:~/kolla-ansible# kolla-ansible -i ./all-in-one check

설치 오류시 복원하기

# 설치된 모듈 삭제하기
root@aio01:~# kolla-ansible destroy -i all-in-one --yes-i-really-really-mean-it

# 서버 재시작하기
root@aio01:~# reboot -p now

 

5. 설치 후 부가 설정

네트워크 설정

br-ex 및 br-int 브릿지가 설정되어 있는지 확인하고 네트워크를 초기화하여 네트워크를 초기화합니다.

# OVN 네트워크를 위한 br-ex 및 br-int 브릿지가 설정되어 있는지 확인합니다.
root@aio01:~# docker exec -it ovn_controller bash
(ovn-controller)[root@aio01 /]# ovs-vsctl show
9f561625-a594-4483-86b8-f725589289d3
    Bridge br-int
        fail_mode: secure
        datapath_type: system
        Port br-int
            Interface br-int
                type: internal
    Bridge br-ex
        Port br-ex
            Interface br-ex
                type: internal
        Port enp3s0f0
            Interface enp3s0f0
(ovn-controller)[root@aio01 /]# exit
exit

# 네트워크 정보를 수정합니다.
# 기존 인터페이스에 설정된 정보를 복하하여 br-ex의 설정으로 복사합니다.
# 기존 인터페이스(enp3sf0)는 {} 로 처리합니다.
root@aio01:~# vi /etc/netplan/00-*.yaml

    br-ex:
      addresses:
      - 192.168.140.250/24
      gateway4: 192.168.140.254
      nameservers:
        addresses:
        - 8.8.8.8
        - 8.8.8.4
        - 168.126.63.1
        search: []
    enp3s0f0: {}
    # addresses:
    #  - 192.168.140.250/24
    #  gateway4: 192.168.140.254
              #nameservers:
              #addresses:
              #- 8.8.8.8
              #- 8.8.8.4
              # - 168.126.63.1
              #search: []
    enp3s0f1:
      addresses:
      - 172.16.0.250/16
        #gateway4: 172.16.0.101
        #nameservers:
        #addresses: []
        #search: []
  version: 2
  

# 네트워크 정보를 반영합니다.
root@aio01:~# netplan apply

# 네트워크가 정보가 정상적으로 반영되었는지 확인합니다.
root@aio01:~# ifconfig -a
br-ex: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.140.250  netmask 255.255.255.0  broadcast 192.168.140.255
...
br-int: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether ea:8a:cb:bb:96:43  txqueuelen 1000  (Ethernet)
...

enp3s0f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::226:55ff:feee:753c  prefixlen 64  scopeid 0x20<link>
...
enp3s0f1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.0.250  netmask 255.255.0.0  broadcast 172.16.255.255
...
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
...
ovs-system: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 16:50:6c:3d:9f:de  txqueuelen 1000  (Ethernet)
...

root@aio01:~#

 

 

 

6. 설치 후 추가 작업

Openstack CLI 초기화

# CLI 인증 쉘을 생성합니다.
root@aio01:~# kolla-ansible post-deploy

# openstack client를 설치합니다.
root@aio01:~# apt install python3-openstackclient -y

# 쉘 파일을 실행하여 접속정보를 읽어드립니다.
root@aio01:~# source /etc/kolla/admin-openrc.sh 

# Openstack에 접속 테스트합니다.
root@aio01:~# openstack endpoint list
+----------------------------------+-----------+--------------+-----------------+---------+-----------+---------------------------------------------------+
| ID                               | Region    | Service Name | Service Type    | Enabled | Interface | URL                                               |
+----------------------------------+-----------+--------------+-----------------+---------+-----------+---------------------------------------------------+
| 04f44e8869164007b868b4442a0f0dfa | RegionOne | swift        | object-store    | True    | admin     | http://172.16.0.250:8080/v1                       |
| 0c54ed7cb48d46bebf86ceebf545f48a | RegionOne | neutron      | network         | True    | public    | http://192.168.140.250:9696                       |
| 0c8923686b6f49a28632ffd9ef5bcc21 | RegionOne | manila       | share           | True    | public    | http://192.168.140.250:8786/v1/%(tenant_id)s      |
......
| 12ed1cc35cae4afbba85a262ad95ca4b | RegionOne | octavia      | load-balancer   | True    | public    | http://192.168.140.250:9876                       |
| fcbc0b1e0b56488590cd3ea0794513a3 | RegionOne | keystone     | identity        | True    | internal  | http://172.16.0.250:5000                          |
| ff6a20888e444fb983553a0c9a14b313 | RegionOne | neutron      | network         | True    | admin     | http://172.16.0.250:9696                          |
+----------------------------------+-----------+--------------+-----------------+---------+-----------+---------------------------------------------------+

바인딩 주소에 따른 외부 접속 설정

# 대시보드 접속정보 변경
root@aio01:~# vi /etc/kolla/horizon/horizon.conf
 172.16.0.250 -> 192.168.140.250
 80 -> 8888
 
# Openstack 구성요소의 바인딩 주소 변경 
root@aio01:~# cd /etc/kolla
root@aio01:~# vi keystone/wsgi-keystone.conf mariadb/galera.cnf neutron-server/neutron.conf
 172.16.0.250 -> 0.0.0.0

root@aio01:~# vi octavia-api/octavia.conf octavia-api/octavia-wsgi.conf nova-api/nova-api-wsgi.conf
 172.16.0.250 -> 0.0.0.0

root@aio01:~# vi cinder-api/cinder-wsgi.conf glance-api/glance-api.conf
 172.16.0.250 -> 0.0.0.0

root@aio01:~# vi nova-nonnvproxy/nova.conf swift-proxy-server/swift-proxy-server.conf
 novncproxy_host = 0.0.0.0


# Openstack 구성요소 재시작 
root@aio01:~# docker restart mariadb 
mariadb
root@aio01:~# docker restart horizon
horizon
root@aio01:~# docker restart keystone
keystone
root@aio01:~# docker restart neutron_server
neutron_server
root@aio01:~# docker restart octavia_api 
octavia_api
root@aio01:~# docker restart nova_api 
nova_api
root@aio01:~# docker restart cinder_api 
cinder_api
root@aio01:~# docker restart glance_api 
glance_api
root@aio01:~# docker restart nova_novncproxy 
nova_novncproxy
root@aio01:~# docker restart swift_proxy_server
swift_proxy_server

# Mariadb 접속 테스트
root@aio01:~# apt install mysql-client
root@aio01:~# mysql -uroot -p -h 192.168.140.250

외부 네트워크 라우터 생성

  • http://192.168.140.250:8888로 접속하여 horizon에 로그인합니다.

  • 외부 네트워크 생성을 위하여 ml2_type_flat의 flat_networks의 값을 확인합니다.
root@aio01:~# 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의 대역 정보를 설정합니다.

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

  • 프로젝트 > 네트워크 > 네트워크 토폴로지 페이지로 이동하여 생성된 네트워크의 구성을 확인합니다.

  • 프로젝트 > 네트워크 > 네트워크 페이지로 이동하여 네트워크를 추가 확인합니다. 필요시 가용성 구역 힌트에 nova를 입력합니다.

  • 서브넷의 정보를 추가합니다.

  • 서브넷을 생성합니다.

  • 프로젝트 > 네트워크 > 네트워크 토폴로지 페이지로 이동하여 생성된 네트워크의 구성을 확인합니다.

 

마닐라 설정

# wget http://tarballs.openstack.org/manila-image-elements/images/manila-service-image-master.qcow2

# openstack image create "manila-service-image" \
--file manila-service-image-master.qcow2 \
--disk-format qcow2 \
--container-format bare \
--public

# openstack flavor create manila-service-flavor --id 100 --ram 256 --disk 0 --vcpus 1

 

 

 

 

 

https://docs.openstack.org/mitaka/install-guide-obs/launch-instance-manila.html

 

 

OpenStack Docs: Shared File Systems

Note In typical deployments, you should create an instance from an image that supports network file systems such as NFS/CIFS to evaluate the Shared File Systems service. This guide should use the CirrOS image for instances to reduce resource requirements f

docs.openstack.org

7. 참고자료

 

 

 

 

728x90