PackStack을 이용한 단일 노드 OpenStack Stein 설치 2편 - PackStack 사용하기

OpenStack · 2020. 3. 26. 11:31

이번 포스팅은 지난 글에서 준비한 CentOS7 환경에서 PackStack 패키지를 이용한 OpenStack Stein Allinone을 설치해보겠습니다.

 

OpenStack Stein 설치 환경인 CentOS 7 준비는 아래 포스팅을 참고해주세요

2020/03/25 - [OpenStack] - PackStack을 이용한 단일 노드 OpenStack Stein 설치 1편 - 설치환경준비

 

PackStack을 이용한 단일 노드 OpenStack Stein 설치 1편 - 설치환경준비

이번 포스팅은 지난 글에서 구비한 하이퍼바이저인 Proxmox를 이용하여 CentOS 가상머신을 만들고 PackStack을 이용한 OpenStack Stein 버전을 설치해보겠습니다. Proxmox 설치 및 이용은 아래 포스팅에서 확인해..

blog.moonsh.me

 

 


 

 

1. PackStack 설치 준비

 

PackStack을 이용해 OpenStack을 설치하기 이전에 이 곳에서 나와있듯이 몇가지 네트워크와 관련된 서비스를 중지해야 합니다.

 

### CentOS의 방화벽 서비스를 중지합니다
### 설치될 OpenStack의 Neutron 모듈이 대체합니다
$ sudo systemctl disable firewalld
$ sudo systemctl stop firewalld 

### CentOS의 네트워크 매니징 서비스를 중지합니다
### 마찬가지로 설치될 Neutron 모듈이 대체합니다.
$ sudo systemctl disable NetworkManager
$ sudo systemctl stop NetworkManager

위의 서비스가 정상적으로 중지되면 다음 단계로 이동합니다.

 

 

 

 

2. PackStack 설정 방법

 

OpenStack은 수 많은 클라우드 인프라 관리 기능을 제공하지만 그렇기에 설치단계에서도 수 많은 설정들을 요구합니다.

 

이 포스트에서 진행할 OpenStack을 설치는 대부분 기본 설정을 이용하지만 OpenStack의 정상적인 작동을 위해서는 몇가지 설정을 수정해주어야 할 필요가 있습니다.

 

설정해야 하는 사항들은 다음과 같습니다.

 

밑에서 설명할 설정방법을 이용해 PackStack에 입력할 것이기에 지금은 읽고 넘어가주시면 되겠습니다.

 

 

 

※ 참고사항 ※

 

OpenStack Stein 버전부터 기존에 사용하던 네트워크 구조와 비해 큰 변화가 있었던 것을 확인됩니다.

Modular Layer 2 의 OVN 이 도입됬고 VXLAN이 아닌 GENEVE를 이용하는 것을 보이는데

해당 변경사항으로 인해 'packstack --allinone' 커맨드만 입력시 설치는 정상적으로 이루어 지지만

인스턴스 생성시도 시 Port binding이 실패한다는 에러메시지를 출력하며 생성이 불가능합니다.

이를 해결하기 위해 아래 설정 사항은 변경된 ML2의 각종 드라이버를 Stein 버전 이전의 상태로 설정하는 항목이 포함되어 있습니다.

Stein 버전에서 왜 Port binding 실패가 발생되는지 아시는 분은 댓글 부탁드립니다.

 

 

 

### OpenStack의 실 사용을 목적으로 하지 않기에 디버그 모드를 활성화 해줍니다.
debug = Yes

### OpenStack의 Demo모드를 비활성화 합니다.
config_provision_deomo = n

### OpenStack이 설치되고 접속할 Horizon 대쉬보드의 기본 패스워드를 pw로 설정합니다.
### 설정하지 않는다면 나중에 keystone 파일을 이용해 패스워드를 알아내야 합니다.
### 설치단계에서 간편한 패스워드를 지정하면 나중에 귀찮지 않습니다.
### 마찬가지로 실 사용을 목적으로 하지 않기에 간단한 pw로 지정했습니다.
default-password = pw

### OpenStack의 네트워크 모듈인 Neutron이 사용할 네트워크 브릿지와 외부 네트워크 포트를 연결해줍니다.
### 'br-ex'는 Neutron의 브릿지이며 'ens18'은 가상머신의 인터페이스 이름입니다.
### 인터페이스 이름은 'ip a' 명령어를 이용하여 확인해줍니다.
### 대부분 'eth0'와 같은 포트 이름을 가지지만 저의 경우엔 'ens18'를 이름으로 가지고 있습니다.
os-neutron-ovs-bridge-interfaces = br-ex:ens18

### Stein 이전의 버전은 타입 드라이버로 VXLAN을 이용하는데에 반해
### Stein 버전은 GENEVE를 이용합니다.
### OpenStack 테넌트가 사용할 타입 드라이버를 이전버전으로 변경합니다.
os-neutron-ml2-tenant-network-types = vxlan

### Stein 이전의 버전은 메카니즘 드라이버로 Openvswitch를 이용하는데에 반해
### Stein 버전은 OVN을 이용합니다.
os-neutron-ml2-mechanism-drivers = openvswitch

### Stein 이전의 버전은 타입 드라이버로 VXLAN을 이용하는데에 반해
### Stein 버전은 GENEVE를 이용합니다.
### 타입 드라이버를 이전버전으로 변경합니다.
os-neutron-ml2-type-drivers = vxlan,flat

### OVN이 아닌 Openvswitch를 l2 에이전트로 지정합니다.
os-neutron-l2-agent = openvswitch

### 추후 OpenStack의 설치가 끝나고 OpenStack에서 사용할 Floating IP 범위입니다.
### CIDR 포맷을 따릅니다. 원하시는 IP 범위를 입력하실 수 있습니다.
provision-demo-floatrange = 10.1.1.0/24

### OpenStack 인스턴스와 연결할 수 있는 IP의 범위입니다.
### OpenStack 인스턴스는 해당 범위에 있는 IP를 사용할 수 있습니다.
### 아래 범위는 예시이므로 원하시는 범위로 변경할 수 있습니다.
### 다만, 위의 'floatrange'와 일치하는 범위여야 합니다.
provision-demo-allocation-pools = '["start=10.1.1.10,end=10.1.1.50"]'

### OpenStack의 오케스트레이션 서비스 모듈입니다.
### 테스트 목적으로 설치하며 Cloud Formation을 써보기 위해 cfn도 설치합니다.
### 선택사항이며 필수는 아닙니다.
os-heat-install = y
os-heat-cfn-install = y

 

 

 

편리하게도 PackStack에는 3가지 방법을 이용해 설치 전 OpenStack의 각종 속성을 미리 지정할 수 있습니다.

 

  1. Command Line을 이용한 'Interactive' 속성 지정 후 설치
  2. Answer File을 이용한 'Non-Interactive' 속성 지정 후 설치
  3. --allinone 플래그를 이용한 one line 설치

PackStack은 'Interactive' 과 'Non-Interactive' 모드, 그리고 '--allinone' 플래그를 지원합니다.

위의 세 가지 모드는 설정사항을 어떤식으로 입력하느냐의 차이라고 볼 수 있습니다.

 

 

이 포스트에서 저는 --allinone 플래그를 사용하지만 설치 이전에 각 모드의 사용법과 차이점을 확인하고 진행하겠습니다.

 

 

 

2 - 1. Interactive Mode

 

우선 'Interactive' 모드는 설정사항들을 Command Line 인터페이스에서 받습니다.

 

### PackStack Interactive 모드는 단순히 아래 명령어를 입력하면 진입할 수 있습니다
$ packstack

 

 

다음과 같이 설치 중 필요한 사항들을 PackStack이 물어봅니다.

 

...
...
Should Packstack install OpenStack Image service (Glance) [y|n] [y] :
Should Packstack install OpenStack Block Storage service (Cinder) [y|n] [y] :
Should Packstack install OpenStack Compute service (Nova) [y|n] [y] :
Should Packstack install OpenStack Networking service (Neutron) [y|n] [y] :
Should Packstack install OpenStack Dashboard service (Horizon) [y|n] [y] :
Should Packstack install OpenStack Object Storage service (Swift) [y|n] [n] :
Should Packstack install OpenStack Telemetry service (Ceilometer) [y|n] [y] :
Should Packstack install Heat [y|n] [n] :
...
...

 

'Interactive' 모드를 이용해 설치를 진행하고 싶으시다면 위에서 언급한 변경해야 하는 설정사항을 참고해 설치 중 PackStack이 해당 항목 요구 시 입력할 수 있습니다.

 

 

 

2 - 2. Non-Interactive Mode

 

반면 'Non-Interactive' 모드는 Interactive 모드와는 다르게 모든 설정사항들을 담고 있는 Answer-file을 설치 이전에 미리 생성 한 뒤 필요에 맞게 수정하고, PackStack이 파일의 내용에 따라 설치를 진행하는 방식입니다.

 

Non-Interactive 모드를 사용하기 위해서는 Answer-file을 먼저 생성해야 합니다.

 

### 아래 명령어를 이용하여 헌재 디렉토리에 answer-file.txt를 생성합니다.
$ packstack --gen-answer-file=./answers-file.txt

 

생성된 answer-file.txt를 vi와 같은 에디터로 열어줍니다.

 

### vi를 사용했지만 nano와 같은 다른 에디터도 가능합니다.
$ vi answer-file.txt

 

answer-file.txt 에는 다음과 같이 각 설정 항목과 자세한 주석이 기록되어 있습니다.

 

...
...

# Specify 'y' to install OpenStack Database (trove) ['y', 'n']
CONFIG_TROVE_INSTALL=n

# Specify 'y' to install OpenStack Bare Metal Provisioning (ironic).
# ['y', 'n']
CONFIG_IRONIC_INSTALL=n

# Specify 'y' to install the OpenStack Client packages (command-line
# tools). An admin "rc" file will also be installed. ['y', 'n']
CONFIG_CLIENT_INSTALL=y

# Comma-separated list of NTP servers. Leave plain if Packstack
# should not install ntpd on instances.
CONFIG_NTP_SERVERS=

# Comma-separated list of servers to be excluded from the
# installation. This is helpful if you are running Packstack a second
# time with the same answer file and do not want Packstack to
# overwrite these server's configurations. Leave empty if you do not
# need to exclude any servers.
EXCLUDE_SERVERS=

# Specify 'y' if you want to run OpenStack services in debug mode;
# otherwise, specify 'n'. ['y', 'n']
CONFIG_DEBUG_MODE=n

# Server on which to install OpenStack services specific to the
# controller role (for example, API servers or dashboard).
CONFIG_CONTROLLER_HOST=10.25.1.2

# List the servers on which to install the Compute service.
CONFIG_COMPUTE_HOSTS=10.25.1.2

# List of servers on which to install the network service such as
# Compute networking (nova network) or OpenStack Networking (neutron).
CONFIG_NETWORK_HOSTS=10.25.1.2

# Specify 'y' if you want to use VMware vCenter as hypervisor and
# storage; otherwise, specify 'n'. ['y', 'n']
CONFIG_VMWARE_BACKEND=n

...
...

 

위의 설정 파일의 일부를 보면 OpenStack 의 모듈인 Trove, Ironic 등의 각종 모듈의 설치 여부는 물론 디버그 모드 설정과 OpenStack의 각 모듈이 단일 노드가 아닌 멀티 노드에 설치되는 경우 각 노드의 IP주소를 입력하는 항목도 확인 할 수 있습니다.

 

'Non-Interactive' 모드를 이용해 설치를 진행하고 싶으시다면 위에서 언급한 변경해야 하는 설정사항을 참고해 answer-file.txt 에서 해당 항목을 찾아 수정하시면 됩니다.

이 포스트에서 사용하는 CentOS 가상머신은 PackStack 기본 설정을 기준으로 설치되며 10.25.1.2 라는 IP를 가지고 있으며 단일 노드를 대상으로 설치하기에 모듈의 설치 여부나 IP주소를 수정할 필요는 없습니다.

 

answer-file.txt 파일의 수정이 끝나면 아래 명령어를 이용하여 PackStack 설치를 진행할 수 있습니다.

 

### 수정한 answer-file.txt를 PackStack에게 알려줍니다.
$ packstack --answer-file=./answer-file.txt

answer-file.txt의 각 설정항목이 무엇을 의미하는지 모두 확인하는 것이 가장 좋겠지만 50KB 정도의 용량을 가진 answer-file.txt의 각종 설정항목을 모두 읽어보기에는 너무 많기때문에 다음에 설명할 '--allinone' 플래그를 이용한 설치방법에서 설치에 필수적인 항목들 몇가지를 추려서 알아보겠습니다.

 

 

 

2 - 3. --allinone flag

 

위에서 설명한 Interactive, Non-Interactive 모드와는 다르게 '--allinone' 플래그 설치법은 상대적으로 간단합니다.

 

### 초간편 설치법 --allinone
$ packstack --allinone

위 명령어를 이용해 PackStack이 제공하는 기본설정을 이용해 OpenStack을 설치 할 수 있습니다.

 

하지만 단순히 --allinone 플래그만 지정해주면 기본 설정을 이용해 설치가 되므로 위에서 언급한 몇가지 설정 항목을 같이 입력해주어야 할 필요가 있습니다.

 

### 위에서 언급한 설정들을 플래그로 넘겨줍니다.
$ sudo packstack --debug --allinone --default-password pw         \
                 --os-neutron-ovs-bridge-interfaces=br-ex:ens18   \
                 --os-neutron-ml2-tenant-network-types=vxlan      \
                 --os-neutron-ml2-mechanism-drivers=openvswitch   \
                 --os-neutron-ml2-type-drivers=vxlan,flat         \
                 --os-neutron-l2-agent=openvswitch                \
                 --os-heat-install=y --os-heat-cfn-install=y

해당 명령어 한 줄을 이용하여 위의 모든 설정항목을 반영할 수 있습니다.

 

 

위 3가지 방법중 하나를 선택하고 설치를 진행하시면 아래와 같은 메시지가 출력되며 설치과정을 보여줍니다.

 

설치 과정에서 루트 패스워드 요청이 발생할 수 있습니다

설치 과정이 마무리되면 커널 업데이트가 있을 수 있으니 재부팅을 권장합니다.

 

Installing:
Clean Up                                             [ DONE ]
Discovering ip protocol version                      [ DONE ]
Setting up ssh keys                                  [ DONE ]
Preparing servers                                    [ DONE ]
Pre installing Puppet and discovering hosts' details [ DONE ]

...
...

 * A new answerfile was created in: /root/packstack-answers-20200222-223637.txt
 * Time synchronization installation was skipped. Please note that unsynchronized time on server instances might be problem for some OpenStack components.
 * Warning: NetworkManager is active on 10.25.1.2. OpenStack networking currently does not work on systems that have the Network Manager service enabled.
 * File /root/keystonerc_admin has been created on OpenStack client host 10.0.0.156. To use the command line tools you need to source the file.
 * To access the OpenStack Dashboard browse to http://10.25.1.2/dashboard .
Please, find your login credentials stored in the keystonerc_admin in your home directory.
 * Because of the kernel update the host 10.25.1.2 requires reboot.

 

 

 

 

3. Horizon Dashboard 접속하기

 

설치가 마무리 되면 http://노드_IP주소/dashboard 로 접속해 OpenStack 대시보드를 확인 할 수 있습니다.

기본 아이디인 admin과 설정 옵션으로 넘겨준 패스워드인 pw를 입력해 로그인합니다.

 

만약 설치과정에서 패스워드를 설정하지 않았다면 아래 명령어를 이용하여 확인 가능합니다.

 

### 자동생성된 패스워드를 확인합니다
$ sudo cat /root/keystonerc_admin | grep OS_PASSWORD

 

OpenStack 대시보드

 

 


 

 

 

여기까지 PackStack을 이용한 OpenStack 설치를 마무리하였습니다. 

3편에는 설치된 OpenStack을 이용해 CirrOS 인스턴스를 생성 및 실행하는 방법을 알아보겠습니다.