2.3. 数据平面服务
data plane 服务是一个 Ansible 执行,用于管理在 data plane 节点上部署的软件部署的安装、配置和执行。每个服务都是 OpenStackDataPlaneService
自定义资源定义(CRD)的资源实例,它将组合了来自 ConfigMap
和 Secret
CR 的 Ansible 内容和配置数据。您可以使用 Ansible play 内容指定服务的 Ansible 执行,这可以是来自 edpm-ansible
或任何 Ansible play 内容的 Ansible playbook。ConfigMap
和 Secret
CR 可以包含需要由 Ansible 内容消耗的任何配置数据。
OpenStack Operator 提供了在 data plane 节点上默认部署的核心服务。如果省略 OpenStackDataPlaneNodeSet
规格中的 services
字段,则按以下顺序应用以下服务:
services: - bootstrap - download-cache - configure-network - validate-network - install-os - configure-os - ssh-known-hosts - run-os - reboot-os - install-certs - ovn - neutron-metadata - libvirt - nova - telemetry
OpenStack Operator 还包括以下服务,这些服务没有默认启用:
service | 描述 |
---|---|
|
包括此服务,将 data plane 节点配置为 Red Hat Ceph Storage 服务器的客户端。包括 apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet spec: ... nodeTemplate: extraMounts: - extraVolType: Ceph volumes: - name: ceph secret: secretName: ceph-conf-files mounts: - name: ceph mountPath: "/etc/ceph" readOnly: true |
| 包含此服务,以准备数据平面节点,以便在 HCI 配置中托管 Red Hat Ceph Storage。如需更多信息,请参阅 部署超融合基础架构环境。 |
| 包括此服务以在 data plane 节点上运行 Neutron DHCP 代理。 |
| 包括此服务,以便在 data plane 节点上运行 Neutron OVN Metadata 代理。需要此代理来为 Compute 节点提供元数据服务。 |
| 包括此服务以在 data plane 节点上运行 Neutron OVN 代理。需要此代理来为 Compute 节点上的硬件卸载端口提供 QoS。 |
| 包括此服务以在 data plane 节点上运行 Neutron SR-IOV NIC 代理。 |
有关可用默认服务的详情,请参考 https://github.com/openstack-k8s-operators/openstack-operator/tree/main/config/services。
您可以为 OpenStackDataPlaneNodeSet
资源启用和禁用服务。
不要更改默认服务部署的顺序。
您可以使用 OpenStackDataPlaneService
CRD 创建可在 data plane 节点上部署的自定义服务。您可以将自定义服务添加到必须执行该服务的默认服务列表中。如需更多信息,请参阅创建和启用自定义服务。
您可以通过查看资源的 YAML 表示来查看服务的详情:
$ oc get openstackdataplaneservice configure-network -o yaml -n openstack
2.3.1. 创建并启用自定义服务
您可以使用 OpenStackDataPlaneService
CRD 创建自定义服务,以便在 data plane 节点上部署。
不要创建名称与默认服务相同的自定义服务。如果自定义服务名称与默认服务名称匹配,则默认服务值会覆盖 OpenStackDataPlaneNodeSet
协调期间的自定义服务值。
您可以使用 Ansible playbook 或通过直接在服务的 playbookContents
部分中包含自由格式 playbook 内容来指定服务的 Ansible 执行。
您不能在同一服务中包含 Ansible playbook
和 playbookContents
。
流程
创建
OpenStackDataPlaneService
CR,并将它保存到工作站上的 YAML 文件中,如custom-service.yaml
:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: custom-service spec:
通过引用 Ansible playbook 或将 Ansible play 包含在
playbookContents
字段中来指定用于创建自定义服务的 Ansible 命令:指定要使用的 Ansible playbook:
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: custom-service spec: playbook: osp.edpm.configure_os
将
playbookContents
字段中的 Ansible play 指定为使用 Ansible playbook 语法的字符串:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: custom-service spec: playbookContents: | - hosts: all tasks: - name: Hello World! shell: "echo Hello World!" register: output - name: Show output debug: msg: "{{ output.stdout }}" - name: Hello World role import_role: hello_world
有关如何创建 Ansible playbook 的详情,请参考 创建 playbook。
-
可选: 要使用自定义服务的额外 Ansible 内容覆盖
ansible-runner
执行环境使用的默认容器镜像,构建并包含自定义ansible-runner
镜像。如需更多信息,请参阅 构建自定义ansible-runner
镜像。 可选:指定要用于将 secret 或配置传递给
OpenStackAnsibleEE
作业的Secret
或ConfigMap
资源的名称:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: custom-service spec: ... playbookContents: | ... dataSources: - configMapRef: name: hello-world-cm-0 - secretRef: name: hello-world-secret-0 - secretRef: name: hello-world-secret-1 optional: true 1
- 1
- 可选:将
可选字段
设置为 "true",将资源标记为可选,以便在不存在时不会抛出错误。
为
OpenStackAnsibleEE
pod 中的每个Secret
和ConfigMap
CR 创建一个挂载,其文件名与 resource 值匹配。挂载在/var/lib/openstack/configs/<service name> 下创建
。然后,您可以使用 Ansible 内容来访问配置或机密数据。可选:如果服务必须在
OpenStackDataPlaneDeployment
CR 中的所有节点集中运行,则将deployOnAllNodeSets
字段设置为 true,即使该服务没有在部署中设置的每个节点中被列为服务:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: custom-service spec: playbookContents: | ... deployOnAllNodeSets: true
可选:指定服务的
edpmServiceType
字段。不同的自定义服务可能会使用相同的 Ansible 内容来管理相同的数据平面服务,如ovn
或nova
。您必须在同一位置挂载 DataSources、TLS 证书和 CA 证书,以便 Ansible 内容可在使用自定义服务时找到它们。您可以使用edpmServiceType
字段来创建此关联。该值是默认服务的名称,它使用与自定义服务相同的 Ansible 内容。例如,使用来自edpm-ansible
的edpm_ovn
Ansible 内容的自定义服务会将edpmServiceType
设置为ovn
,它将与 OpenStack Operator 提供的默认ovn
服务名称匹配。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: custom-service spec: ... edpmServiceType: ovn
注意fieldnames 中使用的 acroynm
edpm
代表 "External Data Plane Management"。创建自定义服务:
$ oc apply -f custom-service.yaml -n openstack
验证是否已创建自定义服务:
$ oc get openstackdataplaneservice <custom_service_name> -o yaml -n openstack
将自定义服务添加到节点设置的定义文件中的
services
字段中。按照相对于其他服务执行的顺序添加服务名称。如果deployAllNodeSets
字段设为true
,则您只需要将该服务添加到部署中的一个节点集中。注意将自定义服务添加到节点设置定义中的服务列表中时,必须包含所有所需的服务,包括默认服务。如果您在服务列表中仅包含您的自定义服务,则这是部署的唯一服务。
2.3.2. 构建自定义 ansible-runner
镜像
当自定义服务需要额外的 Ansible 内容时,您可以使用自己的自定义镜像覆盖 ansible-runner
执行环境使用的默认容器镜像。
流程
创建一个将自定义内容添加到默认镜像的
Containerfile
:FROM quay.io/openstack-k8s-operators/openstack-ansibleee-runner:latest COPY my_custom_role /usr/share/ansible/roles/my_custom_role
构建镜像并将其推送到容器 registry:
$ podman build -t quay.io/example_user/my_custom_image:latest . $ podman push quay.io/example_user/my_custom_role:latest
将新容器镜像指定为
ansible-runner
执行环境必须用来添加自定义服务所需的额外 Ansible 内容的镜像,如 Ansible 角色或模块:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: custom-service spec: label: dataplane-deployment-custom-service openStackAnsibleEERunnerImage: quay.io/openstack-k8s-operators/openstack-ansibleee-runner:latest 1 playbookContents: |
- 1
ansible-runner
执行环境用来执行 Ansible 的容器镜像。