4.3.5. Pod 유사성 및 유사성 방지를 사용하여 Operator가 설치된 위치를 제어
기본적으로 Operator를 설치할 때 OpenShift Container Platform은 Operator Pod를 임의로 작업자 노드 중 하나에 설치합니다. 그러나 특정 노드 또는 노드 세트에 해당 Pod를 예약하려는 경우가 있을 수 있습니다.
다음 예제에서는 Operator Pod를 특정 노드 또는 노드 세트에 예약해야 하는 상황을 설명합니다.
-
Operator에
amd64또는arm64와 같은 특정 플랫폼이 필요한 경우 - Operator에 Linux 또는 Windows와 같은 특정 운영 체제가 필요한 경우
- 동일한 호스트에서 또는 동일한 랙에 있는 호스트에서 예약된 Operator를 원하는 경우
- 네트워크 또는 하드웨어 문제로 인해 다운타임을 방지하기 위해 인프라 전체에 Operator를 분산하려는 경우
Operator의 Subscription 오브젝트에 Pod 유사성 또는 유사성 방지를 추가하여 Operator Pod가 설치된 위치를 제어할 수 있습니다.
다음 예제에서는 Pod 유사성 방지를 사용하여 특정 라벨이 있는 Pod가 있는 노드에서 Custom Metrics Autoscaler 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:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- test
topologyKey: kubernetes.io/hostname
#...
- 1
app=test레이블이 있는 Pod가 있는 노드에 Operator의 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:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: cpu
operator: In
values:
- high
topologyKey: kubernetes.io/hostname
#...
- 1
cpu=high라벨이 있는 Pod가 있는 노드에서 Operator의 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:
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가 특정 노드에 배포되도록 하려면 다음 명령을 실행합니다.
$ oc get pods -o wide출력 예
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>