공식 문서 : yoga 버전을 설치할 예정이니 우상단 version에서 YOGA를 선택 해주세요.
The Most Widely Deployed Open Source Cloud Software in the World
오픈스택은 데이터 센터 정도 대규모의 서버(컴퓨터), 스토리지, 네트워킹 리소스를 관리하는 시스템 입니다. 관리는 API를 통해 이루어낼 수 있습니다. 기본적인 IaaS(Infrastructure-as-a-service) 기능 이상의 추가적인 구성들이 orchestration, fault management, 고가용성의 service management를 가능케 합니다.
오픈 스택은 수 많은 서비스로 나뉘어져 있습니다. 이런 형태는 장점과 단점이 양립하며 공존 합니다. 장점으로는 관리에 있어 정말 필요로 하는 서비스를 컨트롤 할 수 있다는 점이겠고, 단점으로는 전체를 관리 혹은 설치하는데 몹시 까다로워 진다는 점이겠습니다.
단적으로, 오픈스택 공식 홈페이지에서 제공하는 설치 가이드 매뉴얼을 살펴보면, 오픈스택 구성에 정말 필수적인 서비스 요소 몇 가지 (keystone, placement, nova, neutron, glance, cinder)를 설치 합니다. 수동 설치 자체도 까다롭긴 하지만, 정말 극소수의 컴포넌트라는 점이 특히 눈에 띕니다.
저는 설치 가이드를 한 번 쯤은 따라해 보는 것이 좋다고 생각합니다. 문서를 따라가면서 각각의 서비스들이 어떤 역할을 하는 지 익힐 수 있습니다. 물론 저희가 코드 자체를 파고 드는 것은 아니지만 (그 수준이 되는 것이 제 현재 목표입니다), 설치에 필요한 구성 파일을 확인하며 서비스들의 동작 구조를 어림잡아 이해할 수 있게 됩니다.
물론, 이해와 운영의 영역은 다릅니다. 설치 가이드 어딘가에 실제 운영 환경에서는 이 정도로는 충분치 않다라는 말이 있던 것을 기억하는데요. 저의 경우에 아무것도 모르던 시절 수동 설치에 3주 정도를 매달렸었는데, 그 문구를 보고 참 허탈했던 기억이 납니다. 이해를 위해서는 수동 설치가 효과적이지만, 실제 환경 구축에는 조금 편리하게 해줄 무언가가 필요합니다.
바로 Deployment Tools 입니다. 쿠버네티스로 비유하면, kubeadm 같은 배포 전용 프로젝트 입니다. 그 중 Kolla-Ansible이 대중적으로 많이 알려진 것 같습니다.
그리스어로 glue를 뜻하는 kolla는 Openstack 클라우드를 운영하기 위한 프로덕션-레디 컨테이너 이미지를 생성한 후 배포하여, 안정적인 오픈스택 다중 node 구성을 구축하도록 한다. 다양한 Linux 배포판에서 실행할 이미지를 생성할 수 있으며, 컨테이너 기본 환경을 위한 유연성을 제공한다.
Kolla의 장점은 생성된 이미지가 DockerHub 와 같은 공공 registry나 개인 registry에 게시되어 안전하게 사용할 수 있다는 것이다. 타사 툴 또는 OpenStack 커뮤니티와 함께 작업할 수 있는 방법도 제공한다. 예를들어, OpenStack Kolla와 Kolla-Ansible이 결합되어 최종 배포 전에 Openstack 다중 node 구성의 무결성을 확인할 수 있다.
OpenStack Kolla는 전반적으로 OpenStack에서 컨테이너를 보다 쉽게 구축, 확장, 유지할 수 있도록 지원하며, 프로덕션 환경에서 사용할 수 있을 만큼 안정적이다.
Kolla의 목표는 OpenStack 서비스를 위한 컴포넌트 및 배포 도구 모음을 제공하는 것이다.
Kolla-Ansible은 Ansible을 사용하여 Kolla 컨테이너 이미지를 배포하는 Kolla의 하위 프로젝트로서, OpenStack을 설치 및 관리할 수 있는 플레이북을 제공한다. 심플한 디자인의 Custom Configuration 섹션을 통해 기존 배포툴의 모든 비효율성을 제거하였다.kolla-ansible은 기본적으로 완전한 사용자 정의가 가능하다. 이를 통해 경험이 적은 운영자라도 OpenStack을 신속하게 구축할 수 있고, 경험이 증가함에 따라 운영자의 정확한 요구사항에 맞게 OpenStack 구성을 수정할 수 있다.
: 책 쉽게 따라하는 IaaS 구축 가이드(가상화를 이용한 OpenStack 구축)에서 발췌
2 network interfaces
8GB main memory
40GB disk space
네트워크 인터페이스가 두 개 이상 필요한 이유는 neutron_external_interface
때문입니다. Neutron이 사용할 인터페이스에는 아무런 주소 설정이 되어 있어서는 안 됩니다. (꼭 설정이 되어있지 않을 없지만, 설치 과정 중에 어차피 사용하지 못하는 주소가 됩니다.)
이 인터페이스에 network bridge br-ex
이 붙게 됩니다. 추후 flat networking에 사용 됩니다. ( 프로바이더 네트워크를 할당 할 때 외부로 나가는 경로 - 저희로 치면 192.168.15.1 을 바라봐야 하는 것 아닌가 싶습니다 )
또한 haproxy / keepalived 와 관련된 kolla_internal
, kolla_external
에 대해 vip_address
라는 것을 설정하게 되는데, 대역에서 사용 되지 않고 있는 주소를 할당해 주어야 합니다.
이 두 가지를 마음에 두고 있으면, multinode 설치에 사용한 아래 서버 세팅 그림이 쉽게 이해될 것 같습니다. 네트워크 설정에 대한 더 자세한 사항은 이 문서를 참고하는 것이 좋겠습니다.
준비 : vm 4대, 각각 네트워크 인터페이스 2개, OS : centos8, volume : 40GB, cpu 4, ram 8
controller01 - 192.168.15.226 (ens192), 10.0.0.1 (⇒ ens224, 외부 통신 x) // neutron 용 ens256 하나 더 추가
compute01 - 192.168.15.227, 10.0.0.2
compute02 - 192.168.15.228, 10.0.0.3
storage01 - 192.168.15.229, 10.0.0.4 // volume 50GB 추가, cpu 2
컨트롤러 노드와 네트워크 노드를 분리하는 것이 부하 및 고장 분산에 유리하겠지만, 테스트베드에서는 두 역할을 하나의 VM에서 수행하게 만들었습니다. (자원이 부족합니다 ...)
VMware 서버 생성 주의점
: VMware 에서 오픈스택을 구현하기 위해서는 몇 가지 설정을 주의깊게 살펴보아야 합니다.
첫 번째로 CPU 쪽에서 하드웨어 가상화를 체크해주셔야 합니다.
두 번째로는 네트워크 어댑터 설정입니다. 보안 설정 쪽을 사진과 같이 모두 동의로 바꾸고, 포트 차단이 되어있지 않은지 등을 확인하셔야 합니다.
dnf -y update
: VM으로 올린 이미지의 버전이 최신 버전이 아닐 수 있습니다. 패키지 레포지토리를 최신으로 맞춰두는 것이 필요합니다.
dnf -y install vim
(선택)
: 에디터 선택은 자유 입니다. vi 등의 사용이 익숙치 않다면 vscode 원격 접속 후 파일 편집을 추천 합니다.
firewalld 비활성화 (kolla-ansible 설치 과정 중 진행되기도 합니다)
: 실제 배포 버전에서는 방화벽 제대로 구축하는 것이 요구됩니다. 하지만, 오픈스택에서는 많은 서비스가 많은 포트 사용을 필요로 합니다. 필요한 요소를 제대로 허용하지 않는다면, 서비스 작동이 안되는 이유를 찾기 힘든 꽤나 곤란한 상황이 찾아오게 됩니다. 따라서 테스트베드 구축 편의를 위해 방화벽 데몬을 종료 합니다. (kolla-ansible 설치 과정 중에 또 자동으로 건드는 것 같긴 합니다)
# systemctl stop firewalld
# systemctl disable firewalld
selinux 비활성화
: SELinux (Security-Enhanced Linux)는 리눅스 기반 시스템에서 보안을 강화하기 위해 개발된 커널 보안 모듈입니다. 이 문서에 나온대로 설치시 selinux 비활성화가 요구됩니다.
# getenforce # selinux의 현재 상태를 확인합니다.
# setenforce 0 # selinux를 Permissive 상태로 만듭니다.
# vim /etc/selinux/config # 노드가 재시작되어도 SELINUX를 사용하지 않게 disabled 합니다
...
SELINUX=disabled
...
NTP 설정
: 오픈스택 노드 간 시간 동기화는 필수적입니다. Centos8에서는 Network Time Protocol 관련하여 Chrony를 사용해야 합니다. (기존 Centos7 에서의 ntpd는 사용할 수 없다고 합니다)
# dnf -y install chrony
# systemctl enable --now chronyd
chronyd 가 제대로 동작하는 지 확인 후, 설정 파일을 변경해봅시다.
우선 controller 노드에서만 다음 두 영역만 고치면 됩니다.
# vim /etc/chrony.conf
----------------------
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# pool 2.centos.pool.ntp.org iburst
server 1.kr.pool.ntp.org
server 2.asia.pool.ntp.org
server 3.asia.pool.ntp.org
...
# Allow NTP client access from local network.
allow 10.0.0.0/24
이후 이외의 노드들에 대해선 다음과 같이 컨트롤러 노드의 시간을 바라보게 수정합니다.
# vim /etc/chrony.conf
----------------------
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html)
server 10.0.0.1 iburst
...
# timedatectl set-ntp true # NTP 동기화를 설정합니다.
# systemctl restart chronyd # chrony를 재시작 합니다.
# chronyc sources -v # NTP 작동을 확인합니다. 동기화에 약간의 시간이 필요합니다.
주의 ! 이번 항목은 수행하지 말 것 … qemu-kvm 설치와 NAT와 IP 포워딩 설정 파트를 제외하면 눈으로만 보고 넘어가 주세요. 추후 과정에서 충돌이 생길 수 있습니다.
오픈 스택은 kvm이나 qemu 등의 오픈소스 가상화 기술에 의존합니다. 가상화 플랫폼을 관리하는 API 인 libvirt도 함께 설치해주어야 합니다.
# dnf install -y qemu-kvm libvirt libvirt-client virt-install virt-viewer
: 230925 업데이트
(http://www.linuxdata.org/bbs/board.php?bo_table=qa&wr_id=485)
- 이 부분은 아래 부분부터는 생략하십시오 ⇒ 콜라 앤서블 설치 단계에서 이루어집니다.
# dnf install -y virt-manager virt-install virt-viewer
# systemctl start libvirtd
# systemctl enable libvirtd
NAT와 IP 포워딩 설정
# cat >> /etc/sysctl.conf << EOF
> net.ipv4.ip_forward = 1
> EOF
# sysctl -p /etc/sysctl.conf
# systemctl restart NetworkManager
user 비밀번호 없이 sudo 사용 권한 설정 (중요)
: Ansible의 특징은 하나의 (deploy) 노드에서 다른 노드로의 ssh 연결을 통해 작업을 수행한다는 점 입니다. 그 속에서 관리자 권한을 사용할 때가 있을 수 있습니다. (아예 root 계정으로 deploy 하는 것은 안 됩니다) 따라서 관리자 권한 상승에 패스워드가 필요하지 않게끔 하는 것이 필요합니다.
# adduser user
# passwd user
# vim /etc/sudoers.d/user
user ALL=(ALL) NOPASSWD: ALL
hostnamectl 로 노드 이름 변경
# hostnamectl set-hostname [hostname]