默认情况下,安装 Operator 时,OpenShift Container Platform 会将 Operator Pod 随机安装到您的某个工作节点上。但是,在某些情况下,您可能希望将该 Pod 调度到特定节点或一组节点上。
以下示例描述了您可能希望将 Operator Pod 调度到特定节点或一组节点的情况
-
如果 Operator 需要特定平台,例如amd64
或arm64
-
如果 Operator 需要特定操作系统,例如 Linux 或 Windows
-
如果您希望一起工作的 Operator 调度到同一主机或位于同一机架上的主机上
-
如果您希望 Operator 分散在整个基础设施中,以避免由于网络或硬件问题导致的停机时间
您可以通过向 Operator 的Subscription
对象添加 Pod 亲和性或反亲和性来控制 Operator Pod 的安装位置。
以下示例显示如何使用 Pod 反亲和性来阻止在具有特定标签的 Pod 的任何节点上安装自定义指标自动缩放 Operator
将 Operator Pod 放置在一个或多个特定节点上的 Pod 亲和性示例
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: openshift-custom-metrics-autoscaler-operator
namespace: openshift-keda
spec:
name: my-package
source: my-operators
sourceNamespace: operator-registries
config:
affinity:
podAffinity: (1)
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- test
topologyKey: kubernetes.io/hostname
#...
1 |
将 Operator 的 Pod 放置在具有app=test 标签的 Pod 的节点上的 Pod 亲和性。 |
阻止 Operator Pod 从一个或多个特定节点上的 Pod 反亲和性示例
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: openshift-custom-metrics-autoscaler-operator
namespace: openshift-keda
spec:
name: my-package
source: my-operators
sourceNamespace: operator-registries
config:
affinity:
podAntiAffinity: (1)
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: cpu
operator: In
values:
- high
topologyKey: kubernetes.io/hostname
#...
1 |
阻止 Operator 的 Pod 调度到具有cpu=high 标签的 Pod 的节点上的 Pod 反亲和性。 |
步骤
要控制 Operator Pod 的位置,请完成以下步骤
-
照常安装 Operator。
-
如果需要,请确保您的节点已标记,以便正确响应亲和性。
-
编辑 Operator 的Subscription
对象以添加亲和性
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: openshift-custom-metrics-autoscaler-operator
namespace: openshift-keda
spec:
name: my-package
source: my-operators
sourceNamespace: operator-registries
config:
affinity:
podAntiAffinity: (1)
requiredDuringSchedulingIgnoredDuringExecution:
podAffinityTerm:
labelSelector:
matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- ip-10-0-185-229.ec2.internal
topologyKey: topology.kubernetes.io/zone
#...
1 |
添加podAffinity 或podAntiAffinity 。 |
验证
-
要确保 Pod 部署在特定节点上,请运行以下命令
示例输出
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
custom-metrics-autoscaler-operator-5dcc45d656-bhshg 1/1 Running 0 50s 10.131.0.20 ip-10-0-185-229.ec2.internal <none> <none>