Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

6.4. 配置容器化的 Compute 节点

director 提供了一个选项来把 OpenStack 的容器化项目(kolla)的服务集成到 Overcloud 的 Compute 节点上。这包括使用 Red Hat Enterprise Linux Atomic Host 作为基本操作系统和独立的容器来运行不同 OpenStack 服务的 Compute 节点。
director 的核心 Heat 模板集合包括环境文件来帮助配置容器化的 Compute 节点。这些文件包括:
  • docker.yaml - 配置容器化 Compute 节点的主要环境文件。
  • docker-network.yaml - 没有网络隔离的容器化 Compute 节点网络的环境文件。
  • docker-network-isolation.yaml - 使用网络隔离的容器化 Compute 节点的环境文件。

6.4.1. 容器化 Compute 环境文件(docker.yaml)

docker.yaml 是包括容器化 Compute 节点配置的主环境文件。它包括了 resource_registry 中的项:
resource_registry:
  OS::TripleO::ComputePostDeployment: ../docker/compute-post.yaml
  OS::TripleO::NodeUserData: ../docker/firstboot/install_docker_agents.yaml
OS::TripleO::NodeUserData
在第一次引导时,提供一个使用自定义配置的 Heat 模板。在这种情况下,它会在第一次引导时在 Compute 节点上安装 openstack-heat-docker-agents 容器。这个容器提供了一组初始脚本来配置容器化 Compute 节点,以及 Heat hook 来和 director 进行通讯。
OS::TripleO::ComputePostDeployment
提供一组 Compute 节点的后配置资源的 Heat 模板。这包括了一个软件配置资源,它为 Puppet 提供了一组 tags
  ComputePuppetConfig:
    type: OS::Heat::SoftwareConfig
    properties:
      group: puppet
      options:
        enable_hiera: True
        enable_facter: False
        tags: package,file,concat,file_line,nova_config,neutron_config,neutron_agent_ovs,neutron_plugin_ml2
      inputs:
      - name: tripleo::packages::enable_install
        type: Boolean
        default: True
      outputs:
      - name: result
      config:
        get_file: ../puppet/manifests/overcloud_compute.pp
这些 tag 定义了 Puppet 模板来传递到 openstack-heat-docker-agents 容器。
docker.yaml 文件包括了一个名为 NovaImageparameter,它会在配置 Compute 节点时使用一个不同的镜像(atomic-image)替换标准的 overcloud-full 镜像。第 6.4.2 节 “上传 Atomic Host 镜像” 介绍了上传这个新镜像的方法。
docker.yaml 文件还包括了一个 parameter_defaults 部分,它定义了 Docker 的注册表以及 Compute 节点服务要使用的镜像。您可以修改这个部分来使用本地的注册表,而不使用默认的 registry.access.redhat.com。如需了解配置一个本地注册表的信息,请参阅 第 6.4.3 节 “使用本地注册表”

6.4.2. 上传 Atomic Host 镜像

director 需要把一个 Red Hat Enterprise Linux 7 Atomic Host 的云镜像(Cloud Image)导入到它的镜像存储中(atomic-image)。这是因为,在 Overcloud 创建的 provisioning 阶段,Compute 节点需要这个镜像作为基础 OS。
从 Red Hat Enterprise Linux 7 Atomic Host 产品页(https://access.redhat.com/downloads/content/271/ver=/rhel---7/7.2.2-2/x86_64/product-software)中下载 Cloud Image,把它保存到 stack 用户的家目录下的 images 子目录中。
当镜像下载完成后,使用 stack 用户把镜像导入到 director。
$ glance image-create --name atomic-image --file ~/images/rhel-atomic-cloud-7.2-12.x86_64.qcow2 --disk-format qcow2 --container-format bare
这会导入这个镜像,以及其它 Overcloud 镜像。
$ glance image-list
+--------------------------------------+------------------------+
| ID                                   | Name                   |
+--------------------------------------+------------------------+
| 27b5bad7-f8b2-4dd8-9f69-32dfe84644cf | atomic-image           |
| 08c116c6-8913-427b-b5b0-b55c18a01888 | bm-deploy-kernel       |
| aec4c104-0146-437b-a10b-8ebc351067b9 | bm-deploy-ramdisk      |
| 9012ce83-4c63-4cd7-a976-0c972be747cd | overcloud-full         |
| 376e95df-c1c1-4f2a-b5f3-93f639eb9972 | overcloud-full-initrd  |
| 0b5773eb-4c64-4086-9298-7f28606b68af | overcloud-full-vmlinuz |
+--------------------------------------+------------------------+

6.4.3. 使用本地注册表

默认的设置是使用红帽的容器注册表来进行镜像下载。但是,为了节省带宽,也可以在 Overcloud 的创建过程中使用一个本地的注册表。
您可以选择使用一个存在的本地注册表,或安装一个新的本地注册表。要安装一个新的注册表,请参阅 Getting Started with Containers 文档中的 Chapter 2. Get Started with Docker Formatted Container Images
把所需的所有镜像导入到注册表中:
$ sudo docker pull registry.access.redhat.com/openstack-nova-compute:latest
$ sudo docker pull registry.access.redhat.com/openstack-data:latest
$ sudo docker pull registry.access.redhat.com/openstack-nova-libvirt:latest
$ sudo docker pull registry.access.redhat.com/openstack-neutron-openvswitch-agent:latest
$ sudo docker pull registry.access.redhat.com/openstack-openvswitch-vswitchd:latest
$ sudo docker pull registry.access.redhat.com/openstack-openvswitch-db-server:latest
$ sudo docker pull registry.access.redhat.com/openstack-heat-docker-agents:latest
在获得镜像后,把它们标记到适当的注册表主机:
$ sudo docker tag registry.access.redhat.com/openstack-nova-compute:latest localhost:8787/registry.access.redhat.com/openstack-nova-compute:latest
$ sudo docker tag registry.access.redhat.com/openstack-data:latest localhost:8787/registry.access.redhat.com/openstack-data:latest
$ sudo docker tag registry.access.redhat.com/openstack-nova-libvirt:latest localhost:8787/registry.access.redhat.com/openstack-nova-libvirt:latest
$ sudo docker tag registry.access.redhat.com/openstack-neutron-openvswitch-agent:latest localhost:8787/registry.access.redhat.com/openstack-neutron-openvswitch-agent:latest
$ sudo docker tag registry.access.redhat.com/openstack-openvswitch-vswitchd:latest localhost:8787/registry.access.redhat.com/openstack-openvswitch-vswitchd:latest
$ sudo docker tag registry.access.redhat.com/openstack-openvswitch-db-server:latest localhost:8787/registry.access.redhat.com/openstack-openvswitch-db-server:latest
$ sudo docker tag registry.access.redhat.com/openstack-heat-docker-agents:latest localhost:8787/registry.access.redhat.com/openstack-heat-docker-agents:latest
把它们推到注则表:
$ sudo docker push localhost:8787/registry.access.redhat.com/openstack-nova-compute:latest
$ sudo docker push localhost:8787/registry.access.redhat.com/openstack-data:latest
$ sudo docker push localhost:8787/registry.access.redhat.com/openstack-nova-libvirt:latest
$ sudo docker push localhost:8787/registry.access.redhat.com/openstack-neutron-openvswitch-agent:latest
$ sudo docker push localhost:8787/registry.access.redhat.com/openstack-openvswitch-vswitchd:latest
$ sudo docker push localhost:8787/registry.access.redhat.com/openstack-openvswitch-db-server:latest
$ sudo docker push localhost:8787/registry.access.redhat.com/openstack-heat-docker-agents:latest
templates 子目录中创建一个主 docker.yaml 环境文件:
$ cp /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml ~/templates/.
编辑这个文件,修改 resource_registry 来使用绝对 URL:
resource_registry:
  OS::TripleO::ComputePostDeployment: /usr/share/openstack-tripleo-heat-templates/docker/compute-post.yaml
  OS::TripleO::NodeUserData: /usr/share/openstack-tripleo-heat-templates/docker/firstboot/install_docker_agents.yaml
parameter_defaults 中的 DockerNamespace 设置为您的注册表的 URL。另外,还需要把 DockerNamespaceIsRegistry 设置为 true。例如:
parameter_defaults:
  DockerNamespace: registry.example.com:8787/registry.access.redhat.com
  DockerNamespaceIsRegistry: true
现在,本地的注册表包括了所需的 docker 镜像,容器化的 Compute 现在被设置为使用这个注册表。

6.4.4. 在 Overcloud 部署中包括环境文件

在运行 Overcloud 创建命令时,在 openstack overcloud deploy 命令中包括容器化 Compute 节点的主环境文件(docker.yaml)和网络环境文件(docker-network.yaml)。例如:
$ openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/docker-network.yaml [OTHER OPTIONS] ...
容器化的 Compute 节点也可以在一个网络分离的 Overcloud 环境中正常工作。这也需要主环境文件和网络分离文件(docker-network-isolation.yaml)。在 第 6.2 节 “分离网络” 介绍的网络分离文件前添加这些文件。例如:
openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/docker-network-isolation.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml [OTHER OPTIONS] ...
director 创建了一个带有容器化 Compute 节点的 Overcloud。