[ English | Deutsch | 中文 (简体, 中国) | 한국어 (대한민국) | Indonesia | English (United Kingdom) | español (México) ]

DevStack으로 변경 사항 테스팅하기

개발에서 중요한 부분은 바로 개발한 부분에 대한 변경 사항을 테스트하고 제대로 동작하는지를 검증할 수 있는지에 대한 것입니다. OpenStack과 같은 복잡한 생태계에서는 여러분이 작성한 코드에 대한 상호운용성을 검증할 수 있는지가 필요합니다. Cinder에 변경 사항을 만든다면 해당 변경 사항이 Cinder API를 통해 Nova와 어떻게 상호작용하는지에 대한 영향 또한 줄 수 있을 것입니다.

개발자들은 잘 동작하는지 그리고 변경 사항을 테스트하는데 있어 상호운용성이 어떤지를 확인하기 위해 OpenStack 클라우드를 쉽게 배포하고 싶어합니다. 이것이 DevStack을 사용하는 목적입니다.

DevStack이란

DevStack은 데모 또는 테스트 환경을 위해 기본적인 OpenStack 클라우드를 배포할 수 있도록 실행할 수 있는 모듈화된 스크립트에 대한 집합입니다. 해당 스크립트는 베어메탈 또는 가상 머신과 같은 단일 노드에서 실행할 수 있습니다. 또한 멀티 노드로 배포하도록 구성할 수도 있습니다. DevStack 배포는 데이터베이스와 메시지 큐 시스템을 구성하는 것과 같은 번거로운 작업들을 다루며, 개발자들이 빠르고 쉽게 OpenStack 클라우드를 배포하는 것을 가능하게 해 줍니다.

디폴트로, OpenStack에 대한 핵심 서비스들을 설치하지만, 사용자는 부가적인 서비스들이 배포가 이루어질 수 있도록 구성할 수 있습니다. 모든 서비스들은 소스로부터 설치가 됩니다. DevStack은 stable 브랜치 (예: stable/pike)에서 클론하도록 구성하지 않는 이상 master로부터 git를 통해 서비스를 가져옵니다.

참고

DevStack 전체 문서는 여기 에서 확인하실 수 있습니다.

DevStack 가져오기 및 구성하기

DevStack을 가져오기 위해서는 openstack-dev 아래에 있는 devstack 저장소를 클론할 필요가 있습니다.

git clone https://opendev.org/openstack/devstack

더 진행하기에 앞서서 DevStack을 실행하고자 하는 환경에 대한 IP 주소 및 패스워드를 셋업하는 것을 권장합니다. 이는 DevStack 에서 local.conf 파일을 구성함으로써 이루어집니다.

cd ./devstack
cp ./samples/local.conf local.conf
vi ./local.conf

향후 배포 환경과 상호작용을 간략화하기 위해 다음 (환경) 변수를 설정하는 것이 좋습니다:

  • ADMIN_PASSWORD

  • DATABASE_PASSWORD

  • RABBIT_PASSWORD

몇몇 배포판에서는 HOST_IP 또한 설정해야 할 수 있습니다. 이는 대상 운영체제에서 네트워크 인터페이스를 사용하기 위한 이름 통용규칙에 따라 의존적일 수 있습니다.

파일 아래 부분을 살펴보면 Using milestone-proposed branches 섹션이 있습니다. 하나 이상의 프로젝트에 대해 master 가 아닌 브랜치를 클론하고 싶은 경우에 해당 변수를 변경할 수 있습니다.

변경 사항이 local.conf 에 저장되었다면 OpenStack 클라우드를 DevStack으로 배포할 준비가 된 것입니다.

DevStack 배포하기

구성된 local.conf 파일이 있다면 DevStack을 실행하는 것은 매우 쉽습니다.

참고

다음 명령어를 sudo 액세스가 있고 NOPASSWD가 구성된 사용자로 실행할 필요가 있습니다.

./stack.sh

참고

위 명령어 및 부차적인 명령 예제들은 DevStack을 클론한 루트 디렉토리에 위치해 있다고 가정합니다.

이 부분에서 DevStack은 대상 노드가 OpenStack 클라우드를 동작시키도록 준비시킬 것입니다. 다음 사항이 완료됩니다:

  • 필수 패키지 (mysql 및 rabbitmq 등) 설치가 이루어집니다

  • mysql 및 rabbitmq가 구성됩니다

  • OpenStack 프로젝트가 /opt/stack으로 클론됩니다

  • 시스템을 시뮬레이션하는데 필요로 하는 임시 백업 파일은 /opt/stack/data 에 생성됩니다

  • 각 프로젝트에 대한 데이터베이스가 생성되고 사용 가능하도록 구성됩니다

  • OpenStack 서비스들이 등록 및 시작됩니다

stack.sh 실행에 대한 로그가 /opt/stack/logs/stack.sh.log 에 저장됩니다

DevStack 배포 검증

OpenStack이 DevStack에 의해 성공적으로 배포 완료되었다면 웹 브라우저에서 local.conf 에 설정한 HOST_IP IP를 지정하여 접속할 수 있으며 Horizon에 접근 가능할 것입니다.

../_images/horizon-login.png

참고

admin (사용자에 대한) 패스워드는 local.conf 파일에 ADMIN_PASSWORD 로 지정한 값으로 설정될 것입니다

프로젝트 서비스들은 모두 systemd에 등록됩니다. 각 서비스는 devstack@ 으로 앞에 붙습니다. 따라서 Cinder Volume 프로세스가 동작하는지를 systemd를 통해 검증하고 싶다면 다음과 같은 명령어를 사용하여 작업할 수 있습니다:

systemctl status devstack@c-vol.service

systemd는 와일드카드(*)를 허용하기에, DevStack과 관련된 모든 서비스에 대한 상태는 다음과 같이 보여지도록 할 수 있습니다:

systemctl status devstack@*

실행중인 서비스에 대한 로그 또한 systemd를 통해 볼 수 있습니다. Cinder Volume 서비스에 대한 로그를 보기 위해서는 다음 명령어를 사용할 수 있습니다:

journalctl -u devstack@c-vol.service

DevStack과 상호작용하기 위한 systemd 활용 전체 레퍼런스는 Using Systemd in DevStack 페이지에서 찾을 수 있습니다.

DevStack으로 변경 사항 테스팅하기

DevStack을 사용하여 변경 사항을 개발 및 테스트하는 방법은 쉽습니다. /opt/stack/<project name> 아래에 클론된 프로젝트 안에서 개발을 할 수 있습니다. 프로젝트들은 해당 프로젝트에 대한 git 저장소를 클론한 것이기에 브랜치를 만들 수 있으며 개발을 할 수 있습니다.

DevStack은 해당 디렉토리의 코드를 사용하여 OpenStack 서비스를 실행하므로 프로젝트 디렉토리에서 코드를 변경 한 다음 systemd를 통해 프로젝트 서비스를 재시작하여 변경 사항을 테스트 할 수 있습니다.

여기 프로세스가 어떻게 되는지 예시가 있습니다. 이 예시에서는 Cinder의 LVM 드라이버를 변경하겠습니다.

cd /opt/stack/cinder/cinder/volume/drivers
vi lvm.py
*Brilliant Code Improvement Implemented*
sudo systemctl restart devstack@c-vol.service

코드 변경 테스트 및 개발이 완료되면 검토를 위해 코드 변경 사항을 Gerrit에 푸시해야합니다. /opt/stack` 에 있는 프로젝트는 이미 해당 git 저장소에 동기화되어 있으므로 git review , 변경 사항을 커밋하고 Gerrit에 변경 사항을 업로드하십시오.

DevStack 중지하기

노드에서 실행 중인 DevStack 인스턴스를 종료하려면 다음 명령을 입력하세요:

./unstack.sh

이 명령은 노드에서 수행 된 OpenStack 설치를 정리합니다. 여기에는 다음이 포함됩니다.

  • 프로젝트 서비스, mysql 그리고 rabbitmq 중지하기

  • iSCSI 볼륨 정리하기

  • 임시 LVM 마운트 제거하기

DevStack 실행이 실패한 경우 가장 먼저 unstack.sh 를 실행합니다. 후속 실행이 실패하면 다음 명령을 사용하여 DevStack 구성 요소를 보다 철저히 제거 할 수 있습니다.

./clean.sh

clean.sh 실행은 unstack.sh 단계와 추가 정리를 수행합니다.

  • /etc에 있는 프로젝트 설정 파일 제거하기

  • 로그 파일들 제거하기

  • 하이퍼바이저 정리

  • .pyc 파일들을 제거

  • 데이터베이스 정리

  • 기타.