[OpenStack] 구축하기 by PackStack

minujana
6 min readJul 28, 2021

미루고 미뤄뒀었던 OpenStack 공부를 본격적으로 하려고 한다. 하게 된 계기는 Terraform을 공부하려는데 AWS 같은 퍼블릭을 사용하고 싶지는 않았고, VMWare나 oVirt 같은 가상화보단 이참에 OpenStack을 구축해서 같이 공부해보자는 생각으로 시작했다.

언제 포스팅이 다 마무리될지는 모르지만, 순서는 이렇게 잡으려고 한다.

  • OpenStack 구축 + 확장
  • Terraform 구축
  • Terraform 을 이용하여 OpenStack 핸들링해보기

예전에 OpenStack을 공부하려 할 때보다 지금은 참고할 수 있는 자료가 좀 더 많아진 것 같다. PackStack이라는 유용한 툴도 있어서 구축 자체는 아주 쉬워졌다. 오픈스택 클러스터를 만드는 것은 쉬워졌지만, 오픈스택 자체가 여러 모듈로 나뉘어있기도 하고, 구조 자체를 이해하기가 쉽지 않다 보니… 아는 것 보다 모르는 게 더 많은 것 같다.

PackStack은 Puppet 기반으로 만들어진 도구이고, CentOS와 RHEL 같은 RPM 계열 리눅스에서만 호환이 된다고 한다. 그래서 이번에 서버OS를 CentOS 8.2로 설치했기 때문에 DevStack 대신 PackStack을 사용하였다.

설치는 RDO 프로젝트에서 PackStack과 함께 제공하는 docs를 참고하여 진행하였다.

Installation Requirements

RHEL 8 이후부터는 네트워크를 기본적으로 NetworkManager가 관리하게 되는데 OpenStack은 이를 거부한다.. 나도 아직 스크립트가 더 편한 것 같다.

따라서 network scripts를 켜고, NetworkManger를 끄는 다음 작업을 진행해야한다.

#yum install network-scripts
#systemctl disable --now NetworkManager
#systemctl enable --now network
#systemctl disable --now firewalld

다음으로 powertools라는 레포를 활성화 시켜주어야 하는데, OS 버전에 따라서 애초에 powertools라는 레포가 존재하지 않을수도 있다.

#dnf config-manager --enable powertools

powertools 레포가 활성화가 안된다면, 패키지 업데이트를 먼저 진행하고, 다시 진행해보자

#dnf update
#dnf config-manager --enable powertools

이제 원하는 오픈스택의 릴리즈 버전의 Repo를 받아오면 되는데, 내가 진행한 CentOS 8.2 기준으로 아래와 같이 레포에서 확인할 수 있다.

나는 그중에서 victoria로 진행을 하였다.

#dnf install centos-release-openstack-victoria

여기까지 하면, 이제 PackStack을 실행할 준비는 끝났다.

PackStack Install

굳이 나눌 필요없지만,,,, 구분하고 싶어서 단을 나눴는데 딱 1개의 스텝밖에 없다.

#dnf install openstack-packstack

위 커맨드를 이용해서 packstack 패키지를 설치해주자

Install OpenStack

이제 PackStack을 돌려서 OpenStack을 설치하자.

PackStack을 돌리는 과정은 2가지로 구분할 수 있다.

  • all in one
  • using answer.txt

말그대로 올인원은 알아서 설치해! 이고,
answer.txt 파일을 사용하는 것은 사전에 미리 OpenStack 구성요소에대한 것을 정의해놓은 파일을 참고하여 OpenStack을 구성하도록 하는 것이다.

Puppet, Terraform, Ansible 등이 Default 값대신 파일을 참조한다고 생각하면 된다. 다만, PackStack을 이용하여서 자동화 된 부분이 OpenStack의 100% 모든 구성요소와 기능에 대해 진행된 것으로 보이지는 않는다.

내가 사용하는 것에 있어서는 PackStack으로 구성한 것만하여도 아무런 불편함이 없다만…… 커뮤니티나 문서를 참고하였을 때 눈치상 아직 PackStack으로 완전히 구현된건 아닌것 같다.

현재 우리는 answer file이 없고, 어떻게 작성해야하는지도 모르니 우선 all in one으로 packstack을 구동시켜보자. 처음부터 answer file을 이용하고 싶으면, 이 포스팅의 더 아래부분을 참고 하도록 하자

#packstack --allinone

너무나 간단하게 openstack이 구성이 되었을 것이다.

#source keystonerc_admin
#openstack service list
#openstack compute service list

위 처럼 커맨드를 이용해서 오픈스택 클러스터에 접속하고, 구성된 서비스 들을 확인해서 볼수도 있고, DashBoard에 접속해서 확인해 볼 수도 있다.

URL : http;//server IP
사용자 이름: keystonerc_admin.OS_USERNAME
암호: keystonerc_admin.OS_PASSWORD
계정정보는 keystonerc_admin 파일을 cat 해보면 USERNAME / PASSWORD가 적혀있다. 해당 정보로 대쉬보드에 로그인할 수 있다.

로그인 하면 아래와 같이 뜰 것!

all in one으로 설치하면 이렇게 설치가 완료가 된다.
앞서 말했던 나머지 answer 파일을 이용하는 방법은 이렇게 구축된 서버에 가보면 answer.txt 파일이 생겼을 것이다.

해당 파일을 열어보면, 설치할 구성요소 부터 어떤 모듈, 타입 등등 사전에 정의를 미리 다 할 수 있다. 이 파일은 클러스터를 확장할 때 유용하게 쓰이기 때문에 잘 보관하도록 하자.

만약 처음에 설치할 때 부터 이렇게 answer 파일을 이용해서 원하는 것만 구축을 하고 싶다면, 먼저 answer file을 만들자

#packstack --gen-answer-file ./answer.txt

해당 디렉토리에 지정한 이름으로 변수에 대한 value가 비어있는 파일이 하나 만들어 질 것이다.

이제 원하는 요소에 원하는 value 값을 기입하고 아래와 같이 실행하자

#packstack --answer-file ./answer.txt

정상적으로 파일을 작성하였고, 배포가 잘 됬다면, 대시보드와 자기가 작성한 answer 파일대로 서비스가 배포가 되었을 것이다.

개인적으로 오픈스택을 잘 알지 못한다면 해당 answer 파일을 처음부터 완벽하게 작성하기엔 힘들기에 초기 구성은 all in one으로 하고, 추가 노드에 대한 배포를 answer 파일을 활용하는게 좋고 효율적인 것 같다.

다음 포스팅에선 노드를 추가하여 OpenStack 클러스터를 확장시켜보겠다.

--

--