搜索

2.3. 数据平面服务

download PDF

data plane 服务是一个 Ansible 执行,用于管理在 data plane 节点上部署的软件部署的安装、配置和执行。每个服务都是 OpenStackDataPlaneService 自定义资源定义(CRD)的资源实例,它将组合了来自 ConfigMapSecret CR 的 Ansible 内容和配置数据。您可以使用 Ansible play 内容指定服务的 Ansible 执行,这可以是来自 edpm-ansible 或任何 Ansible play 内容的 Ansible playbook。ConfigMapSecret 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描述

ceph-client

包括此服务,将 data plane 节点配置为 Red Hat Ceph Storage 服务器的客户端。包括 install-osconfigure-os 服务。OpenStackDataPlaneNodeSet CR 必须包括以下配置来访问 Red Hat Ceph Storage secret:

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

ceph-hci-pre

包含此服务,以准备数据平面节点,以便在 HCI 配置中托管 Red Hat Ceph Storage。如需更多信息,请参阅 部署超融合基础架构环境

neutron-dhcp

包括此服务以在 data plane 节点上运行 Neutron DHCP 代理。

neutron-metadata

包括此服务,以便在 data plane 节点上运行 Neutron OVN Metadata 代理。需要此代理来为 Compute 节点提供元数据服务。

neutron-ovn

包括此服务以在 data plane 节点上运行 Neutron OVN 代理。需要此代理来为 Compute 节点上的硬件卸载端口提供 QoS。

neutron-sriov

包括此服务以在 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 playbookplaybookContents

流程

  1. 创建 OpenStackDataPlaneService CR,并将它保存到工作站上的 YAML 文件中,如 custom-service.yaml

    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneService
    metadata:
      name: custom-service
    spec:
  2. 通过引用 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

  3. 可选: 要使用自定义服务的额外 Ansible 内容覆盖 ansible-runner 执行环境使用的默认容器镜像,构建并包含自定义 ansible-runner 镜像。如需更多信息,请参阅 构建自定义 ansible-runner 镜像
  4. 可选:指定要用于将 secret 或配置传递给 OpenStackAnsibleEE 作业的 SecretConfigMap 资源的名称:

    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 中的每个 SecretConfigMap CR 创建一个挂载,其文件名与 resource 值匹配。挂载在 /var/lib/openstack/configs/<service name> 下创建。然后,您可以使用 Ansible 内容来访问配置或机密数据。

  5. 可选:如果服务必须在 OpenStackDataPlaneDeployment CR 中的所有节点集中运行,则将 deployOnAllNodeSets 字段设置为 true,即使该服务没有在部署中设置的每个节点中被列为服务:

    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneService
    metadata:
      name: custom-service
    spec:
    
      playbookContents: |
      ...
      deployOnAllNodeSets: true
  6. 可选:指定服务的 edpmServiceType 字段。不同的自定义服务可能会使用相同的 Ansible 内容来管理相同的数据平面服务,如 ovnnova。您必须在同一位置挂载 DataSources、TLS 证书和 CA 证书,以便 Ansible 内容可在使用自定义服务时找到它们。您可以使用 edpmServiceType 字段来创建此关联。该值是默认服务的名称,它使用与自定义服务相同的 Ansible 内容。例如,使用来自 edpm-ansibleedpm_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"。

  7. 创建自定义服务:

    $ oc apply -f custom-service.yaml -n openstack
  8. 验证是否已创建自定义服务:

    $ oc get openstackdataplaneservice <custom_service_name> -o yaml -n openstack
  9. 将自定义服务添加到节点设置的定义文件中的 services 字段中。按照相对于其他服务执行的顺序添加服务名称。如果 deployAllNodeSets 字段设为 true,则您只需要将该服务添加到部署中的一个节点集中。

    注意

    将自定义服务添加到节点设置定义中的服务列表中时,必须包含所有所需的服务,包括默认服务。如果您在服务列表中仅包含您的自定义服务,则这是部署的唯一服务。

2.3.2. 构建自定义 ansible-runner 镜像

当自定义服务需要额外的 Ansible 内容时,您可以使用自己的自定义镜像覆盖 ansible-runner 执行环境使用的默认容器镜像。

流程

  1. 创建一个将自定义内容添加到默认镜像的 Containerfile

    FROM quay.io/openstack-k8s-operators/openstack-ansibleee-runner:latest
    COPY my_custom_role /usr/share/ansible/roles/my_custom_role
  2. 构建镜像并将其推送到容器 registry:

    $ podman build -t quay.io/example_user/my_custom_image:latest .
    $ podman push quay.io/example_user/my_custom_role:latest
  3. 将新容器镜像指定为 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 的容器镜像。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.