Markdown Preview
OpenStack 개발을 위한 DevStack: 빠르고 유연한 환경 구축 안내
Frontmatter
DevStack은 OpenStack 개발·테스트 환경을 빠르게 구축할 수 있는 스크립트 모음으로, 단일 머신에 핵심 서비스(Keystone, Nova, Glance, Neutron, Cinder, Horizon)를 자동 설치·구성한다. local.conf 파일을 통해 비밀번호·네트워크 등 설정을 커스터마이징할 수 있으며, 최소 4 GB RAM(권장 8 GB)·40 GB 디스크가 필요하다. 설치·시작·제거 명령이 간단하고, 개발·학습·PoC·CI/CD에 적합하지만 보안·성능·확장성 문제로 프로덕션에는 부적합하다. 또한 TripleO·Kolla‑Ansible·OpenStack‑Ansible 등과 비교했을 때 복잡도가 낮고 사용 목적이 명확히 개발·테스트임을 강조한다.
DevStack이란 무엇인가?
DevStack은 OpenStack 개발 환경을 빠르게 구축할 수 있도록 도와주는 스크립트 모음입니다.
OpenStack 개발자들이 테스트 및 개발 목적으로 사용할 수 있는 간단하고 빠른 설치 도구로, 복잡한 OpenStack 환경을 단일 머신에 쉽게 배포할 수 있습니다.
DevStack의 주요 특징
빠른 설치: 단일 스크립트 실행으로 OpenStack 환경을 몇 분 내에 구축할 수 있습니다. 개발 및 테스트 목적: 프로덕션 환경이 아닌 개발과 테스트를 위해 설계되었습니다. 자동화된 구성: 필요한 모든 OpenStack 서비스를 자동으로 설치하고 구성합니다. 유연한 커스터마이징: local.conf 파일을 통해 설치할 서비스와 구성을 쉽게 조정할 수 있습니다. 최신 코드 사용: OpenStack의 최신 개발 버전을 Git 저장소에서 직접 가져와 사용합니다.
DevStack의 주요 구성 요소
1. 핵심 OpenStack 서비스
DevStack은 다음과 같은 OpenStack의 핵심 서비스들을 설치합니다:
- Keystone: 인증 및 서비스 카탈로그
- Nova: 컴퓨팅(VM) 서비스
- Glance: 이미지 서비스
- Neutron: 네트워킹 서비스
- Cinder: 블록 스토리지 서비스
- Horizon: 대시보드 웹 인터페이스
2. stack.sh 스크립트
DevStack의 메인 설치 스크립트로, 모든 설치 과정을 자동화합니다. 이 스크립트는 의존성 패키지 설치, 소스 코드 다운로드, 데이터베이스 설정, 서비스 구성 및 시작을 담당합니다.
3. local.conf 파일
DevStack의 동작을 제어하는 구성 파일입니다. 사용자는 이 파일을 통해 설치할 서비스, 비밀번호, 네트워크 설정 등을 지정할 수 있습니다.
DevStack 설치 방법
시스템 요구사항
- Ubuntu, Fedora, CentOS 등의 Linux 배포판
- 최소 4GB RAM (8GB 권장)
- 2개 이상의 CPU 코어
- 40GB 이상의 디스크 공간
기본 설치 단계
- Git 설치 및 DevStack 저장소 클론
- stack 사용자 생성 (보안을 위해 root로 실행하지 않음)
- local.conf 파일 생성 혹은 복사 및 구성
local.conf 파일 예시 내용
# Sample ``local.conf`` for user-configurable variables in ``stack.sh``
# NOTE: Copy this file to the root DevStack directory for it to work properly.
# ``local.conf`` is a user-maintained settings file that is sourced from ``stackrc``.
# This gives it the ability to override any variables set in ``stackrc``.
# Also, most of the settings in ``stack.sh`` are written to only be set if no
# value has already been set; this lets ``local.conf`` effectively override the
# default values.
# This is a collection of some of the settings we have found to be useful
# in our DevStack development environments. Additional settings are described
# in https://docs.openstack.org/devstack/latest/configuration.html#local-conf
# These should be considered as samples and are unsupported DevStack code.
# The ``localrc`` section replaces the old ``localrc`` configuration file.
# Note that if ``localrc`` is present it will be used in favor of this section.
[[local|localrc]]
# Minimal Contents
# ----------------
# While ``stack.sh`` is happy to run without ``localrc``, devlife is better when
# there are a few minimal variables set:
# If the ``*_PASSWORD`` variables are not set here you will be prompted to enter
# values for them by ``stack.sh``and they will be added to ``local.conf``.
ADMIN_PASSWORD=<CHANGE_ADMIN_PASSWORD>
DATABASE_PASSWORD=<CHANGE_DATABASE_PASSWORD>
RABBIT_PASSWORD=<CHANGE_RABBIT_PASSWORD>
SERVICE_PASSWORD=$ADMIN_PASSWORD
# ``HOST_IP`` and ``HOST_IPV6`` should be set manually for best results if
# the NIC configuration of the host is unusual, i.e. ``eth1`` has the default
# route but ``eth0`` is the public interface. They are auto-detected in
# ``stack.sh`` but often is indeterminate on later runs due to the IP moving
# from an Ethernet interface to a bridge on the host. Setting it here also
# makes it available for ``openrc`` to include when setting ``OS_AUTH_URL``.
# Neither is set by default.
#HOST_IP=w.x.y.z
#HOST_IPV6=2001:db8::7
# Logging
# -------
# By default ``stack.sh`` output only goes to the terminal where it runs. It can
# be configured to additionally log to a file by setting ``LOGFILE`` to the full
# path of the destination log file. A timestamp will be appended to the given name.
LOGFILE=$DEST/logs/stack.sh.log
# Old log files are automatically removed after 2 days to keep things neat. Change
# the number of days by setting ``LOGDAYS``.
LOGDAYS=2
# Nova logs will be colorized if ``SYSLOG`` is not set; turn this off by setting
# ``LOG_COLOR`` false.
#LOG_COLOR=False
# Using milestone-proposed branches
# ---------------------------------
# Uncomment these to grab the milestone-proposed branches from the
# repos:
#CINDER_BRANCH=milestone-proposed
#GLANCE_BRANCH=milestone-proposed
#HORIZON_BRANCH=milestone-proposed
#KEYSTONE_BRANCH=milestone-proposed
#KEYSTONECLIENT_BRANCH=milestone-proposed
#NOVA_BRANCH=milestone-proposed
#NOVACLIENT_BRANCH=milestone-proposed
#NEUTRON_BRANCH=milestone-proposed
#SWIFT_BRANCH=milestone-proposed
# Using git versions of clients
# -----------------------------
# By default clients are installed from pip. See LIBS_FROM_GIT in
# stackrc for details on getting clients from specific branches or
# revisions. e.g.
# LIBS_FROM_GIT="python-ironicclient"
# IRONICCLIENT_BRANCH=refs/changes/44/2.../1
# Swift
# -----
# Swift is now used as the back-end for the S3-like object store. Setting the
# hash value is required and you will be prompted for it if Swift is enabled
# so just set it to something already:
SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5
# For development purposes the default of 3 replicas is usually not required.
# Set this to 1 to save some resources:
SWIFT_REPLICAS=1
# The data for Swift is stored by default in (``$DEST/data/swift``),
# or (``$DATA_DIR/swift``) if ``DATA_DIR`` has been set, and can be
# moved by setting ``SWIFT_DATA_DIR``. The directory will be created
# if it does not exist.
SWIFT_DATA_DIR=$DEST/data
stack.sh스크립트 실행
sudo apt-get update
sudo apt-get install git -y
git clone https://opendev.org/openstack/devstack
cd devstack
# local.conf 파일 생성 예시
cat > local.conf << EOF
[[local|localrc]]
ADMIN_PASSWORD=<CHANGE_ADMIN_PASSWORD>
DATABASE_PASSWORD=\$ADMIN_PASSWORD
RABBIT_PASSWORD=\$ADMIN_PASSWORD
SERVICE_PASSWORD=\$ADMIN_PASSWORD
EOF
# or local.conf 파일 복사
cp samples/local.conf local.conf
./stack.sh배포를 위한 최소 설정 값
[[local|localrc]]
ADMIN_PASSWORD=<CHANGE_ADMIN_PASSWORD>
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
#IPV4_ADDRS_SAFE_TO_USE=172.31.1.0/24
#FLOATING_RANGE=192.168.20.0/25
#HOST_IP=10.3.4.5이 설정 파일은 DevStack의 기본 동작을 제어하며, 특히 비밀번호와 네트워크 설정을 지정합니다. 주석 처리된 항목들은 필요에 따라 활성화하여 사용할 수 있습니다.
설치 완료
위 이미지와 같이 설치 완료 후 IP 주소 정보와 Dashboard(Horizon), Keystone의 URL 정보가 출력되면 설치가 완료된 것입니다.
http://192.168.188.120/dashboard에 접속하여 OpenStack을 사용할 수 있습니다.
DevStack의 활용 사례
1. OpenStack 개발
OpenStack 프로젝트에 기여하는 개발자들이 새로운 기능을 테스트하고 버그를 수정할 때 사용합니다.
2. 학습 및 교육
OpenStack을 처음 접하는 사용자들이 실제 환경에서 다양한 기능을 실습하고 학습할 수 있습니다.
3. 개념 증명 (PoC)
프로덕션 환경 구축 전에 OpenStack의 기능과 성능을 빠르게 테스트하고 검증할 수 있습니다.
4. CI/CD 파이프라인
자동화된 테스트 환경의 일부로 사용되어 코드 변경사항을 지속적으로 검증합니다.
DevStack 사용 시 주의사항
프로덕션 환경에 부적합
DevStack은 개발 및 테스트 목적으로만 설계되었습니다. 프로덕션 환경에서는 절대 사용하지 마세요.
- 데이터 보안: 기본 비밀번호와 설정이 보안에 취약합니다.
- 성능: 단일 노드에 모든 서비스가 실행되어 성능이 제한적입니다.
- 업그레이드: 기존 설치를 업그레이드하는 것이 어렵고, 보통 재설치가 필요합니다.
- 리소스 소비: 많은 시스템 리소스를 사용하므로 전용 머신이나 가상 머신 사용을 권장합니다.
DevStack vs. 다른 OpenStack 배포 도구
도구 | 목적 | 복잡도 | 프로덕션 적합성 |
DevStack | 개발/테스트 | 낮음 | ❌ |
TripleO | OpenStack 서비스 기반 프로덕션 배포 | 높음 | ✅ |
Kolla-Ansible | Docker 컨테이너 기반 프로덕션 배포 | 중간 | ✅ |
OpenStack-Ansible | LXC 컨테이너 기반 프로덕션 배포 | 중간 | ✅ |
TripleO
OpenStack으로 OpenStack을 배포하는 도구입니다. 대규모 엔터프라이즈 환경에 적합하지만 설정이 복잡합니다.
Kolla-Ansible
Docker 컨테이너 기반 배포 도구입니다. Ansible로 자동화되며, 설치와 업그레이드가 비교적 간단합니다.
OpenStack-Ansible
LXC 컨테이너 기반 배포 도구입니다. 리소스 효율적이며 베어메탈 환경에서 효과적입니다.
기본 DevStack 명령어
# DevStack 시작
./stack.sh
# DevStack 중지
./unstack.sh
# DevStack 완전 제거 (데이터베이스 포함)
./clean.sh
# 특정 서비스 재시작
sudo systemctl restart devstack@n-api.service
# 로그 확인
sudo journalctl -xeu devstack@* -f결론
DevStack은 OpenStack 생태계에서 매우 중요한 도구로, 개발자와 학습자가 빠르게 OpenStack 환경을 구축하고 실험할 수 있게 해줍니다. 프로덕션 환경에는 적합하지 않지만, 개발, 테스트, 학습 목적으로는 최고의 선택입니다.
OpenStack을 처음 시작하거나 새로운 기능을 개발하고 있다면, DevStack으로 시작하는 것을 강력히 추천합니다. 단 몇 분 만에 완전히 작동하는 OpenStack 환경을 갖출 수 있습니다.
참고 자료
- 공식 DevStack 문서: https://docs.openstack.org/devstack/latest/
- DevStack GitHub 저장소: https://opendev.org/openstack/devstack
- OpenStack 공식 웹사이트: https://www.openstack.org/