MongoDB 리소스에 대한 클러스터 토폴로지 구성
NodeAffinity
및 PodAffinity
를 정의하여 Kubernetes 내에서 MongoDB 리소스의 배포 토폴로지를 구성할 수 있습니다. NodeAffinity
및 PodAffinity
는 Kubernetes가 Kubernetes 클러스터에서 MongoDB 사용자 지정 리소스를 배포하는 위치를 지정합니다.
노드 어피니티 를 구현할 수 있습니다. 노드 레이블 을 적용하여 Kubernetes 클러스터 내의 특정 노드에 추가하고 MongoDBCustomResourceDefinition 에서 해당 labelSelector
레이블로 필드를 정의합니다. . 노드 labelSelector
레이블 을 적용하는 경우 값이 일치하면 Kubernetes는 지정된 MongoDB CustomResourceDefinition 만 배포합니다. Kubernetes 클러스터 내에서 지정한 노드에서. 노드 선호도 규칙을 구현하면 특정 노드에 특정 리소스를 배포할 수 있으므로 이기종 노드 그룹에 MongoDB 리소스를 배포할 때 유용할 수 있습니다.
마찬가지로 레이블 labelSelector
을 적용하여 Pod 선호도를 구현할 수 있습니다. 클러스터에서 실행 중인 파드에 추가하고 해당 레이블 값을 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 리소스에 적용된 레이블이 있어야 합니다. 또는 다음 전제 조건을 충족해야 합니다.
Kubernetes Operator에 대한 자격 증명을 입력 하거나 다른 시크릿 스토리지 도구를 구성합니다.
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 ...