OpenStack_(2) 환경 구성
MariaDB ~ KeyStone 배포 전

 

이번 작업은 컨트롤러 노드에서만 하면되고, 오픈스택 구성 시 설정하는 비밀번호는 쉽게 하기 위해서 그냥 openstack 으로 하겠습니다.

 

그전에 crudini 라는 ini 파일 수정할 때 사용하기 좋은 툴이 있는데요,, 설정파일 변경할 때 사용하니깐 좋더라구요. 

그래서 이번에도 깔아서 사용해봤습니다.

 

# Install crudini
yum install -y wget
wget https://github.com/pixelb/crudini/releases/download/0.9.3/crudini-0.9.3.tar.gz
tar xvf crudini-0.9.3.tar.gz
mv crudini-0.9.3/crudini /usr/bin/
pip3 install --user iniparse  
ln -s /usr/bin/python3 /usr/bin/python
rm -rf crudini-0.9.3 crudini-0.9.3.tar.gz

crudini를 사용하기 위해서 python이라는 명령어를 사용할 수 있어야 하는데, 만약 /usr/bin/python 라는 파일이 없다고 뜨면 심볼릭 링크를 설정해주면 됩니다!

 

사용법은 데이터베이스 설정 파일 사용할 떄 한번 보여 드리겠습니다.

 

 

 


 

# SQL 데이터베이스 설치 및 설정

- 대부분의 openstack 서비스들은 SQL 데이터베이스를 사용해서 정보를 저장한다.
- 보통 컨트롤러 노드에서 실행
- PostgreSQL을 포함하여 다른 SQL 데이터베이스 또한 지원 가능

yum install -y mariadb mariadb-server python3-PyMySQL

crudini --set /etc/my.cnf.d/openstack.cnf mysqld bind-address 10.177.13.30
crudini --set /etc/my.cnf.d/openstack.cnf mysqld default-storage-engine innodb
crudini --set /etc/my.cnf.d/openstack.cnf mysqld innodb_file_per_table on
crudini --set /etc/my.cnf.d/openstack.cnf mysqld max_connections 4096
crudini --set /etc/my.cnf.d/openstack.cnf mysqld collation-server utf8_general_ci
crudini --set /etc/my.cnf.d/openstack.cnf mysqld character-set-server utf8

cp /etc/my.cnf.d/openstack.cnf /etc/my.cnf.d/openstack.cnf.backup

systemctl restart mariadb.service
systemctl enable --now mariadb.service

mysql_secure_installation

 

crudini --set 이라는 명령어를 사용하면 아래와 같은 형식으로 설정 파일이 변경이 됩니다. 물론 vi 에디터를 사용하여 할 수도 있지만, 많은 설정을 해야할 때는 스크립트처럼 사용하면 유용하겠죠?

 

그리고 항상 설정파일은 백업을 해두셔야 좋습니다!

위 설정을 통해서 만들어진 설정파일입니다. 물론 오픈스택 메뉴얼에 다 나와있구요!

 

 

만약 데이터베이스 재시작이 안되면, selinux 때문일 수도 있으니, 재부팅 한번 하시고 진행하시면 됩니다.

 

 


 

 

# 메시지큐(RabbitMQ) 설치 및 설정

- openstack은 메시지 큐를 사용하여 서비스 간의 작업 및 상태정보를 조정
- 일반적으로 컨트롤러 노드에서 실행
- RabbitMQ, Qpid 등 여러 큐 서비스 지원하지만 대부분 배포판은 RabbitMQ를 지원한다.

 

yum install -y rabbitmq-server

#사용자 추가
rabbitmqctl add_user openstack openstack
rabbitmqctl set_permissions openstack ".*" ".*" ".*"

systemctl enable --now rabbitmq-server.service
systemctl restart rabbitmq-server.service

 

 

 

 


 

 

# Memcached 설치 및 설정
- 서비스를 위한 identity 서비스 인증 메커니즘에서는 토큰을 캐싱하기 위해서 memcached 사용
- 보통 컨트롤러 노드에서 사용
- 프로덕션 배포에서는 해당 구성요소에 대한 보안을 위하여 방화벽, 인증 및 암호화의 조합을 활성화 하는 것을 권장한다.

 

yum install -y memcached python3-memcached
cat /etc/sysconfig/memcached
sed -i 's/127.0.0.1/10.177.13.30/g' /etc/sysconfig/memcached
cp /etc/sysconfig/memcached /etc/sysconfig/memcached.backup

systemctl enable --now memcached.service
systemctl restart memcached.service

항상 crudini를 쓰는 것은 아니구요,,,필요할때만 사용합니다

그리고 설정파일은 백업!

 

 

 


 

# ETCD 설치 및 설정
- openstack 서비스들은 분산 키 잠금 관리, 구성 저장, 서비스가 살아있는지 다른 시나리오에 대한 지속적 추적을 위하여
안정적인 분산 키-값 저장소인 etcd를 사용한다.
- 보통 컨트롤러 노드에서 실행

 

yum install -y etcd

cat /etc/etcd/etcd.conf
cp /etc/etcd/etcd.conf /etc/etcd/etcd.conf.backup

설정 파일 확인 후에 백업 진행합니다.

 

etcd를 관리 네트워크를 통해서 다른 노드로부터 액세스할 수 있도록 하기 위해서 설정 파일을 변경해야합니다.

 

 

 

etcd.conf 파일에 url을 호스트네임으로 지정하니 에러가 뜨더군요..그래서 변수 설정을 해서 진행합니다.

 

CONTROLLER_IP=10.177.13.30
echo ${CONTROLLER_IP}

cat > /etc/etcd/etcd.conf << EOF
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://${CONTROLLER_IP}:2380"
ETCD_LISTEN_CLIENT_URLS="http://${CONTROLLER_IP}:2379"
ETCD_NAME="controller"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://${CONTROLLER_IP}:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://${CONTROLLER_IP}:2379"
ETCD_INITIAL_CLUSTER="controller=http://${CONTROLLER_IP}:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF

systemctl enable --now etcd
systemctl restart etcd

 

변수로 삽입을 하면 자동으로 IP로 변환되기 때문에 자주 사용하는 방법입니다.

 

 

이상.

 

환경 설정은 끝났고, 다음부터는 서비스을 배포하도록 하겠습니다.

 



 

OpenStack_(1) 환경 구성
가상 머신 설치 및 설정 ~ 오픈스택 패키지 설치

 

 

 

 

 

 

VMware에서 네트워크 설정을 이렇게 해놨고, NAT 게이트웨이는 10.177.13.1로 설정했습니다.

Host-only는 내부 통신용이기 때문에 게이트웨이가 필요 없습니다.

 

 

Contoller 가상 머신 설정 입니다.

 

 

 

Compute 가상 머신 설정입니다.

 

 

다른 설정들은 하기 나름이니 중요한 부분만 다루도록 하겠습니다.

참고로 저는 아래와 같이 설정만 했습니다.

 

 

설치 전 네트워크 설정과 호스트네임 설정도 미리 해줍니다.

 

 

 

 


 

 

작업전에 CenOS8은 EOS가 된 OS이기 때문에, 레포지토리 경로 수정부터하고 진행합니다.

 

http://mirrorlist.centos.org -> http://vault.centos.org 로 변경해주시기만 하면됩니다.

 

저는 쉽게 작업하기 위해서 ssh로 접속해서 작업 진행했습니다.

 

mirrorlist 주석 처리, baseurl 주석 해제 후 경로 변경 해주시면 됩니다.

# repo 수정
cd /etc/yum.repos.d
sed -i 's/mirrorlist/#mirrorlist/g' ./CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' ./CentOS-*
cat CentOS-Base.repo

yum clean all
yum install -y vim

 

이렇게 설치가 잘된다면 성공적으로 잘 하신겁니다!!

 

 


 

그 다음 해줘야할 것은 실습 환경을 원활하게 하기 위해서 selinux와 방화벽을 해제 하겠습니다.

위부터 현재 진행하고 있는 작업은 Controller와 Compute 모두 해줘야합니다.

 

selinux는 위 상태가 되도록 해야합니다.

 

방화벽도 해제해줍니다

 

# selinux & firewall 해제
getenforce
setenforce 0
getenforce 
sed -i 's/enforcing/disalbed/g' /etc/selinux/config
cat /etc/selinux/config

systemctl disable --now firewalld
systemctl status firewalld

 

 

 


 

 

이제 네트워크 설정을 해야합니다.

설치 전에 네트워크 설정을 해놨기 때문에, NAT 네트워크(ens160)은 자동으로 올라올 것이고, host-only만 켜주면 됩니다.이후 ip도 한번 확인해주시구요

# network 설정
ip a
nmcli con show
nmcli con up ens192

 

오픈스택 메뉴얼에도 나와있듯이 /etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME 파일을 아래와 같이 수정해주면 됩니다. 다른 부분은 수정안해도되고 아래의 부분만 수정하시면 됩니다.

DEVICE=INTERFACE_NAME
TYPE=Ethernet
ONBOOT="yes"
BOOTPROTO="none"

 

위 사진 처럼 말이죠 host-only 네트워크(ens192)도 동일하게 설정해줍니다.

 

 

 


 

이제는 /etc/hosts 에 controller와 compute의 IP와 호스트네임을 지정해줘야하는데요. 쉽습니다.

호스트네임으로 핑을 보냈을 때 잘 간다면 성공한 것입니다.

단 /etc/hosts 파일에 127.0.1.1이 localhost로 설정되어 있으면 주석처리 해주셔야합니다. 하지만 저는 안되있기 때문에 넘어가줍니다.

 

 

 


NTP 설정도 해야합니다.

일단 Controller에 정확한 시간을 맞춘 후에 Compute가 Controller를 바라보게 하면 됩니다.

# ntp

# Controller
timedatactl set-timezone Asia/Seoul
yum install -y chrony
vi /etc/chrony.conf
----
...
#pool 2.centos.pool.ntp.org iburst
server time.bora.net iburst
allow 192.168.99.0/24
...
---
systemctl restart chronyd
systemctl enable --now chronyd
timedatectl
chronyc sources -v

# Compute
yum install -y chrony
vi /etc/chrony.conf
----
...
#pool 2.centos.pool.ntp.org iburst
server controller iburst
...
---
systemctl restart chronyd
systemctl enable --now chronyd
timedatectl
chronyc sources -v

시간이 잘 맞는지만 확인해봅니다.

 

 

 

 

 


 

이제 본격적인 openstack 패키지를 받아야합니다.

모든 노드에서 이 작업을 해야합니다. 

OS 버전에 따라서 배포되는 openstack 패키지가 다르니 공식사이트에서 확인후에 패키지 추가 하시면 됩니다.

# 패키지 추가
yum install -y centos-release-openstack-ussuri
yum config-manager --set-enabled powertools

sed -i 's/mirrorlist/#mirrorlist/g' ./CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' ./CentOS-*

yum upgrade -y

# 오픈스택 클라이언트 설치
yum install -y python3-openstackclient

 

 

 

패키지 추가 시에 이렇게 뜬다면 mirrorlist 때문에 그런 것 같습니다.

아까 레포지토리 설정했던 명령어 한번 더 입력해준 후에 upgrade 하면 정상적으로 될 것입니다.

 

 

다음 편에 mariadb부터 초기 환경 구성 진행하겠습니다.!

 

CentOS 8을 이용한 Openstack 환경 구성(1)

 

 

ansible을 이용하여 openstack 구성을 자동화하는 작업을 하려고 합니다. 그전에 메뉴얼 설치를 해봐야 수월하게 yaml 파일 코드를 작성할 수 있을 것으로 생각되 메뉴얼 설치를 진행하려 합니다.

 

openstack은 AWS, GCP, Azure 같은 퍼블릭 클라우드에서 사용하는 것을 입맛에 맞게 구성하여 사용할 수 있도록 하는 오픈소스 기반 클라우드 입니다.

 

자세한 내용은  openstack 공식 사이트에서 메뉴얼을 보시면 많은 도움이 됩니다.

설치도 아래 사이트에서 보고 추가적으로 덧붙여서 진행하는 것이니 참고바립니다.

https://docs.openstack.org/ko_KR/ 

 

OpenStack Docs: Korean

OpenStack 문서에 오신 것을 환영합니다 OpenStack이란? OpenStack은 클라우드 운영체제입니다. 데이터 센터의 컴퓨팅 자원, 스토리지 자원, 네트워크 자원의 대규모 풀을 제어합니다. 이런 것들은 모두

docs.openstack.org

 

 

Controller Node Component

- Nova

- Neutron

- Keystone

- Placement

- Horizon

- Glance

 

Compute Node Component

- Nova

- Neutron

- Cinder (Block Storage)

 

 

Cinder는 Block Storage 서비스를 제공하는 컴포넌트 인데, 원래는 Storage 노드를 따로 설치해서 하는 것을 권장하지만 지금은 테스트를 해볼 것인 관계로 Compute 노드와 같이 구성을 해보겠습니다.

 

또, Controller와 Compute 양쪽에 동일한 서비스가 있습니다. 바로 Nova, Neutron인데요.

각 서비스에 대한 역할이 정해져 있는데, 자세한 설명은 각 서비스를 설치할때 하는 걸로 하고 간단히 설명하자면

Nova -> 오픈스택 컴퓨팅 서비스로써, 클라우드 컴퓨팅 시스템을 호스팅하고 관리하는 서비스 입니다.

Neutron -> 오픈스택 네트워킹 서비스로써, 네트워크 인터페이스 장치를 생성하고 네트워크 연결을 위한 서비스 입니다.

 

 

같은 서비스지만 다른 역할을 하는데요,

우선, 컨트롤러와 컴퓨트는 Master-Worker 구조로, 예전에 k8s에서 한 것과 유사한 구조를 보입니다.

  • 컨트롤러 측 서비스 -> 전체를 관리하는 역할
  • 컴퓨트 측 서비스 -> 각 노드에서 실제 동작을 수행하는 역할

Nova를 비교해보자면,

  • 컨트롤러 측 -> API, Scheduler, Conductor, Novncproxy
  • 컴퓨트 측 -> Compute

Neutron

  • 컨트롤러 측 -> Server, DHCP-agent, Metadata-agent, L3-agent, Openvswitch-agent, ovs-cleanup
  • 컴퓨트 측 -> openvswtich-agent

 

정도로 볼 수 있습니다. 위에서 나온건 실제로 서비스를 구성할 때 설치 항목이나 설정하는 부분에서 확인이 가능합니다.

 

 

 

이제는 실제 구성을 어떻게 할 것인지를 확인해야합니다.

 

먼저, 오픈스택을 설치할 각 노드의 컴퓨팅 리소스를 정해보겠습니다.

 

- Controller Node: 2 코어, 4G 메모리, 100G 스토리지

- Compute Node: 4코어, 8G 메모리, 100G + 100G 스토리지(cinder 구성시 추가할 예정)

 

프로그램: VMware Workstaion 17 Pro

OS: CentOS 8

NIC * 2ea - (외부 - NAT + 내부 - hostonly)

- 외부 -> Contoller (10.177.13.30/24), Compute(10.177.13.40/24)

- 내부 -> Contoller(192.168.99.30/24), Compute(192.168.99.40/24)

 

이 정도로 정해놓고 환경 구성으로 진행해보겠습니다.

 

 

 

 

 

 

 

'클라우드 > Openstack' 카테고리의 다른 글

Openstack_(2) 환경 구성 마무리  (1) 2025.05.22
Openstack_(1) 환경 구성  (0) 2025.05.22

+ Recent posts