18.2. 容器组


Ansible Automation Platform 支持容器组,它们允许您在自动化控制器中执行作业,无论自动化控制器是作为单机安装、在虚拟环境中还是在容器中安装。容器组充当虚拟环境中的资源池。您可以创建实例组以指向 OpenShift 容器。这些是按需置备为 pod 的作业环境,该 pod 仅在 playbook 运行期间存在。这称为临时执行模型,并确保每个作业运行都有一个干净的环境。

在某些情况下,您可能希望将容器组设置为"始终开启",您可以通过创建实例来配置这些容器组。

注意

在自动化控制器 4.0 恢复到默认版本并删除旧的 pod 定义前,容器组从版本升级,清除迁移中的所有自定义 pod 定义。

容器组与执行环境的不同之处在于,执行环境是容器镜像,且不使用虚拟环境。如需更多信息,请参阅 执行环境

18.2.1. 创建容器组

ContainerGroup 是一种 InstanceGroup 类型,它具有一个关联的凭证,供您连接到 OpenShift 集群。

先决条件

  • 您可以启动的命名空间。每个集群都有一个"默认"命名空间,但您可以使用特定的命名空间。
  • 具有允许在此命名空间中启动和管理 pod 的角色的服务帐户。
  • 如果您在私有 registry 中使用执行环境,并在自动化控制器中有一个与其关联的容器 registry 凭证,则服务帐户还需要角色在命名空间中获取、创建和删除 secret。如果您不想为服务帐户授予这些角色,您可以预先创建 ImagePullSecrets,并在 ContainerGroup 的 pod 规格中指定它们。在这种情况下,执行环境不能关联容器 registry 凭证,或者自动化控制器会尝试为您在命名空间中创建 secret。
  • 与该服务帐户关联的令牌。OpenShift 或 Kubernetes 持有者令牌。
  • 与集群关联的 CA 证书。

以下流程解释了如何在 OpenShift 集群或 Kubernetes 中创建服务帐户,以便用于通过自动化控制器在容器组中运行作业。创建服务帐户后,其凭据以 OpenShift 或 Kubernetes API Bearer Token 凭据的形式提供给自动化控制器。

流程

  1. 要创建服务帐户,请下载并使用示例服务帐户 containergroup sa,并根据需要更改它以获取凭证:

    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: containergroup-service-account
      namespace: containergroup-namespace
    ---
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: role-containergroup-service-account
      namespace: containergroup-namespace
    rules:
    - apiGroups: [""]
      resources: ["pods"]
      verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
    - apiGroups: [""]
      resources: ["pods/log"]
      verbs: ["get"]
    - apiGroups: [""]
      resources: ["pods/attach"]
      verbs: ["get", "list", "watch", "create"]
    ---
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: role-containergroup-service-account-binding
      namespace: containergroup-namespace
    subjects:
    - kind: ServiceAccount
      name: containergroup-service-account
      namespace: containergroup-namespace
    roleRef:
      kind: Role
      name: role-containergroup-service-account
      apiGroup: rbac.authorization.k8s.io
  2. 应用 containergroup-sa.yml 的配置:

    oc apply -f containergroup-sa.yml
  3. 获取与服务帐户关联的 secret 名称:

    export SA_SECRET=$(oc get sa containergroup-service-account -o json | jq '.secrets[0].name' | tr -d '"')
  4. 从 secret 获取令牌:

    oc get secret $(echo ${SA_SECRET}) -o json | jq '.data.token' | xargs | base64 --decode > containergroup-sa.token
  5. 获取 CA 证书:

    oc get secret $SA_SECRET -o json | jq '.data["ca.crt"]' | xargs | base64 --decode > containergroup-ca.crt
  6. 使用 containergroup-sa.tokencontainergroup-ca.crt 的内容,为容器组所需的 OpenShift 或 Kubernetes API Bearer Token 提供信息。

要创建容器组,请创建一个 OpenShift 或 Kubernetes API Bearer Token 凭据,以用于您的容器组。如需更多信息,请参阅创建新凭证

流程

  1. 在导航面板中,选择 Automation Execution Infrastructure Instance Groups
  2. 单击 Create group,再选择 Create container group
  3. 输入新容器组的名称,并选择之前创建的凭证将其与容器组关联。
  4. 单击 Create container group

18.2.2. 自定义 pod 规格

Ansible Automation Platform 提供了一个简单的默认 pod 规格,但您可以提供一个自定义 YAML 或 JSON 文档来覆盖默认的 pod 规格。此字段使用任何自定义字段,如 ImagePullSecrets,它可以"序列化"为有效的 pod JSON 或 YAML。完整的选项列表可在 OpenShift 文档的 Pods 和 Services 部分找到。

流程

  1. 在导航面板中,选择 Automation Execution Infrastructure Instance Groups
  2. 单击 Create group,再选择 Create container group
  3. 检查 Customize pod spec 的选项。
  4. Pod spec override 字段中输入自定义 Kubernetes 或 OpenShift Pod 规格。

    自定义 pod 规格
  5. 单击 Create container group
注意

作业启动时的镜像由与作业关联的执行环境决定。如果您将容器 registry 凭证与执行环境关联,则自动化控制器会尝试生成 ImagePullSecret 来拉取镜像。如果您不希望授予服务帐户管理 secret 的权限,您必须预先创建 ImagePullSecret 并在 pod 规格中指定它,并从使用的执行环境省略任何凭证。

如需更多信息,请参阅 Red Hat Container Registry 身份验证 的 Allowing Pods to reference Images from other Secured Registries 部分。

成功创建容器组后,新创建的容器组的 Details 选项卡将保留,供您查看和编辑容器组信息。如果您点 Instance Groups 列表视图中的 Edit 图标,则打开这个菜单。

您还可以编辑 实例, 并查看与此实例组关联的 作业

实例组成功创建

对容器组和实例组进行相应的标记。

18.2.3. 验证容器组功能

验证容器的部署和终止:

流程

  1. 通过在 Instance groups 字段中填充容器组的名称来创建 mock 清单,并将容器组与其关联。如需更多信息,请参阅 添加新清单

    创建测试清单
  2. 使用以下变量在清单中创建 localhost 主机:

    {'ansible_host': '127.0.0.1', 'ansible_connection': 'local'}
  3. 使用 pingsetup 模块对 localhost 启动一个临时作业。即使需要 Machine Credential 字段,但为这个测试选择哪个字段无关紧要:

    启动临时 localhost
    启动临时 localhost 2

您可以使用其中一个临时作业在 Jobs 详情视图中看到容器已被成功访问。

如果您有 OpenShift UI,您可以在部署和结束时看到 pod 出现和消失。您还可以使用 CLI 在命名空间中执行 get pod 操作,以实时观察这些相同事件。

18.2.4. 查看容器组作业

当您运行与容器组关联的作业时,您可以在 Details 选项卡中看到该作业的详情。您还可以查看其关联的容器组以及启动的执行环境。

流程

  1. 在导航面板中,选择 Automation Execution Jobs
  2. 点击您要查看容器组作业的作业。
  3. Details 选项卡。
实例组作业详情

18.2.5. Kubernetes API 故障状况

在运行容器组和 Kubernetes API 时,Kubernetes API 会响应超过资源配额,自动化控制器会将作业保持为待处理状态。其他失败会导致 Error Details 字段的回溯显示失败原因,如下例所示:

Error creating pod: pods is forbidden: User "system: serviceaccount: aap:example" cannot create resource "pods" in API group "" in the namespace "aap"

18.2.6. 容器容量限制

容器的容量限制和配额由 Kubernetes API 中的对象定义:

  • 要设置一个指定命名空间中的所有 pod 的限制,请使用 LimitRange 对象。如需更多信息,请参阅 OpenShift 文档中的 quota 和 Limit Ranges 部分。
  • 要直接在由自动化控制器启动的 pod 定义上设置限制,请参阅 OpenShift 文档中的 自定义 pod 规格Compute Resources 部分。
注意

容器组不使用普通节点使用的容量算法。您需要在作业模板级别上设置 fork 数量。如果在自动化控制器中配置 fork,则该设置会随同传递给容器。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.