[ English | Indonesia | 한국어 (대한민국) | español (México) | English (United Kingdom) | Deutsch | 中文 (简体, 中国) ]
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에 접근 가능할 것입니다.
참고
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 파일들을 제거
데이터베이스 정리
기타.