Você pode configurar a topologia de implantação de seus recursos do MongoDB no Kubernetes definindo NodeAffinity
e PodAffinity
. NodeAffinity
e PodAffinity
especificam onde o Kubernetes distribui os recursos personalizados do MongoDB em seu cluster do Kubernetes.
Você pode implementar labelSelector
a afinidade do nó aplicando rótulos de nó a nós específicos dentro do cluster do Kubernetes e definindo campos com rótulos correspondentes no MongoDB CustomResourceDefinition. Quando você aplica rótulos de nó e labelSelector
valores correspondentes, o Kubernetes implanta apenas uma determinada CustomResourceDefinition do MongoDB nos nós especificados no cluster do Kubernetes. A implementação de regras de afinidade de nó pode ser útil ao distribuir recursos do MongoDB em grupos de nós heterogêneos, pois permite distribuir recursos específicos em variedades de nó específicas.
Da mesma forma, você pode implementar labelSelector
a afinidade do Pod aplicando rótulos aos Pods que estão em execução em seu cluster e alinhando esses valores de rótulo com valores definidos em seu MongoDB CustomResourceDefinition . Quando você aplica labelSelector
rótulos e valores correspondentes, o Kubernetes coloca os Pods gerenciados por recursos personalizados do MongoDB com Pods com rótulos correspondentes aplicados. Ao colocar Pods, você pode melhorar o desempenho do sistema e reduzir a latência entre Pods que se comunicam regularmente. Você também pode definir regras de antiafinidade de Pod que permitem especificar Pods que não devem ser colocalizados.
Para sistemas Standalone e de Conjunto de Réplicas, você pode aplicar essas regras de afinidade ao de spec.podSpec
seu MongoDB CustomResourceDefinition. Para sistemas de cluster fragmentado, você pode aplicar estas regras de afinidade às spec.configSrvPodSpec
seções , spec.shardPodSpec
e spec.mongosPodSpec
do seu MongoDB CustomResourceDefinition.
Você deve mongos
implantar recursos do MonogDB, como, shards e servidores de configuração no caso de uma implantação de cluster fragmentado, no mesmo namespace que o recurso MongoDB . No entanto, dentro desse namespace, você pode configurar o nodeAffinity
e podAffinity
o mongos
para, shards e tipos de recursos do servidor de configuração no ShardedCluster
CustomResourceDefinition.
Pré-requisitos
Para configurar a topologia de implantação para sua implantação do MongoDB , você deve ter um conjunto de réplicas do MongoDB distribuído pelo MongoDB Kubernetes Operator junto com rótulos aplicados aos recursos do Kubernetes que se alinharão com labelSelectors
definido na CustomResourceDefinition do MongoDB ou atender aos seguintes pré-requisitos:
Uma instânciaMongoDB Ops Manager ou uma organizaçãoCloud Manager .
Credenciais para o Operador Kubernetes ou configurar uma ferramenta de armazenamento de segredos diferente.
Etiquetas aplicadas aos recursos do Kubernetes que se alinharão com
labelSelectors
o definido no MongoDB CustomResourceDefinition.
Procedimento
Atualize seu manifesto CRD do MongoDB .
Preencha as seções podTemplate.affinity
da sua definição de Cluster Fragmentado MongoDB como mostrado no seguinte exemplo:
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 ...