4.17. 控制 OpenShift Container Platform 节点上的代理 pod 放置
您可以使用节点选择器、容限或关联性和反关联性规则来控制 OpenShift Container Platform 节点上的 AMQ Broker pod 放置。
- 节点选择器
- 节点选择器允许您将代理 pod 调度到特定的节点上。
- 容限(Tolerations)
- 如果容限与为节点配置的污点匹配,则容限使代理 pod 能够调度到节点上。如果没有匹配的 pod 容限,污点允许节点拒绝接受 pod。
- 关联性/关联性
- 节点关联性规则根据节点标签控制 pod 可以调度到哪些节点。Pod 关联性和反关联性规则根据已在该节点上运行的 pod 控制 pod 可以调度到哪些节点。
4.17.1. 使用节点选择器将 pod 放置到特定节点 复制链接链接已复制到粘贴板!
节点选择器指定一个键值对,它要求将代理 pod 调度到在节点标签中匹配键值对的节点上。
以下示例演示了如何配置节点选择器来在特定节点上调度代理 pod。
先决条件
- 您应该熟悉如何使用 CR 实例创建基本代理部署。请参阅 第 3.4.1 节 “部署基本代理实例”。
- 为要在其上调度代理 pod 的 OpenShift Container Platform 节点添加标签。有关添加节点标签的更多信息,请参阅 OpenShift Container Platform 文档中的 使用节点选择器来控制 pod 放置。
流程
根据主代理 CRD 创建自定义资源(CR)实例。
使用 OpenShift 命令行界面:
以具有特权的用户身份登录 OpenShift,以便在代理部署的项目中部署 CR。
oc login -u <user> -p <password> --server=<host:port>
oc login -u <user> -p <password> --server=<host:port>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开一个名为
broker_activemqartemis_cr.yaml
的示例 CR 文件,该文件包含在您下载和提取的 Operator 安装的deploy/crs
目录中。
使用 OpenShift Container Platform Web 控制台:
- 以具有特权的用户身份登录控制台,以便在代理部署的项目中部署 CR。
-
根据主代理 CRD 启动新的 CR 实例。在左侧窗格中,单击
。 - 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
单击 Create ActiveMQArtemis。
在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。
在 CR 的
deploymentPlan
部分中,添加一个nodeSelector
部分,并添加您要匹配的节点标签,以便为 pod 选择节点。例如:spec: deploymentPlan: nodeSelector: app: broker1
spec: deploymentPlan: nodeSelector: app: broker1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,代理 pod 调度到具有
app: broker1
标签的节点上。部署 CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
切换到您要在其中创建代理部署的项目。
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 CR 实例。
oc create -f <path/to/custom_resource_instance>.yaml
$ oc create -f <path/to/custom_resource_instance>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 OpenShift Web 控制台:
- 配置完 CR 后,点 Create。
其他资源
如需有关 OpenShift Container Platform 中节点选择器的更多信息,请参阅 OpenShift Container Platform 文档中的 使用节点选择器将 pod 放置到特定的节点上。
4.17.2. 使用容限控制 pod 放置 复制链接链接已复制到粘贴板!
污点和容限控制 pod 是否可以调度到特定的节点上。通过使用污点(taint),节点可以拒绝调度 pod,除非 pod 具有匹配的容限。您可以使用污点从节点中排除 pod,以便节点为特定 pod 保留,如代理 pod,具有匹配的容限。
具有匹配的容限允许将代理 pod 调度到节点上,但不保证 pod 调度到该节点上。为确保代理 pod 调度到配置了污点的节点上,您可以配置关联性规则。如需更多信息,请参阅 第 4.17.3 节 “使用关联性和反关联性规则控制 pod 放置”。
以下示例演示了如何配置容限以匹配节点上配置的污点。
先决条件
- 您应该熟悉如何使用 CR 实例创建基本代理部署。请参阅 第 3.4.1 节 “部署基本代理实例”。
将污点应用到您要为调度代理 pod 保留的节点。污点由 key、value 和 effect 组成。污点效果决定是否:
- 节点上的现有 pod 会被驱除
- 允许将现有 pod 保留在节点上,但无法调度新 pod,除非有匹配的容限(toleration)
- 如果需要,可以将新 pod 调度到节点上,但最好不要在节点上调度新 pod。
如需有关应用污点的更多信息,请参阅 OpenShift Container Platform 文档中的使用节点污点控制 pod 放置。
流程
根据主代理 CRD 创建自定义资源(CR)实例。
使用 OpenShift 命令行界面:
以具有特权的用户身份登录 OpenShift,以便在代理部署的项目中部署 CR。
oc login -u <user> -p <password> --server=<host:port>
oc login -u <user> -p <password> --server=<host:port>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开一个名为
broker_activemqartemis_cr.yaml
的示例 CR 文件,该文件包含在您下载和提取的 Operator 安装的deploy/crs
目录中。
使用 OpenShift Container Platform Web 控制台:
- 以具有特权的用户身份登录控制台,以便在代理部署的项目中部署 CR。
-
根据主代理 CRD 启动新的 CR 实例。在左侧窗格中,单击
。 - 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
单击 Create ActiveMQArtemis。
在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。
在 CR 的
deploymentPlan
部分中,添加一个tolerations
部分。在tolerations
部分中,为您要匹配的节点污点添加容限。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,容限与
app=amq-broker:NoSchedule
的节点污点匹配,因此可将 pod 调度到配置了此污点的节点。
为确保代理 pod 被正确调度,请不要在 CR 的 tolerations
部分指定 tolerationsSeconds
属性。
部署 CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
切换到您要在其中创建代理部署的项目。
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 CR 实例。
oc create -f <path/to/custom_resource_instance>.yaml
$ oc create -f <path/to/custom_resource_instance>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 OpenShift Web 控制台:
- 配置完 CR 后,点 Create。
其他资源
如需有关 OpenShift Container Platform 中污点和容限的更多信息,请参阅 OpenShift Container Platform 文档中的使用节点污点控制 pod 放置。
4.17.3. 使用关联性和反关联性规则控制 pod 放置 复制链接链接已复制到粘贴板!
您可以使用节点关联性、pod 关联性或 pod 反关联性规则来控制 pod 放置。节点关联性允许 pod 指定与一组目标节点的关联性。通过 pod 关联性和反关联性,您可以指定有关 pod 如何能够或无法相对于节点上运行的其他 pod 的规则。
4.17.3.1. 使用节点关联性规则控制 pod 放置 复制链接链接已复制到粘贴板!
节点关联性允许代理 pod 指定与可以放置它的一组节点的关联性。代理 pod 可以调度到具有与您为 pod 创建的关联性规则相同的键值对的任何节点上。
以下示例演示了如何使用节点关联性规则将代理配置为控制 pod 放置。
先决条件
- 您应该熟悉如何使用 CR 实例创建基本代理部署。请参阅 第 3.4.1 节 “部署基本代理实例”。
-
为 OpenShift Container Platform 集群中的节点分配一个通用标签,它可以调度代理 pod,如
zone: emea
。
流程
根据主代理 CRD 创建自定义资源(CR)实例。
使用 OpenShift 命令行界面:
以具有特权的用户身份登录 OpenShift,以便在代理部署的项目中部署 CR。
oc login -u <user> -p <password> --server=<host:port>
oc login -u <user> -p <password> --server=<host:port>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开一个名为
broker_activemqartemis_cr.yaml
的示例 CR 文件,该文件包含在您下载和提取的 Operator 安装的deploy/crs
目录中。
使用 OpenShift Container Platform Web 控制台:
- 以具有特权的用户身份登录控制台,以便在代理部署的项目中部署 CR。
-
根据主代理 CRD 启动新的 CR 实例。在左侧窗格中,单击
。 - 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
单击 Create ActiveMQArtemis。
在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。
在 CR 的
deploymentPlan
部分中,添加以下部分:affinity
,nodeAffinity
,requiredDuringSchedulingIgnoredDuringExecution
, 和nodeSelectorTerms
。在nodeSelectorTerms
部分中,添加- matchExpressions
参数,并指定要匹配的节点标签的键值字符串。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,关联性规则允许将 pod 调度到具有键为
zone
且值为emea
的任何节点上。部署 CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
切换到您要在其中创建代理部署的项目。
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 CR 实例。
oc create -f <path/to/custom_resource_instance>.yaml
$ oc create -f <path/to/custom_resource_instance>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 OpenShift Web 控制台:
- 配置完 CR 后,点 Create。
其他资源
如需有关 OpenShift Container Platform 中关联性规则的更多信息,请参阅 OpenShift Container Platform 文档中的使用节点关联性规则控制节点上的 pod 放置。
4.17.3.2. 使用反关联性规则相对于其他 pod 放置 pod 复制链接链接已复制到粘贴板!
反关联性规则允许您根据节点上已在运行的 pod 标签限制哪些 Openshift 节点可以调度代理 pod。
您可以使用反关联性规则来确保多个代理 pod 没有调度到同一 Openshift 节点上,这将创建单点故障。
先决条件
- 您创建了两个独立的代理部署。请参阅 第 3.4.1 节 “部署基本代理实例”。
流程
-
编辑
ActiveMQArtemis
CR 实例,供您的第一个代理部署。 在 CR 的
deploymentPlan
部分中,添加一个labels
部分。为代理创建标识标签,以便您可以根据第二个部署中的标签创建反关联性规则。例如:spec: ... deploymentPlan: labels: name: broker1
spec: ... deploymentPlan: labels: name: broker1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存 CR。
-
编辑
ActiveMQArtemis
CR 实例,以用于您的第二个代理部署。 在 CR 的
deploymentPlan
部分中,添加以下部分:affinity
,podAntiAffinity
,requiredDuringSchedulingIgnoredDuringExecution
, 和labelSelector
。在labelSelector
部分中,添加matchExpressions
参数,并指定要匹配的标签的键值字符串。此部署中的 pod 无法调度到包含具有匹配标签的 pod 的节点上。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,pod 反关联性规则可防止 pod 放置到与一个带有键为
name
且值为broker1
的 pod 相同的节点上,这是在第一个部署中分配给代理的标签。- 保存 CR。
其他资源
如需有关 OpenShift Container Platform 中关联性规则的更多信息,请参阅 OpenShift Container Platform 文档中的使用节点关联性规则控制节点上的 pod 放置。