4.14. 控制 OpenShift Container Platform 节点上的代理 pod 放置


您可以使用节点选择器、容限或关联性和反关联性规则来控制 OpenShift Container Platform 节点上的 AMQ Broker pod 放置。

节点选择器
节点选择器允许您将代理 pod 调度到特定的节点上。
容限(Tolerations)
通过容限,如果容限与为节点配置的污点匹配,则代理 pod 能够调度到节点上。如果没有匹配的 pod 容限,污点允许节点拒绝接受 pod。
关联性/Anti-affinity
节点关联性规则根据节点标签控制 pod 可以调度到哪些节点。pod 关联性和反关联性规则根据节点上已在运行的 pod 来控制 pod 可以调度到哪些节点。

4.14.1. 使用节点选择器将 pod 放置到特定节点

节点选择器指定一个键值对,要求将代理 pod 调度到节点标签中具有匹配键值对的节点。

以下示例演示了如何配置节点选择器,将代理 pod 调度到特定的节点上。

先决条件

流程

  1. 根据主代理 CRD 创建自定义资源(CR)实例。

    1. 使用 OpenShift 命令行界面:

      1. 以具有特权在项目中为代理部署 CR 的用户身份登录 OpenShift。

        oc login -u <user> -p <password> --server=<host:port>
      2. 打开名为 broker_activemqartemis_cr.yaml 的示例 CR 文件,该文件包含在您下载和提取的 Operator 安装存档的 deploy/crs 目录中。
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有特权在项目中为代理部署 CR 的用户登录到控制台。
      2. 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,点 Administration Custom Resource Definitions
      3. 单击 ActiveMQArtemis CRD。
      4. 实例 选项卡。
      5. 单击 Create ActiveMQArtemis

        在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。

  2. 在 CR 的 deploymentPlan 部分,添加一个 nodeSelector 部分并添加您要匹配的节点标签,以便为 pod 选择一个节点。例如:

    spec:
        deploymentPlan:
          nodeSelector:
            app: broker1

    在本例中,代理 pod 调度到具有 app: broker1 标签的节点。

  3. 部署 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 切换到您要在其中创建代理部署的项目。

        $ oc project <project_name>
      3. 创建 CR 实例。

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 配置完 CR 后,点 Create

其他资源

如需有关 OpenShift Container Platform 中的节点选择器的更多信息,请参阅 OpenShift Container Platform 文档中的 使用节点选择器将 pod 放置到特定的节点上

4.14.2. 使用容限控制 pod 放置

污点和容限控制 pod 是否可以调度到特定的节点上。通过使用污点,节点可以拒绝调度 pod,除非 pod 具有匹配的容限。您可以使用污点从节点中排除 pod,以便为特定 pod 保留节点,如代理 pod,它们具有匹配的容限。

具有匹配的容限允许将代理 pod 调度到某个节点上,但不保证 pod 调度到该节点上。为确保代理 pod 调度到配置了污点的节点上,您可以配置关联性规则。如需更多信息,请参阅 第 4.14.3 节 “使用关联性和反关联性规则控制 pod 放置”

以下示例演示了如何配置容限以匹配节点上配置的污点。

先决条件

  • 您应该熟悉如何使用 CR 实例创建基本代理部署。请参阅 第 3.4.1 节 “部署基本代理实例”
  • 将污点应用到您要为调度代理 pod 保留的节点。污点由 key、value 和 effect 组成。污点效果决定:

    • 节点上的现有 pod 会被驱除
    • 现有 pod 允许保留在节点上,但除非有匹配的容限,否则无法调度新的 pod
    • 如果需要,可以将新 pod 调度到该节点上,但首选不将新 pod 调度到该节点上。

如需有关应用污点的更多信息,请参阅 OpenShift Container Platform 文档中的使用节点污点控制 pod 放置

流程

  1. 根据主代理 CRD 创建自定义资源(CR)实例。

    1. 使用 OpenShift 命令行界面:

      1. 以具有特权在项目中为代理部署 CR 的用户身份登录 OpenShift。

        oc login -u <user> -p <password> --server=<host:port>
      2. 打开名为 broker_activemqartemis_cr.yaml 的示例 CR 文件,该文件包含在您下载和提取的 Operator 安装存档的 deploy/crs 目录中。
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有特权在项目中为代理部署 CR 的用户登录到控制台。
      2. 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,点 Administration Custom Resource Definitions
      3. 单击 ActiveMQArtemis CRD。
      4. 实例 选项卡。
      5. 单击 Create ActiveMQArtemis

        在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。

  2. 在 CR 的 deploymentPlan 部分中,添加一个 tolerations 部分。在 tolerations 部分中,为您要匹配的节点污点添加容限。例如:

    spec:
         deploymentPlan:
            tolerations:
            - key: "app"
              value: "amq-broker"
              effect: "NoSchedule"

    在本例中,容限与节点污点匹配 app=amq-broker:NoSchedule,因此 pod 可以调度到配置了此污点的节点。

注意

为确保正确调度代理 pod,请不要在 CR 的 tolerations 部分中指定 tolerationsSeconds 属性。

  1. 部署 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 切换到您要在其中创建代理部署的项目。

        $ oc project <project_name>
      3. 创建 CR 实例。

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 配置完 CR 后,点 Create

其他资源

如需有关 OpenShift Container Platform 中污点和容限的更多信息,请参阅 OpenShift Container Platform 文档中的使用节点污点控制 pod 放置

4.14.3. 使用关联性和反关联性规则控制 pod 放置

您可以使用节点关联性、pod 关联性或 pod 反关联性规则来控制 pod 放置。节点关联性允许 pod 指定与一组目标节点的关联性。通过 pod 关联性和反关联性,您可以指定 pod 如何或无法调度到相对于节点上已在运行的其他 pod 的规则。

4.14.3.1. 使用节点关联性规则控制 pod 放置

节点关联性允许代理 pod 指定与可放置它的一组节点的关联性。代理 pod 可以调度到具有与您为 pod 创建的关联性规则相同的标签的任何节点上。

以下示例演示了如何使用节点关联性规则配置代理来控制 pod 放置。

先决条件

  • 您应该熟悉如何使用 CR 实例创建基本代理部署。请参阅 第 3.4.1 节 “部署基本代理实例”
  • 为 OpenShift Container Platform 集群中的节点分配一个通用标签,它可以调度代理 pod,如 zone: emea

流程

  1. 根据主代理 CRD 创建自定义资源(CR)实例。

    1. 使用 OpenShift 命令行界面:

      1. 以具有特权在项目中为代理部署 CR 的用户身份登录 OpenShift。

        oc login -u <user> -p <password> --server=<host:port>
      2. 打开名为 broker_activemqartemis_cr.yaml 的示例 CR 文件,该文件包含在您下载和提取的 Operator 安装存档的 deploy/crs 目录中。
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有特权在项目中为代理部署 CR 的用户登录到控制台。
      2. 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,点 Administration Custom Resource Definitions
      3. 单击 ActiveMQArtemis CRD。
      4. 实例 选项卡。
      5. 单击 Create ActiveMQArtemis

        在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。

  2. 在 CR 的 deploymentPlan 部分中,添加以下部分: affinitynodeAffinityrequiredDuringSchedulingIgnoredDuringExecutionnodeSelectorTerms。在 nodeSelectorTerms 部分,添加 - matchExpressions 参数并指定要匹配的节点标签的键值字符串。例如:

    spec:
        deploymentPlan:
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: zone
                    operator: In
                    values:
                    - emea

    在本例中,关联性规则允许将 pod 调度到具有 zone 键标签的任何节点上,值为 emea

  3. 部署 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 切换到您要在其中创建代理部署的项目。

        $ oc project <project_name>
      3. 创建 CR 实例。

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 配置完 CR 后,点 Create

其他资源

如需有关 OpenShift Container Platform 中的关联性规则的更多信息,请参阅 OpenShift Container Platform 文档中的使用节点关联性规则控制节点上的 pod 放置

4.14.3.2. 使用反关联性规则相对于其他 pod 放置 pod

通过反关联性规则,您可以根据已在该节点上运行的 pod 标签限制代理 pod 可以调度到哪些节点。

使用反关联性规则的用例是确保集群中的多个代理 pod 不会在同一节点上调度,这会产生单点故障。如果您不控制 pod 的放置,集群中的 2 个或更多代理 pod 可以调度到同一个节点上。

以下示例演示了如何配置反关联性规则,以防止将集群中的 2 个代理 pod 调度到同一节点上。

先决条件

流程

  1. 根据主代理 CRD,为集群中的第一个代理创建一个 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 以具有特权在项目中为代理部署 CR 的用户身份登录 OpenShift。

        oc login -u <user> -p <password> --server=<host:port>
      2. 打开名为 broker_activemqartemis_cr.yaml 的示例 CR 文件,该文件包含在您下载和提取的 Operator 安装存档的 deploy/crs 目录中。
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有特权在项目中为代理部署 CR 的用户登录到控制台。
      2. 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,点 Administration Custom Resource Definitions
      3. 单击 ActiveMQArtemis CRD。
      4. 实例 选项卡。
      5. 单击 Create ActiveMQArtemis

        在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。

  2. 在 CR 的 deploymentPlan 部分中,添加一个 labels 部分。为第一个代理 pod 创建标识标签,以便您可以在第二个代理 pod 上创建反关联性规则,以防止两个 pod 调度到同一节点上。例如:

    spec:
        deploymentPlan:
          labels:
            name: broker1
  3. 部署 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 切换到您要在其中创建代理部署的项目。

        $ oc project <project_name>
      3. 创建 CR 实例。

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 配置完 CR 后,点 Create
  4. 根据主代理 CRD,为集群中的第二个代理创建一个 CR 实例。

    1. 在 CR 的 deploymentPlan 部分中,添加以下部分: affinitypodAntiAffinityrequiredDuringSchedulingIgnoredDuringExecutionlabelSelector。在 labelSelector 部分中,添加 - matchExpressions 参数并指定要匹配的代理 pod 标签的键值字符串,因此此 pod 不会调度到同一节点上。

      spec:
          deploymentPlan:
            affinity:
              podAntiAffinity:
                requiredDuringSchedulingIgnoredDuringExecution:
                  labelSelector:
                    - matchExpressions:
                    - key: name
                      operator: In
                      values:
                        - broker1
                  topologyKey: topology.kubernetes.io/zone

      在本例中,pod 反关联性规则可防止将 pod 放置到与具有键键和 broker1 标签的 pod 相同的节点上,这是分配给集群中第一个代理的标签。

  5. 部署 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 切换到您要在其中创建代理部署的项目。

        $ oc project <project_name>
      3. 创建 CR 实例。

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 配置完 CR 后,点 Create

其他资源

如需有关 OpenShift Container Platform 中的关联性规则的更多信息,请参阅 OpenShift Container Platform 文档中的使用节点关联性规则控制节点上的 pod 放置

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.