NodeAffinity
및 PodAffinity
를 정의하여 Kubernetes 내에서 MongoDB 리소스의 배포서버 토폴로지 를 구성할 수 있습니다. NodeAffinity
및 PodAffinity
는 Kubernetes 클러스터 에서 Kubernetes 가 MongoDB 사용자 지정 리소스를 배포하는 위치를 지정합니다.
Kubernetes 클러스터 내의 특정 노드에 labelSelector
노드 레이블을 적용하고 MongoDB CustomResourceDefinition 에서 해당 레이블로 필드를 정의하여 노드 어피니티를 구현 수 있습니다. 노드 레이블과 일치하는 labelSelector
값을 적용 Kubernetes 지정된 MongoDB CustomResourceDefinition을 Kubernetes 클러스터 내에서 지정한 노드에만 배포합니다. 노드 어피니티 규칙을 구현하면 특정 노드 에 특정 리소스를 배포 할 수 있으므로 이기종 노드 그룹에 MongoDB 리소스를 배포할 때 유용할 수 있습니다.
마찬가지로 클러스터 에서 실행 중인 labelSelector
파드에 레이블을 적용하고 해당 레이블 값을 MongoDB CustomResourceDefinition에 정의된 값에 labelSelector
정렬하여 파드 선호도를 구현 수 있습니다. 라벨을 적용 하고 일치하는 값을 적용하면 Kubernetes MongoDB 사용자 지정 리소스 관리형 파드를 일치하는 라벨이 적용된 파드와 함께 배치합니다. 파드를 배치하면 시스템 성능을 개선하고 정기적으로 통신하는 파드 간의 지연 시간 줄일 수 있습니다. 또한 함께 배치되어서는 안 되는 파드를 지정할 수 있는 파드 반친화성 규칙을 정의할 수도 있습니다.
독립형 및 복제본 세트 배포의 경우 MongoDB CustomResourceDefinition spec.podSpec
의 에 이러한 선호도 규칙을 적용 할 수 있습니다. 샤드 클러스터 배포의 경우, 이러한 선호도 규칙을 MongoDB spec.configSrvPodSpec
CustomResourceDefinition spec.mongosPodSpec
의 , spec.shardPodSpec
및 섹션에 적용 할 수 있습니다.
샤드 mongos
nodeAffinity
podAffinity
mongos
ShardedCluster
클러스터 배포서버 의 경우, 샤드 및 config 서버와 같은 MongoDB 리소스를 MongoDB 리소스 와 동일한 네임스페이스 에 배포 해야 합니다. 그러나 해당 네임스페이스 내에서는 CustomResourceDefinition 에서, 샤드 및 config 서버 리소스 유형에 대해 및 를 구성할 수 있습니다.
전제 조건
MongoDB deployment 에 대한 배포서버 토폴로지 구성하려면 MongoDB Kubernetes Operator를 통해 배포된 MongoDB 복제본 세트 있어야 하며,labelSelectors
MongoDB CustomResourceDefinition에 정의된 에 정의된 Kubernetes 리소스에 적용된 레이블이 있거나 다음 전제 조건을 충족해야 합니다.
MongoDB CustomResourceDefinition 에 정의된 과 일치하는 Kubernetes 리소스에 적용되는 레이블입니다.
labelSelectors
절차
MongoDB CRD 매니페스트를 업데이트합니다.
다음 예시 와 같이 MongoDB 샤드 클러스터 정의의 podTemplate.affinity
섹션을 채웁니다.
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: my-sharded-cluster 6 spec: 7 shardCount: 2 8 mongodsPerShardCount: 3 9 mongosCount: 2 10 configServerCount: 3 11 version: 6.0.0 12 service: my-service 13 14 opsManager: 15 configMapRef: 16 name: my-project 17 credentials: my-credentials 18 type: ShardedCluster 19 20 persistent: true 21 configSrvPodSpec: 22 podTemplate: 23 spec: 24 affinity: 25 podAffinity: 26 requiredDuringSchedulingIgnoredDuringExecution: 27 - labelSelector: 28 matchExpressions: 29 - key: security 30 operator: In 31 values: 32 - S1 33 topologyKey: failure-domain.beta.kubernetes.io/zone 34 nodeAffinity: 35 requiredDuringSchedulingIgnoredDuringExecution: 36 nodeSelectorTerms: 37 - matchExpressions: 38 - key: kubernetes.io/e2e-az-name 39 operator: In 40 values: 41 - e2e-az1 42 - e2e-az2 43 podAntiAffinity: 44 requiredDuringSchedulingIgnoredDuringExecution: 45 - podAffinityTerm: 46 topologyKey: nodeId 47 mongosPodSpec: 48 podTemplate: 49 spec: 50 affinity: 51 podAffinity: 52 requiredDuringSchedulingIgnoredDuringExecution: 53 - labelSelector: 54 matchExpressions: 55 - key: security 56 operator: In 57 values: 58 - S1 59 topologyKey: failure-domain.beta.kubernetes.io/zone 60 nodeAffinity: 61 requiredDuringSchedulingIgnoredDuringExecution: 62 nodeSelectorTerms: 63 - matchExpressions: 64 - key: kubernetes.io/e2e-az-name 65 operator: In 66 values: 67 - e2e-az1 68 - e2e-az2 69 podAntiAffinity: 70 requiredDuringSchedulingIgnoredDuringExecution: 71 - podAffinityTerm: 72 topologyKey: nodeId 73 shardPodSpec: 74 podTemplate: 75 spec: 76 affinity: 77 podAffinity: 78 requiredDuringSchedulingIgnoredDuringExecution: 79 - labelSelector: 80 matchExpressions: 81 - key: security 82 operator: In 83 values: 84 - S1 85 topologyKey: failure-domain.beta.kubernetes.io/zone 86 nodeAffinity: 87 requiredDuringSchedulingIgnoredDuringExecution: 88 nodeSelectorTerms: 89 - matchExpressions: 90 - key: kubernetes.io/e2e-az-name 91 operator: In 92 values: 93 - e2e-az1 94 - e2e-az2 95 podAntiAffinity: 96 requiredDuringSchedulingIgnoredDuringExecution: 97 - podAffinityTerm: 98 topologyKey: nodeId 99 ...