VBMC를 통한 TripleO 및 IPMI
instack을 사용하여 가상 환경에서 TripleO를 테스트 할 때 Ironic이 기본 pxe_ssh 드라이버 대신 IPMI를 사용하여 가상 시스템을 제어하기를 원했습니다.
내가 사용한 설정은 매우 간단합니다. Centos 7.2를 설치 한 Triplemetal 시스템 한 대는 TripleO documentation을 사용하여 환경 설정을 진행했습니다 . 글을 쓰는 시점에서 저는 Mitaka와 Newton에서 테스트를 해왔습니다.
이미 작동중인 언더 클라우드 VM 설정이 있고 그에 언더 클라우드 소프트웨어를 설치했다고 가정합니다 ( openstack undercloud install ).
또한 필요한 이미지 (overcloud-full, ironic-python-agent 등)를 이미 가져 왔습니다. 이제 “베어 메탈”가상 머신을 정의하는 instackenv.json을 Ironic으로 가져올 준비가되었습니다.
호스트 (하이퍼 바이저-libvirt를 실행중인 베어 메탈 머신과 스택 된 “베어 메탈”가상 머신)에서 VirtualBMC를 설치하고 구성합니다.
하이퍼 바이저에서
VirtualBMC는 pip install을 통해 가장 잘 설치할 수 있습니다. yum을 통해 pip를 설치할 수 있습니다. 그러나 그것을 복제하고 git 에서 수동으로 설치하도록 선택할 수 있습니다 .
$ sudo yum install python-pip -y ... $ sudo pip install virtualbmc
주) 필요한 경우 추가로 'libvirt-devel' 패키지를 설치해야 할 수 도 있습니다.
$ sudo yum install -y gcc python-devel libvirt-devel
또한 방화벽을 사용하여 iptables를 제어하는 것이 좋습니다. 여전히 설치되어 있지 않은 경우 yum을 사용하여 설치하고 활성화 할 수 있습니다.
$ sudo yum install firewalld $ sudo systemctl enable firewalld $ sudo systemctl start firewalld
아이디어는 호스트에 하나의 IP (기본적으로 192.168.122.1)가 있으며 instack VM에서 액세스 할 수 있다는 것입니다. IPMI는 기본적으로 포트 623을 사용합니다. 예를 들어 ipmitool 명령을 실행하면 기본적으로이 포트가 사용됩니다. 그러나 -p 플래그를 제공하고 다른 포트를 지정할 수 있습니다. IP가 비슷하기 때문에 VM마다 다른 포트가 필요합니다 (호스트의 IP 192.168.122.1).
vbmc를 통해 제어하려는 가상 머신의 양에 따라 언더 클라우드 VM이 vbmc 데몬에 도달 할 수 있도록 필요한 포트에 대한 액세스를 허용하십시오. 제 경우에는 5 개의 오버 클라우드 가상 머신 (baremetalbrbm_0..4)이있었습니다. 이것은 포트를 할당하기로 선택한 방법입니다.
baremetalbrbm_0은 기본 IPMI 포트 623을 가져
옵니다. baremetalbrbm_1 포트 624
baremetalbrbm_2 포트 625
baremetalbrbm_3 포트 626
baremetalbrbm_4 포트 627
방화벽에서 다음 포트를 허용합니다.
$ sudo firewall-cmd --permanent --zone=public --add-port=623-627/udp $ sudo firewall-cmd --reload
이제 가상 머신 ( “도메인”)을 vbmc에 추가 할 수 있습니다.
$ sudo vbmc list +-------------+--------+---------+------+ | Domain name | Status | Address | Port | +-------------+--------+---------+------+ +-------------+--------+---------+------+ $ sudo vbmc add baremetalbrbm_0 --username root --password calvin --port 623 $ sudo vbmc add baremetalbrbm_1 --username root --password calvin --port 624 $ sudo vbmc add baremetalbrbm_2 --username root --password calvin --port 625 $ sudo vbmc add baremetalbrbm_3 --username root --password calvin --port 626 $ sudo vbmc add baremetalbrbm_4 --username root --password calvin --port 627 $ sudo vbmc list +-----------------+--------+---------+------+ | Domain name | Status | Address | Port | +-----------------+--------+---------+------+ | baremetalbrbm_0 | down | :: | 623 | | baremetalbrbm_1 | down | :: | 624 | | baremetalbrbm_2 | down | :: | 625 | | baremetalbrbm_3 | down | :: | 626 | | baremetalbrbm_4 | down | :: | 627 | +-----------------+--------+---------+------+
그래! 추가했습니다. 이제 시작하면됩니다.
$ for i in {0..4};do sudo vbmc start baremetalbrbm_${i};done 2016-12-06 13:36:40,806.806 685 INFO VirtualBMC [-] Virtual BMC for domain baremetalbrbm_0 started 2016-12-06 13:36:41,034.034 694 INFO VirtualBMC [-] Virtual BMC for domain baremetalbrbm_1 started 2016-12-06 13:36:41,251.251 703 INFO VirtualBMC [-] Virtual BMC for domain baremetalbrbm_2 started 2016-12-06 13:36:41,467.467 712 INFO VirtualBMC [-] Virtual BMC for domain baremetalbrbm_3 started 2016-12-06 13:36:41,684.684 721 INFO VirtualBMC [-] Virtual BMC for domain baremetalbrbm_4 started
그들이 잘 듣고 있는지 확인합시다 :
$ sudo vbmc list +-----------------+---------+---------+------+ | Domain name | Status | Address | Port | +-----------------+---------+---------+------+ | baremetalbrbm_0 | running | :: | 623 | | baremetalbrbm_1 | running | :: | 624 | | baremetalbrbm_2 | running | :: | 625 | | baremetalbrbm_3 | running | :: | 626 | | baremetalbrbm_4 | running | :: | 627 | +-----------------+---------+---------+------+ $ sudo lsof -Pni:623-627 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME vbmc 685 root 3u IPv6 4622045 0t0 UDP *:623 vbmc 694 root 3u IPv6 4622046 0t0 UDP *:624 vbmc 703 root 3u IPv6 4622047 0t0 UDP *:625 vbmc 712 root 3u IPv6 4625461 0t0 UDP *:626 vbmc 721 root 3u IPv6 4616064 0t0 UDP *:627
Instack VM에서
이제 instack vm에 로그인하고 ipmitool을 사용하여 연결을 확인할 수 있습니다.
[stack@instack ~]$ ipmitool -I lanplus -U root -P calvin -H 192.168.122.1 power status # defaults to 623 Chassis Power is off [stack@instack ~]$ ipmitool -I lanplus -U root -P calvin -H 192.168.122.1 power status -p 627 Chassis Power is off
instack.json은 다음과 같아야합니다 ( “name”: “bm [0-4]“속성을 추가하여 나중에 전체 UUID를 복사 / 붙여 넣기하지 않고도 명령을 더 쉽게 실행할 수 있기 때문에 추가했습니다)
{ "nodes": [ { "mac": [ "00:3f:f7:9f:2e:eb" ], "name": "bm0", "cpu": "2", "memory": "8192", "disk": "42", "arch": "x86_64", "pm_user": "root", "pm_addr": "192.168.122.1", "pm_password": "calvin", "pm_type": "pxe_ipmitool" }, { "mac": [ "00:1e:c1:2c:e0:35" ], "name": "bm1", "cpu": "2", "memory": "8192", "disk": "42", "arch": "x86_64", "pm_user": "root", "pm_addr": "192.168.122.1", "pm_password": "calvin", "pm_type": "pxe_ipmitool" }, { "mac": [ "00:56:34:66:7a:fc" ], "name": "bm2", "cpu": "2", "memory": "8192", "disk": "42", "arch": "x86_64", "pm_user": "root", "pm_addr": "192.168.122.1", "pm_password": "calvin", "pm_type": "pxe_ipmitool" }, { "mac": [ "00:8a:c5:c7:22:46" ], "name": "bm3", "cpu": "2", "memory": "8192", "disk": "42", "arch": "x86_64", "pm_user": "root", "pm_addr": "192.168.122.1", "pm_password": "calvin", "pm_type": "pxe_ipmitool" }, { "mac": [ "00:a3:bd:79:54:b6" ], "name": "bm4", "cpu": "2", "memory": "8192", "disk": "42", "arch": "x86_64", "pm_user": "root", "pm_addr": "192.168.122.1", "pm_password": "calvin", "pm_type": "pxe_ipmitool" } ] }
이제 instackenv.json (openstack baremetal import instackenv.json )을 가져올 수 있습니다 .
그리고 네, 당신은 올바르게 알고 있습니다 – 우리는 여전히 노드 당 포트를 정의하지 않았습니다. 내가 직면 한 문제는 instackenv.json에 “pm_port”를 추가 할 수 없다는 것입니다. 노드를 Ironic으로 가져온 후에 이것을 구성해야했습니다.
$ ironic node-update bm1 add driver_info/ipmi_port=624 $ ironic node-update bm2 add driver_info/ipmi_port=625 $ ironic node-update bm3 add driver_info/ipmi_port=626 $ ironic node-update bm4 add driver_info/ipmi_port=627
이것은 노드 bm0을 제외한 모든 노드에 대해 수행되어야합니다 (기본 IPMI 포트 623에서 청취 중이므로 필요하지 않습니다).
그게 다야! 이제 내부 검사를 실행하고 배포를 진행할 수 있습니다.
Ironic이 동일한 IP 주소 (192.168.122.1)로 여러 노드를 부팅해야한다는 사실이 마음에 들지 않았기 때문에 벌크 내부 검사를 실행할 수 없다는 점에주의해야합니다. 하이퍼 바이저의 VirtualBMC에서 우리가“해킹”하고 있는지는 알 수 없습니다. 물론 실제 베어 메탈 환경에서는 동일한 네트워크에서 동일한 IP를 갖는 것이 매우 나쁩니다.
편집 : 이미 pxe_ssh에서 멀어지고 기본적으로 virtualbmc와 함께 pxe_ipmi를 사용하는 작업이 있습니다 :
https://blueprints.launchpad.net/tripleo/+spec/switch-to-virtualbmc