preloader
  • Início
  • Posicionamento de Pods NooBaa Usando Afinidade de Nós e Tolerâncias

Aprenda a Usar Afinidade de Nós e Tolerâncias para Mover Pods NooBaa no OpenShift, Ideal para Deployments de MCG com MachineSets Tainted

blog-thumb

📖 Tempo estimado de leitura: 5 min


Introdução:

Este guia explica como configurar o posicionamento dos pods do NooBaa usando afinidade de nós (node affinity) e tolerâncias (tolerations) para os pods noobaa-core-0, noobaa-db-pg-0, noobaa-default-backing-store, noobaa-endpoint e backing-store-*, incluindo os pods de backing store, em um ambiente OpenShift. Ao utilizar a afinidade de nós, você pode garantir que os pods do NooBaa sejam agendados em nós específicos que atendem a determinados critérios, como nós com o rótulo node-role.kubernetes.io/infra. Isso pode ser útil em cenários onde é necessário isolar as cargas de trabalho do NooBaa ou controlar seu posicionamento por razões de desempenho ou gerenciamento de recursos.

Além disso, o patch aplica uma tolerância aos pods do NooBaa para que possam ser agendados em nós com taints específicos, o que ajuda ainda mais a gerenciar onde os recursos do NooBaa serão implantados.


Casos de uso

Isolamento dos pods do NooBaa: Essa abordagem é útil quando você deseja isolar as cargas de trabalho relacionadas ao NooBaa (como os pods noobaa-* e os pods de backing store) em nós específicos dentro do seu cluster OpenShift. Por exemplo, você pode querer dedicar certos nós ao NooBaa por razões de desempenho, otimização de recursos ou conformidade.

Implantações MCG: Esse método pode ser aplicado a implantações do Multi-Cloud Gateway (MCG) para controlar onde os pods relacionados ao NooBaa (incluindo os pods de backing store) serão posicionados.

Clusters grandes: Para clusters de grande porte, o uso de um MachineSet dedicado para os pods do NooBaa é uma abordagem recomendada. Isso garante que os pods sejam agendados em um grupo de nós dedicado, ajudando a evitar interferência com outras cargas de trabalho.


Quando não usar

Posicionamento em todo o cluster: Esta abordagem move apenas os pods do NooBaa (como noobaa-* e os pods de backing store) e não afeta todos os pods no namespace openshift-storage. Portanto, se você deseja controlar o posicionamento de todos os pods do OpenShift Storage, esta solução pode não ser suficiente.

Superagendamento: Se você configurar o posicionamento de muitos pods no mesmo conjunto de nós, isso pode levar à contenção de recursos. Certifique-se de que os nós onde os pods do NooBaa serão agendados tenham recursos suficientes (CPU, memória, disco etc.) para suportar a carga.


Como aplicar o patch

Para aplicar o patch, use o seguinte comando oc patch, que configura a afinidade de nós e as tolerâncias para os pods do NooBaa.

oc patch storagecluster ocs-storagecluster -n openshift-storage --type merge -p '{
  "spec": {
    "placement": {
      "all": {},
      "noobaa-standalone": {
        "nodeAffinity": {
          "requiredDuringSchedulingIgnoredDuringExecution": {
            "nodeSelectorTerms": [
              {
                "matchExpressions": [
                  {
                    "key": "node-role.kubernetes.io/infra",
                    "operator": "Exists"
                  }
                ]
              }
            ]
          }
        },
        "tolerations": [
          {
            "key": "quay",
            "operator": "Exists",
            "effect": "NoSchedule"
          }
        ]
      }
    }
  }
}'

O resultado será semelhante a este:

OpenShift NooBaa Pods Placement

Campos principais do patch

Sobre o taint “quay:

No patch, usamos a chave quay na seção de tolerâncias para garantir que os pods do NooBaa sejam agendados apenas em nós que possuem o taint quay=true:NoSchedule. Isso porque os nós designados para rodar o NooBaa (especialmente em ambientes onde o Quay é usado como parte da infraestrutura) são rotulados com esse taint para restringir o agendamento de pods não elegíveis.

Afinidade de Nós (nodeAffinity):

  ◦ Isso garante que os pods do NooBaa sejam agendados apenas em nós que tenham o rótulo:
      "node-role.kubernetes.io/infra"

  ◦ É útil quando você deseja que os pods do NooBaa fiquem isolados em um grupo específico de nós.

Tolerâncias:

  ◦ Essa tolerância permite que os pods do NooBaa sejam agendados em nós com o taint "quay",
    permitindo que eles sejam posicionados em nós que normalmente rejeitariam pods sem
    tolerância correspondente.

Limitações

Não move todos os pods do OpenShift Storage: O patch se aplica apenas aos pods do NooBaa (incluindo os pods de backing store), e não a outros pods relacionados ao OpenShift Storage. Se você deseja controlar o posicionamento de todos os pods no namespace openshift-storage, será necessário usar outra abordagem.

Todos os pods do NooBaa são movidos juntos: O patch move todos os pods do NooBaa (incluindo os noobaa-* e os pods de backing store) para os nós selecionados com base na afinidade de nós. No entanto, não permite controle granular de pods individuais. Por exemplo, não é possível especificar facilmente posicionamentos diferentes para noobaa-standalone e os pods de backing store separadamente.

Gerenciamento de recursos: Embora essa abordagem permita controlar onde os pods do NooBaa serão posicionados, é necessário garantir que os nós selecionados tenham recursos suficientes (CPU, memória etc.). Superagendar os pods do NooBaa em um mesmo conjunto de nós pode levar à contenção de recursos, especialmente em clusters grandes.


Configuração recomendada para clusters grandes

Para clusters maiores, considere configurar um MachineSet dedicado para os pods do NooBaa. Essa configuração isola as cargas de trabalho do NooBaa das demais, garantindo que elas rodem em nós dedicados com recursos suficientes. Veja um esboço básico de como implementar isso em um cluster de grande porte:

Crie um MachineSet para os pods do NooBaa: Defina um MachineSet com rótulos ou taints específicos para os nós onde os pods do NooBaa devem ser agendados. Isso garantirá que apenas os pods do NooBaa sejam posicionados nesses nós.

Aplique afinidade de nós: Use a afinidade de nós (como mostrado no patch) para garantir que os pods do NooBaa sejam agendados nos nós do MachineSet. Isso permite isolar os pods do NooBaa das outras cargas de trabalho do cluster.

Monitore os recursos: Monitore regularmente o uso de recursos nos nós dedicados para garantir que os pods do NooBaa não estejam consumindo recursos excessivos, o que pode impactar o desempenho.


A propósito, tem um guia para ajustes de performance aqui.


Conclusão

Usar afinidade de nós e tolerâncias para controlar o posicionamento dos pods do NooBaa é uma forma poderosa de garantir que as cargas de trabalho relacionadas ao NooBaa estejam isoladas e sejam agendadas em nós específicos. Essa abordagem é ideal para implantações MCG e clusters grandes, onde você deseja dedicar recursos aos pods do NooBaa e evitar interferências com outras cargas de trabalho.

No entanto, tenha em mente que esse patch afeta apenas os pods do NooBaa e não todos os pods relacionados ao OpenShift Storage. Além disso, certifique-se de que os nós selecionados tenham recursos suficientes para suportar a carga e evite superagendamento para prevenir contenção de recursos.



Compartilhe este post e continue acompanhando nosso site para mais novidades sobre Kubernetes e tecnologias open source!

Confira também outros artigos interessantes! 🔥



Apoie nosso trabalho 💖

Curte o conteúdo que encontra aqui? Cada clique em um banner ajuda a manter o site vivo e gratuito. Seu apoio faz toda a diferença para que possamos continuar trazendo o conteúdo que você ama. Muito obrigado! 😊


Artigos que você pode gostar 📌
comments powered by Disqus