4.4. 数据平面服务
data plane 服务是一个 Ansible 执行,用于管理 data plane 节点上的软件部署。每个服务都是 OpenStackDataPlaneService 自定义资源(CR),它将 Ansible 内容与 ConfigMap 和 Secret CR 中的配置数据合并。
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 节点上的功耗指标。 重要 技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。 有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。 |
您可以为 OpenStackDataPlaneNodeSet 资源启用和禁用服务。
不要更改默认服务部署的顺序。
您可以使用 OpenStackDataPlaneService CRD 创建可在 data plane 节点上部署的自定义服务。您可以将自定义服务添加到必须执行该服务的默认服务列表中。
您可以通过查看资源的 YAML 表示来查看服务的详情:
$ oc get openstackdataplaneservice configure-network -o yaml -n openstack
4.4.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 或
playbookContents字段中包含 Ansible play 来指定要创建自定义服务的 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,则您只需要将该服务添加到部署中的一个节点集中。注意将自定义服务添加到节点设置定义中的服务列表中时,必须包含所有所需的服务,包括默认服务。如果您在服务列表中仅包含您的自定义服务,则这是部署的唯一服务。