部署Overcloud


overcloud 部署步骤

  1. 收集物理机的pxe网卡 mac地址。 ipmi地址、用户名、密码。
  2. 定义overcloud 节点配置文件,填入上一步收集的overcloud所有节点的ipmi地址、用户名密码 、pxe mac 。
  3. 上传overcloud镜像
  4. 导入 节点
  5. inspection node
  6. 定义根磁盘
  7. 定义节点类型
  8. 部署overcloud

在这一步,我们已经完成了undercloud的部署。现在要开始部署overcloud。

1. 准备overcloud 镜像

Overcloud 镜像可以自己制作也可以下载现成的, 如果要使用ustack内部的镜像,请使用lftp 下载。tripleo.ustack.com 对应的 IP 是10.0.100.250.

  1. $ lftp tripleo.ustack.com:/pub/images/newton/
  2. cd ok, cwd=/pub/images/newton
  3. lftp tripleo.ustack.com:/pub/images/newton> ls
  4. -rw-r--r-- 1 0 0 1670748160 Jan 08 10:49 overcloud_image.tar
  5. lftp tripleo.ustack.com:/pub/images/newton> get overcloud_image.tar

这里的演示使用下载的镜像。Overcloud 镜像下载地址

下载后解压,将这些文件放到stack用户的根目录底下:

  1. $ ls ~/images/
  2. ironic-python-agent.initramfs
  3. ironic-python-agent.kernel
  4. overcloud-full.initrd
  5. overcloud-full.qcow2
  6. overcloud-full.vmlinux

如果要修改镜像的root密码: $ virt-customize -a overcloud-full.qcow2 --root-password password:<my_root_password>

2. 上传镜像

第一次部署推荐使用社区镜像,PoC 环境和生产环境一定要自己制作镜像。

  1. $ . stackrc
  2. $ openstack overcloud image upload --image-path /home/stack/images

默认情况下,我们的glance使用的是swift的存储后端,所以在进行这个步骤时必须保证你的swift的服务是可以使用的。

上传完成之后,查看镜像:

  1. $ openstack image list
  2. +--------------------------------------+------------------------+
  3. | ID | Name |
  4. +--------------------------------------+------------------------+
  5. | 765a46af-4417-4592-91e5-a300ead3faf6 | bm-deploy-ramdisk |
  6. | 09b40e3d-0382-4925-a356-3a4b4f36b514 | bm-deploy-kernel |
  7. | ef793cd0-e65c-456a-a675-63cd57610bd5 | overcloud-full |
  8. | 9a51a6cb-4670-40de-b64b-b70f4dd44152 | overcloud-full-initrd |
  9. | 4f7e33f4-d617-47c1-b36f-cbe90f132e5d | overcloud-full-vmlinuz |
  10. +--------------------------------------+------------------------+

这个会显示在收集物理机信息的时候使用的PXE镜像,上传的时候会把这些镜像都拷贝到/httpboot这个目录下面

3. 收集物理机信息

我们现在已经有了镜像,紧接着就是定义我们overcloud主机了。我们将overcloud vm的信息写入nodes.yaml。参照以下格式:

  1. nodes:
  2. - name: rack2-3-compute
  3. driver: pxe_ipmitool
  4. driver_info:
  5. ipmi_address: 10.0.108.119
  6. ipmi_username: root
  7. ipmi_password: PQ79ISF7ha7G
  8. properties:
  9. cpus: 4
  10. memory_mb: 12288
  11. local_gb: 60
  12. capabilities: 'boot_option:local'
  13. root_device:
  14. name: /dev/sda
  15. ports:
  16. - address: 24:6E:96:06:A2:1D

4. 导入overcloud信息

  1. openstack baremetal create nodes.yaml

为 nodes 分配ramdisk 和kernal

  1. DEPLOY_KERNEL=$(openstack image show bm-deploy-kernel -f value -c id)
  2. DEPLOY_RAMDISK=$(openstack image show bm-deploy-ramdisk -f value -c id)
  3. for uuid in $(openstack baremetal node list -f value -c UUID);
  4. do
  5. openstack baremetal node set $uuid \
  6. --driver-info deploy_kernel=$DEPLOY_KERNEL \
  7. --driver-info deploy_ramdisk=$DEPLOY_RAMDISK
  8. done

进行introspection收集overcloud node 的信息

  1. openstack baremetal introspection bulk start

5. 为物理机定义节点类型

在规划节点时,希望特定的物理机作为特定的角色。比如有一台物理机,我们在ironic 配置文件里将它定义为overcloud 中ceph节点,不要任性的变成计算节点或者控制节点。这样,我们就需要为这些节点定义类型。定义类型有两种方法,比如我只需要ceph节点,安装在ceph host 上(在ironic 配置文件中叫做ceph),nova 节点安装在nova host 上,控制节点安装在controller host 上。

正常写法:

  1. openstack baremetal node set --property capabilities='profile:compute,boot_option:local' <compute node uuid>
  2. openstack baremetal node set --property capabilities='profile:control,boot_option:local' <control node uuid>
  3. openstack baremetal node set --property capabilities='profile:ceph-storage,boot_option:local' <ceph node uuid>

一句话写法:

  1. ironic node-list|grep 'controller'|awk '{print $2}'|xargs -I{} ironic node-update {} add properties/capabilities='profile:control,boot_option:local'
  2. ironic node-list|grep 'compute'|awk '{print $2}'|xargs -I{} ironic node-update {} add properties/capabilities='profile:compute,boot_option:local'
  3. ironic node-list|grep 'ceph'|awk '{print $2}'|xargs -I{} ironic node-update {} add properties/capabilities='profile:ceph-storage,boot_option:local'

4. 定义根磁盘

在执行完openstack baremetal introspection bulk start之后,根据得到的信息来定义overcloud节点的根磁盘。根磁盘可以通过以下参数来指定。

  1. model (String): Device identifier.
  2. vendor (String): Device vendor.
  3. serial (String): Disk serial number.
  4. wwn (String): Unique storage identifier.
  5. size (Integer): Size of the device in GB.

查看introspection得到的磁盘信息,确认sda是不是我们想要的根磁盘。

  1. list=(`ironic node-list|grep power|awk '{print $2}'`);for i in ${list[*]} ;do openstack baremetal introspection data save $i | jq ".inventory.disks" ;done

如果sda是我们想要的根磁盘:

  1. list=(`ironic node-list|grep power|awk '{print $2}'`);for i in ${list[*]};do openstack baremetal node set --property root_device='{"name":"/dev/sda"}' $i;done

如果sda不是我们想要的根磁盘

那就需要使用wwn来定义根磁盘,手动对每一个node依次执行定义:

  1. #wwn
  2. ironic node-update $i add properties/root_device='{"wwn": "xxx"}'

然后需要修正logic_gb,可以重新执行introspection或者手动指定logic_gb

  • 重新执行introspection
    1. openstack baremetal introspection bulk start
  • 或者更新logic_gb
    1. ironic node-update <UUID> add properties/local_gb=<NEW VALUE>

4. 部署

在进行自定义部署之前,应该使用简单部署验证以上步骤都没有问题,确保主机可以被正常部署出来。现在开始我们的部署之旅 — 最简单的部署,等待一杯咖啡的时间。

  1. openstack overcloud deploy --template