4.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:
- redhat
- 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 还包括以下服务,这些服务没有默认启用:
| 服务 | 描述 |
|---|---|
|
|
包括此服务,将 data plane 节点配置为 Red Hat Ceph Storage 服务器的客户端。包括
|
|
| 包含此服务,以准备数据平面节点,以便在 HCI 配置中托管 Red Hat Ceph Storage。如需更多信息,请参阅 部署超融合基础架构环境。 |
|
| 包括此服务以在 data plane 节点上运行 Neutron DHCP 代理。 |
|
| 包括此服务以在 data plane 节点上运行 Neutron OVN 代理。需要此代理来为 Compute 节点上的硬件卸载端口提供 QoS。 |
|
| 包括此服务以在 data plane 节点上运行 Neutron SR-IOV NIC 代理。 |
|
| 包括此服务,用于收集 data plane 节点上的功耗指标。 重要 该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。 |
有关可用默认服务的详情,请参考 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
4.3.1. 创建并启用自定义服务 复制链接链接已复制到粘贴板!
使用 OpenStackDataPlaneService 自定义资源定义(CRD)创建自定义数据平面服务,以便在 data plane 节点上部署额外的或非默认软件配置或 Ansible 内容。
不要创建名称与默认服务相同的自定义服务。如果自定义服务名称与默认服务名称匹配,则默认服务值会覆盖 OpenStackDataPlaneNodeSet 协调期间的自定义服务值。
您可以使用 Ansible playbook 或通过直接在服务的 playbookContents 部分中包含自由格式 playbook 内容来指定服务的 Ansible 执行。
您不能在同一服务中包含 Ansible playbook 和 playbookContents。
流程
创建
OpenStackDataPlaneServiceCR,并将它保存到工作站上的 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。
为服务指定
edpmServiceType字段。您有不同的自定义服务,它们使用相同的 Ansible 内容来管理相同的数据平面服务,如ovn或nova。DataSources、TLS 证书和 CA 证书必须挂载到同一位置,以便 Ansible 内容可以找到它们并为自定义服务重复使用相同的路径。您可以使用edpmServiceType字段来创建此关联。该值是默认服务的名称,它使用与自定义服务相同的 Ansible 内容。例如,如果您有一个自定义服务,它使用来自edpm-ansible的edpm_ovnAnsible 内容,请将edpmServiceType设置为,它将与 OpenStack Operator 提供的默认 ovn 服务名称匹配。ovnapiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: custom-service spec: ... edpmServiceType: ovn注意字段名称中使用的 acroynm
edpm代表 "External Data Plane Management"。-
可选: 要使用自定义服务的额外 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: truedatasources.secretRef.optional: 可选字段,当设置为 "true" 时,将资源标记为可选,以便在不存在时不会抛出错误。为
OpenStackAnsibleEEpod 中的每个Secret和ConfigMapCR 创建一个挂载,其文件名与 resource 值匹配。挂载在/var/lib/openstack/configs/<service name> 下创建。然后,您可以使用 Ansible 内容来访问配置或机密数据。
可选:如果服务必须在
OpenStackDataPlaneDeploymentCR 中的所有节点集中运行,则将deployOnAllNodeSets字段设置为 true,即使该服务没有在部署中设置的每个节点中被列为服务:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: custom-service spec: playbookContents: | ... deployOnAllNodeSets: true创建自定义服务:
$ oc apply -f custom-service.yaml -n openstack验证是否已创建自定义服务:
$ oc get openstackdataplaneservice <custom_service_name> -o yaml -n openstack将自定义服务添加到节点设置的定义文件中的
services字段中。按照相对于其他服务执行的顺序添加服务名称。如果deployAllNodeSets字段设为true,则您只需要将该服务添加到部署中的一个节点集中。注意将自定义服务添加到节点设置定义中的服务列表中时,必须包含所有所需的服务,包括默认服务。如果您在服务列表中仅包含您的自定义服务,则这是部署的唯一服务。
4.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 playbookContents: |-
openstack-ansibleee-runner: 您的ansible-runner执行环境用来执行 Ansible 的容器镜像。
-