🔹Openstack

Rocky Linux 8.10에 OpenStack 설치하기

terranbin 2025. 2. 3. 10:31
728x90
SMALL
  • Rocky Linux 8.10에서 최신 OpenStack 버전( centos-release-openstack-yoga ) 설치
  • Controller(192.168.98.166) + Compute(192.168.98.167) 노드 구성
  • Horizon 웹 대시보드 UI를 통해 관리 가능
  • 2025년 2월 기준으로 작성
  • Rocky 8 기본 설치 방법: https://sungbin-park.tistory.com/100

1. 컨트롤러 노드 (Controller Node)

더보기
OS Rocky8 
CPU 2 vCPU 이상
Memory (RAM) 최소 4GB (권장: 8GB 이상)
Network Adapter 1개 (eth0)
디스크 /dev/sda (OS용, 20GB)
  /dev/sdb (스토리지용, 100GB)

 

2. 컴퓨트 노드 (Compute Node)

더보기
OS Rocky8 
CPU 2 vCPU 이상
Memory (RAM) 최소 2GB (권장: 4GB 이상)
Network Adapter 1개 (eth0)
디스크 /dev/sda (OS용, 20GB)
  /dev/sdb (VM 데이터 저장용, 100GB)

📌 추가 고려 사항

  • 컨트롤러 노드는 OpenStack의 핵심 서비스를 실행하므로, 최소 4GB RAM, 2 vCPU 이상 필요.
  • 컴퓨트 노드는 VM을 실행하는 역할이므로, 디스크 용량과 CPU 개수에 따라 확장 가능.
  • 스토리지(Cinder) 추가 시 /dev/sdb 를 LVM 볼륨으로 구성하여 사용할 수 있음.

1️⃣ 공통 설정 (setup_common.sh) → 현재 RDO 저장소 확인 불가

https://trunk.rdoproject.org/rdo_release/(찾은거 같긴 한데 애매)

https://www.rdoproject.org/repos/(not found 여서 문제)

https://repos.fedorapeople.org/repos/openstack/(이거 같다)

#!/bin/bash

set -e  # 오류 발생 시 즉시 종료

echo "🚀 OpenStack Yoga RDO 저장소 설치 시작"

# 1️⃣ RDO 저장소 추가
echo "[1] RDO 저장소 추가"
dnf install -y https://repos.fedorapeople.org/repos/openstack/archived/openstack-yoga/rdo-release-yoga-1.el8.noarch.rpm --setopt=sslverify=false

# 2️⃣ 저장소 상태 확인
echo "[2] 저장소 상태 확인"
if ! dnf repolist | grep -q "openstack-yoga"; then
    echo "⚠️ OpenStack 저장소가 정상적으로 등록되지 않음"
    exit 1
fi

# 3️⃣ 패키지 캐시 정리 및 업데이트
echo "[3] 패키지 캐시 정리 및 업데이트"
dnf clean all
if ! dnf makecache; then
    echo "⚠️ 패키지 캐시 갱신 실패. 저장소를 다시 설정합니다."
    dnf config-manager --disable centos-rabbitmq-38 || true
    dnf config-manager --disable centos-nfv-openvswitch || true
    dnf config-manager --disable advanced-virtualization || true
    dnf makecache || echo "⚠️ 패키지 캐시 갱신 실패 (저장소 비활성화 후에도 실패)"
fi

# 4️⃣ 필수 패키지 설치
echo "[4] 필수 패키지 설치"
dnf install -y epel-release dnf-utils || echo "⚠️ 필수 패키지 설치 실패"

# 5️⃣ 데이터베이스 (MariaDB) 설치 및 설정
echo "[5] 데이터베이스 (MariaDB) 설치 및 설정"
if ! dnf install -y mariadb-server; then
    echo "⚠️ MariaDB 설치 실패. 저장소 갱신 후 재시도."
    dnf clean all
    dnf makecache
    dnf install -y mariadb-server || exit 1
fi
systemctl enable --now mariadb

# MariaDB 보안 설정 자동화
echo "[5-1] MariaDB 보안 설정 자동화"
mysql_secure_installation <<EOF
asdf
n
n
n
n
EOF

# 6️⃣ RabbitMQ 최신 버전 설치 (공식 저장소 사용)
echo "[6] RabbitMQ 설치 및 실행"
dnf install -y erlang
if ! dnf install -y https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/8/rabbitmq-server-3.9.13-1.el8.noarch.rpm/download.rpm; then
    echo "⚠️ RabbitMQ 설치 실패. 저장소 갱신 후 재시도."
    dnf clean all
    dnf makecache
    dnf install -y https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/8/rabbitmq-server-3.9.13-1.el8.noarch.rpm/download.rpm || exit 1
fi
systemctl enable --now rabbitmq-server || echo "⚠️ RabbitMQ 실행 실패"

# 7️⃣ OpenStack 클라이언트 설치 전 패키지 확인
echo "[7] OpenStack 클라이언트 패키지 확인"
if ! dnf list available | grep -q python3-openstackclient; then
    echo "⚠️ OpenStack 클라이언트 패키지가 존재하지 않음. 저장소 갱신 후 재시도."
    dnf clean all
    dnf makecache
fi

# 8️⃣ OpenStack 클라이언트 설치
echo "[8] OpenStack 클라이언트 설치"
dnf install -y python3-openstackclient openstack-selinux || echo "⚠️ OpenStack 클라이언트 설치 실패"

# 9️⃣ OpenStack 핵심 서비스 패키지 설치
echo "[9] OpenStack 핵심 서비스 패키지 설치"
dnf install -y openstack-keystone openstack-glance openstack-nova openstack-neutron openstack-cinder openstack-dashboard || echo "⚠️ 일부 OpenStack 패키지 설치 실패"

# 🔟 OpenStack 서비스 활성화
echo "[10] OpenStack 서비스 활성화"
systemctl enable --now httpd openstack-keystone openstack-glance openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy openstack-neutron openstack-cinder || echo "⚠️ 일부 OpenStack 서비스 실행 실패"

echo "✅ OpenStack 설치 완료!"

# 1️⃣1️⃣ 최종 검증
echo "[11] 설치 확인"
dnf repolist | grep openstack || echo "⚠️ OpenStack 저장소가 정상적으로 등록되지 않음"
dnf list available | grep openstackclient || echo "⚠️ OpenStack 패키지가 검색되지 않음"
openstack --version || echo "⚠️ OpenStack CLI가 정상적으로 실행되지 않음"


2️⃣ Controller 설정 (setup_controller.sh) → Controller에서 실행

#!/bin/bash
set -e

echo "[1] Keystone (Identity 서비스) 설치"
dnf install -y openstack-keystone httpd mod_wsgi
cat << EOF > /etc/keystone/keystone.conf
[database]
connection = mysql+pymysql://keystone:password@controller/keystone

[token]
provider = fernet
EOF
keystone-manage db_sync
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
keystone-manage bootstrap --bootstrap-password admin --bootstrap-admin-url http://controller:5000/v3/ --bootstrap-internal-url http://controller:5000/v3/ --bootstrap-public-url http://controller:5000/v3/ --bootstrap-region-id RegionOne

echo "[2] Keystone 서비스 시작"
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
systemctl enable --now httpd

echo "[3] Glance (이미지 서비스) 설치"
dnf install -y openstack-glance
cat << EOF > /etc/glance/glance-api.conf
[database]
connection = mysql+pymysql://glance:password@controller/glance
EOF
glance-manage db_sync
systemctl enable --now openstack-glance-api

echo "[4] Nova (Compute API) 설치"
dnf install -y openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
cat << EOF > /etc/nova/nova.conf
[DEFAULT]
transport_url = rabbit://openstack:password@controller
my_ip = $CONTROLLER_IP
EOF
nova-manage api_db sync
nova-manage cell_v2 map_cell0
nova-manage cell_v2 create_cell --name=cell1 --verbose
nova-manage db sync
systemctl enable --now openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy

echo "[5] Neutron (네트워크 서비스) 설치"
dnf install -y openstack-neutron-linuxbridge openstack-neutron-l3-agent openstack-neutron-dhcp-agent openstack-neutron-metadata-agent
cat << EOF > /etc/neutron/neutron.conf
[DEFAULT]
transport_url = rabbit://openstack:password@controller
EOF
systemctl enable --now neutron-server neutron-dhcp-agent neutron-metadata-agent neutron-l3-agent

echo "[6] Horizon (대시보드) 설치"
dnf install -y openstack-dashboard
systemctl enable --now httpd

echo "[7] 컨트롤러 노드 설치 완료!"

3️⃣ Compute 설정 (setup_compute.sh) → Compute에서 실행

#!/bin/bash
set -e

echo "[1] Nova Compute 설치"
dnf install -y openstack-nova-compute
cat << EOF > /etc/nova/nova.conf
[DEFAULT]
transport_url = rabbit://openstack:password@controller
my_ip = $COMPUTE_IP
compute_driver = libvirt.LibvirtDriver
EOF
systemctl enable --now openstack-nova-compute

echo "[2] Libvirt 및 KVM 설치"
dnf install -y libvirt qemu-kvm
systemctl enable --now libvirtd

echo "[3] Neutron Compute Agent 설치"
dnf install -y openstack-neutron-linuxbridge openstack-neutron-metadata-agent
cat << EOF > /etc/neutron/neutron.conf
[DEFAULT]
transport_url = rabbit://openstack:password@controller
EOF
systemctl enable --now neutron-linuxbridge-agent neutron-metadata-agent

echo "[4] 컴퓨트 노드 설치 완료!"

 

서비스 구성 표

Controller Keystone Identity 관리
Controller Glance 이미지 관리
Controller Nova API Compute API 서비스
Controller Neutron 네트워크 관리
Controller Horizon 웹 대시보드
Compute Nova Compute 가상 머신 실행
Compute Neutron Linuxbridge 네트워크 서비스

 


더보기

📌 Keystone 환경변수 설정 (컨트롤러 노드)  / OpenStack 버전 확인 스크립트

export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://192.168.98.166:5000/v3
# export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3

Horizon 대시보드 접속 확인

 

  • 웹 브라우저에서 http://192.168.98.166/dashboard 접속
  • ID: admin / PW: admin

 

#!/bin/bash
# OpenStack 서비스 버전 확인 스크립트

echo "========================================"
echo "🚀 OpenStack 서비스 버전 확인 스크립트"
echo "========================================"

# 전체 OpenStack 버전 확인
echo "[1] OpenStack Client Version:"
openstack --version
echo ""

# Keystone 버전 확인
echo "[2] Keystone (Identity Service) Version:"
keystone-manage --version
echo ""

# Nova 버전 확인
echo "[3] Nova (Compute Service) Version:"
nova-manage --version
echo ""

# Neutron 버전 확인
echo "[4] Neutron (Networking Service) Version:"
neutron-server --version
echo ""

# Glance 버전 확인
echo "[5] Glance (Image Service) Version:"
glance-manage --version
echo ""

# Cinder 버전 확인
echo "[6] Cinder (Block Storage Service) Version:"
cinder-manage --version
echo ""

# Horizon (Dashboard) 버전 확인
echo "[7] Horizon (Dashboard) Version:"
rpm -qi openstack-dashboard | grep Version || dpkg -s openstack-dashboard | grep Version
echo ""

# Swift 버전 확인
echo "[8] Swift (Object Storage) Version:"
swift --version
echo ""

# 모든 OpenStack 패키지 버전 확인
echo "[9] OpenStack Installed Packages:"
dnf list installed | grep openstack || rpm -qa | grep openstack
echo ""

echo "========================================"
echo "✅ OpenStack 버전 확인 완료!"
echo "========================================"

 

LIST