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
文件包括了一个名为 NovaImage
的 parameter
,它会在配置 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。