Skip to document
pieroot log
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 등과 비교했을 때 복잡도가 낮고 사용 목적이 명확히 개발·테스트임을 강조한다.

OpenStack 개발을 위한 DevStack: 빠르고 유연한 환경 구축 안내
notion image

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 이상의 디스크 공간

기본 설치 단계

  1. Git 설치 및 DevStack 저장소 클론
  1. stack 사용자 생성 (보안을 위해 root로 실행하지 않음)
  1. local.conf 파일 생성 혹은 복사 및 구성
    1. local.conf 파일 예시 내용
      toml
      # 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
      
  1. stack.sh 스크립트 실행
bash
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
./stack.sh 를 실행 후 실제로 소스를 받아와서 하나하나 소스 빌드하는 것을 확인 할 수 있음
./stack.sh 를 실행 후 실제로 소스를 받아와서 하나하나 소스 빌드하는 것을 확인 할 수 있음

배포를 위한 최소 설정 값

toml
[[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의 기본 동작을 제어하며, 특히 비밀번호와 네트워크 설정을 지정합니다. 주석 처리된 항목들은 필요에 따라 활성화하여 사용할 수 있습니다.

설치 완료

notion image
위 이미지와 같이 설치 완료 후 IP 주소 정보와 Dashboard(Horizon), Keystone의 URL 정보가 출력되면 설치가 완료된 것입니다.
notion image
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 명령어

bash
# 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 환경을 갖출 수 있습니다.

참고 자료