默认情况下,安装Operator时,OpenShift Container Platform 会将 Operator Pod 随机安装到您的某个工作节点上。但是,在某些情况下,您可能希望将该 Pod 调度到特定节点或节点集。
以下示例描述了您可能希望将 Operator Pod 调度到特定节点或节点集的情况:
-
如果Operator需要特定平台,例如amd64
或arm64
。
-
如果Operator需要特定操作系统,例如Linux或Windows。
-
如果您希望一起工作的Operator调度到同一主机或位于同一机架上的主机上。
-
如果您希望Operator分散在整个基础架构中,以避免因网络或硬件问题导致的停机。
您可以通过向Operator的Subscription
对象添加节点亲和性、Pod亲和性或Pod反亲和性约束来控制Operator Pod的安装位置。节点亲和性是由调度程序用于确定可以在何处放置Pod的一组规则。Pod亲和性使您可以确保将相关的Pod调度到同一节点。Pod反亲和性允许您阻止Pod在节点上进行调度。
以下示例显示如何使用节点亲和性或Pod反亲和性将自定义指标自动缩放器Operator的实例安装到集群中的特定节点。
将Operator 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:
nodeAffinity: (1)
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- ip-10-0-163-94.us-west-2.compute.internal
#...
1 |
需要将Operator的Pod调度到名为ip-10-0-163-94.us-west-2.compute.internal 的节点上的节点亲和性。 |
将Operator 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:
nodeAffinity: (1)
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
- key: kubernetes.io/os
operator: In
values:
- linux
#...
1 |
需要将Operator的Pod调度到具有kubernetes.io/arch=arm64 和kubernetes.io/os=linux 标签的节点上的节点亲和性。 |
将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: (1)
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- ip-10-0-185-229.ec2.internal
#...
1 |
添加nodeAffinity 、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>