아… 몇달전에 OpenStack Platform 8을 번역 했었는데… 이번에서야 osp director 10을 설치 해봤다.
수요일 부터 토요일 까지 쭉 이거에만 매달려서 삽질 한것같다. 다음에는 이런 삽질을 하지 않을려고 여기에다 기록으로 남긴다. 생각해보니 4일 밖에 안되네 ㅋㅋ ; 짧은것 같지만 일도안하고 이거에만 매달려 있었으니 꽤 긴시간이다 ㅎㅎ(설치 건 몇개 해결하고 나서 약간 할 일이 없는 시간이었다. ㅋㅋ)
아마도 주변에서 같이 하는사람들이 몇명 있어서 도움이 많이 됐던것 같다.
일단 내가 test한 환경은 다음과 같다.
-
32GB memory를 갖고 있는 노트북 1대
저 1대에서 가상머신들을 만들어서 모든 test를 다 하였다. ㅋㅋ 회사에서 일 많이 하라고 사준 laptop인데 정말 잘 쓰고 있다. cpu는 좋으면 좋을 수록 test가 빨라져서 좋겠지만… 난 i5-6200U CPU @ 2.30GHz 이런 cpu를 쓰고 있다.
하면서 여러 blog들을 많이 봤지만 아래 blog가 가장 좋더라.
기본적으로는 access.redhat.com 에 있는 osp 10 diretor installation and usage 문서를 중심으로 진행했다.
음… 일단 처음으로 redhat osp를 설치 하려면 redhat subscription이 필요한데 이건 redhat에 가입을 하여서 openstack 평가판 subscription을 받자. 60일간은 무제한으로 계속 쓸 수 잇다.
hypervisor에서 가상머신들이 사용할 provisioning network bridge를 만들자.
youngjulee@hypervisor :~⟫ cat > /tmp/provisioning.xml <<EOF
<network>
<name>provisioning</name>
<ip address=’192.0.2.254′ netmask=’255.255.255.0′>
</ip>
</network>
EOF
가상머신 환경
osp-director
-
cpu : 2
-
mem : 8192MB
-
disk : 30GB
-
nic : 2
-
provision (192.0.2.0/24)
-
external (192.168.127.0/24)
-
osp-node1
-
cpu : 2
-
mem : 8192
-
disk : 40GB
-
nic : 2
-
provision (192.0.2.0/24) x 2
-
osp-node2
-
cpu : 2
-
mem : 4096
-
disk : 40GB
-
nic : 2
-
provision (192.0.2.0/24) x 2
-
가상머신들을 위와같이 생성 시키고 osp-director에만 rhel7을 설치하자.
설치가 끝나면 먼저 user를 생성한다.
director의 hostname은 manager.test.dom 으로 설정하였다.
[root@manager ~]# useradd stack
[root@manager ~]# passwd stack
### sudo 사용시 password를 안쓰게 setting한다. ###
[root@manager ~]# echo “stack ALL=(root) NOPASSWD:ALL” | tee -a /etc/sudoers.d/stack
[root@manager ~]# chmod 0440 /etc/sudoers.d/stack
### 사용자를 stack 으로 바꾼다. ###
[root@manager ~]# su – stack
[stack@manager ~]$
### template와 image directory 생성 ###
[stack@manager ~]$ mkdir ~/templates ~/images
### hostname 을 설정 ###
[stack@manager ~]$ sudo hostnamectl set-hostname manager.test.dom
[stack@manager ~]$ sudo hostnamectl set-hostname –transient manager.test.dom
[stack@manager ~]$ cat /etc/hosts
127.0.0.1 manager.test.dom manager localhost localhost.localdomain localhost4 localhost4.localdomain4
### subscription 등록 ###
[stack@manager ~]$ sudo subscription-manager register
[stack@manager ~]$ sudo subscription-manager list –available –all
[stack@manager ~]$ sudo subscription-manager attach –pool=8a85f98158fbf71a0158fd01b66*****
[stack@manager ~]$ sudo subscription-manager repos –disable=*
[stack@manager ~]$ sudo subscription-manager repos –enable=rhel-7-server-rpms –enable=rhel-7-server-extras-rpms –enable=rhel-7-server-rh-common-rpms –enable=rhel-ha-for-rhel-7-server-rpms –enable=rhel-7-server-openstack-10-rpms
### update ###
[stack@manager ~]$ sudo yum update -y
[stack@manager ~]$ sudo reboot
### director package install ###
[stack@manager ~]$ sudo yum install -y python-tripleoclient
### director 설정 ###
[stack@manager ~]$ cp /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.conf
[stack@manager ~]$ grep -iv ‘^$\|^#’ undercloud.conf
[DEFAULT]
generate_service_certificate = true
local_interface = eth1
enable_ui = true
[auth]
### test 환경이라 모두 default로 하고, 필수적으로 바꿔야만 하는것들만 바꿨다. generate_service_certificate 이것은 인증서를 자동적으로 만들어주는 항목이다. osp 10 director에서 다시 사용가능한(8과 9에서는 잠시 못썻엇다.) director web ui를 설치하려면 인증서가 반드시 필요하다.
enable_ui 이것이 director web ui를 enable하겠냐고 묻는것이다.
local_interface 이게 우리가 test에 사용할 provisioning network interface를 어떤 걸로 할건지 정하는거다. external network nic을 지정하면 안된다.
내가 뭘 잘못했는지 web ui는 아직 잘 안되더라. ###
### undercloud install ###
[stack@manager ~]$ openstack undercloud install
### 위에서 설정이 잘못되거나 하면 여기서 먼저 실패를 많이 하는데 /home/stack/instack/install-undercloud.log 여기에 install log가 쌓이니까 한번 확인해보자. 사실 화면에 뜨는거랑 별반 차이는 없다. ㅎㅎ###
### 설치가 다 되었으면 stackrc를 source 하자 ###
[stack@manager ~]$ source ~/stackrc
### overcloud node 의 image 등록 ###
[stack@manager ~]$ sudo yum install rhosp-director-images rhosp-director-images-ipa
[stack@manager ~]$ cd ~/images
[stack@manager ~]$ for i in /usr/share/rhosp-director-images/overcloud-full-latest-10.0.tar /usr/share/rhosp-director-images/ironic-python-agent-latest-10.0.tar; do tar -xvf $i; done
[stack@manager ~]$ openstack overcloud image upload –image-path /home/stack/images/
[stack@manager ~]$ openstack image list
+————————————–+————————+——–+
| ID | Name | Status |
+————————————–+————————+——–+
| 90ae7e6f-f307-40df-9714-6be5bf68fed9 | bm-deploy-ramdisk | active |
| 9952802e-536c-411a-b65f-ce837c250a00 | bm-deploy-kernel | active |
| b8f55c8f-22cb-4181-a9d5-172b75ab4242 | overcloud-full | active |
| b3105b8f-422d-4c3e-b5ce-568dba0d0327 | overcloud-full-vmlinuz | active |
| 19f48688-5ea0-4599-86ce-af186152d58c | overcloud-full-initrd | active |
+————————————–+————————+——–+
### ipxe에 사용할 image가 잘 들어가 있나 확인 ###
[stack@manager ~]$ ls -l /httpboot
### undercloud neutron subnet에 dns 등록 ###
[stack@manager ~]$ neutron subnet-list
+————————————–+——+————–+———————————————+
| id | name | cidr | allocation_pools |
+————————————–+——+————–+———————————————+
| 1c701fc4-d44d-4c90-80e8-ea1173483830 | | 192.0.2.0/24 | {“start”: “192.0.2.5”, “end”: “192.0.2.24”} |
+————————————–+——+————–+———————————————+
[stack@manager ~]$ neutron subnet-update 1c701fc4-d44d-4c90-80e8-ea1173483830 –dns-nameserver 192.168.127.1
### 192.168.127.1은 hypervisor(laptop)의 ip로 hypervisor에다가 dnsmasq를 돌려놔서 dns로 쓰고있다. ###
[stack@manager ~]$ neutron subnet-show 1c701fc4-d44d-4c90-80e8-ea1173483830
### dns_nameservers 확인 ###
### pxe_ssh config ###
원래 여기에 ipmi 설정이 들어가야 하는데 kvm으로 하다보니까 그게 안되서 ipmi driver를 pxe_ssh로 설정하고 진행을 해야한다. 여기서 위에나온 blog를 참조햇다.
youngjulee@hypervisor :~⟫ cat << EOF > /etc/polkit-1/localauthority/50-local.d/50-libvirt-user-stack.pkla
[libvirt Management Access]
Identity=unix-user:stack
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes
EOF
youngjulee@hypervisor :~⟫ useradd stack
youngjulee@hypervisor :~⟫ passwd stack
[stack@manager ~]$ ssh-copy stack@192.168.127.1
[stack@manager ~]$ cat /tmp/nodes.txt
52:54:00:75:48:0a
52:54:00:c9:e9:fa
[stack@manager ~]$ jq . << EOF > ~/instackenv.json
{
“ssh-user”: “stack”,
“ssh-key”: “$(cat ~/.ssh/id_rsa)”,
“power_manager”: “nova.virt.baremetal.virtual_power_driver.VirtualPowerManager”,
“host-ip”: “192.168.127.1”,
“arch”: “x86_64”,
“nodes”: [
{
“pm_addr”: “192.168.127.1”,
“pm_password”: “$(cat ~/.ssh/id_rsa)”,
“pm_type”: “pxe_ssh”,
“mac”: [
“$(sed -n 1p /tmp/nodes.txt)”
],
“cpu”: “2”,
“memory”: “8192”,
“disk”: “40”,
“arch”: “x86_64”,
“pm_user”: “stack”
},
{
“pm_addr”: “192.168.127.1”,
“pm_password”: “$(cat ~/.ssh/id_rsa)”,
“pm_type”: “pxe_ssh”,
“mac”: [
“$(sed -n 2p /tmp/nodes.txt)”
],
“cpu”: “2”,
“memory”: “4096”,
“disk”: “40”,
“arch”: “x86_64”,
“pm_user”: “stack”
}
]
}
EOF
### 자동으로 instack.json file이 생성되는 script이다. ###
### overcloud에서 쓸 flavor 생성 ###
[stack@manager ~]$ for n in control compute ; do nova flavor-delete $n; done
[stack@manager ~]$ openstack flavor create –id auto –ram 8192 –disk 39 –vcpus 2 –swap 2048 control
[stack@manager ~]$ openstack flavor create –id auto –ram 4096 –disk 37 –vcpus 2 –swap 2048 compute
### disk크기는 3GB 정도 작게 설정하자. introspection 끝나고 확인 해보면 disk size가 40GB가 아닌 39GB로 나온다. 위에서 40GB로 잡게되면 나중에 vaild host가 없어서 배포 실패한다는 error가 뜨게된다. ###
[stack@manager ~]$ openstack flavor set –property “cpu_arch”=”x86_64” –property “capabilities:boot_option”=”local” –property “capabilities:profile”=”control” control
[stack@manager ~]$ openstack flavor set –property “cpu_arch”=”x86_64” –property “capabilities:boot_option”=”local” –property “capabilities:profile”=”compute” compute
[stack@manager ~]$ openstack baremetal import –json ~/instackenv.json
[stack@manager ~]$ openstack baremetal configure boot
[stack@manager ~]$ openstack baremetal node list
### overcloud node hardware introspecting ###
[stack@manager ~]$ for node in $(openstack baremetal node list –fields uuid -f value) ; do openstack baremetal node manage $node ; done
[stack@manager ~]$ openstack overcloud node introspect –all-manageable –provide
### introspection 현황은 아래와 같이 확인하자. ###
[stack@manager ~]$ sudo journalctl -l -u openstack-ironic-inspector -u openstack-ironic-inspector-dnsmasq -u openstack-ironic-conductor -f
### hypervisor에서도 잘켜지는지, dhcp기능은 잘 되는지, ipxe를 통해서 inspector.ipxe file은 잘 가져 오는지를 확인한다. ###
youngjulee@hypervisor :~⟫ virt-viewer osp-node1
### node tagging ###
[stack@manager ~]$ openstack baremetal node set –property capabilities=’profile:compute,boot_option:local’ be07221a-0405-4067-a00e-c86dad2b7b2f
[stack@manager ~]$ openstack baremetal node set –property capabilities=’profile:control,boot_option:local’ 853ed41c-3a4d-4e06-887a-364cee11995e
[stack@manager ~]$ openstack overcloud profiles list
### root disk 정의 ###
[stack@manager ~]$ yum install -y crudini
[stack@manager ~]$ mkdir swift-data ; cd swift-data
[stack@manager ~]$ export SWIFT_PASSWORD=`sudo crudini –get /etc/ironic-inspector/inspector.conf swift password`
[stack@manager ~]$ for node in $(ironic node-list | grep -v UUID| awk ‘{print $2}’); do swift -U service:ironic -K $SWIFT_PASSWORD download ironic-inspector inspector_data-$node; done
[stack@manager ~]$ for node in $(ironic node-list | awk ‘!/UUID/ {print $2}’); do echo “NODE: $node” ; cat inspector_data-$node | jq ‘.inventory.disks’ ; echo “—–” ; done
NODE: be07221a-0405-4067-a00e-c86dad2b7b2f
[
{
“size”: 42949672960,
“rotational”: true,
“vendor”: “ATA”,
“name”: “/dev/sda”,
“wwn_vendor_extension”: null,
“wwn_with_extension”: null,
“model”: “QEMU HARDDISK”,
“wwn”: null,
“serial”: “QM00001”
}
]
—–
NODE: 853ed41c-3a4d-4e06-887a-364cee11995e
[
{
“size”: 42949672960,
“rotational”: true,
“vendor”: “0x1af4”,
“name”: “/dev/vda”,
“wwn_vendor_extension”: null,
“wwn_with_extension”: null,
“model”: “”,
“wwn”: null,
“serial”: null
}
]
—–
### 사실 root disk가 1개만 있을 때는 궂이 설정해줄 필요는 없는데 여러개의 disk가 있을 때 특정 disk를 설정disk를 root로 쓸 수가 있다. 위에나온 정보들중에 하나를 이용해서 지정 할 수 있다. ###
[stack@manager ~]$ openstack baremetal node set –property root_device='{“serial”: “QM00001“}’ be07221a-0405-4067-a00e-c86dad2b7b2f
### heat template 가져오기 ###
[stack@manager ~]$ cp -av /usr/share/openstack-tripleo-heat-templates/environments/* ~/template/
### overcloud deploy ###
[stack@manager ~]$ cat overcloud-deploy.sh
openstack overcloud deploy \
–templates \
-e /home/stack/templates/environments/network-environment.yaml \
–stack youngju-cloud \
–control-scale 1 \
–compute-scale 1 \
–control-flavor control \
–compute-flavor compute \
–ntp-server pool.ntp.org \
–neutron-network-type vxlan \
–neutron-tunnel-types vxlan \
–timeout 60
[stack@manager ~]$ bash overcloud-deploy.sh
### 지금부터가 진짜 문제다. 위와 똑같이 진행 했다면 아마도 error가 안나겠지만 여러가지 이유로 deploy가 실패한다. 아래의 url에 troubleshooting 하는 방법이 있는데 괜찮더라. ###
http://docs.openstack.org/developer/tripleo-docs/troubleshooting/troubleshooting-overcloud.html