Manter clusters

Com o appliance isolado do Google Distributed Cloud (GDC), é possível gerenciar seus clusters do Kubernetes após a criação para se adaptar aos requisitos de carga de trabalho de contêiner em evolução.

Realizar manutenção do nó

Quando você precisar reparar ou manter os nós, primeiro coloque-os no modo de manutenção. Colocar nós no modo de manutenção drena os pods/cargas de trabalho com segurança e exclui os nós da programação de pods. No modo de manutenção, é possível trabalhar nos nós sem o risco de interromper o tráfego dos pods.

Como funciona

O modo de manutenção para GDC é semelhante à execução de kubectl cordon e kubectl drain para um nó específico. Confira alguns detalhes relevantes para o modo de manutenção:

  • Os nós especificados são marcados como não programáveis. Essa é a ação que o kubectl cordon faz.
  • Os taints de nó são adicionados aos nós especificados para indicar que nenhum pod pode ser programado ou executado neles. Essa ação é semelhante a kubectl drain.
  • É aplicado um tempo limite de 20 minutos para garantir que os nós não fiquem travados aguardando o encerramento dos pods. Os pods não serão encerrados se estiverem configurados para tolerar todos os taints ou tiverem finalizadores. Os clusters do GDC tentam encerrar todos os pods, mas, se o tempo limite for excedido, o nó será colocado no modo de manutenção. Esse tempo limite impede que os pods em execução bloqueiem os upgrades.
  • Se você tiver uma carga de trabalho baseada em VM em execução no nó, os clusters do GDC vão aplicar um NodeSelector ao pod da instância de máquina virtual (VMI) e, em seguida, interromper o pod. O NodeSelector garante que o pod VMI seja reiniciado no mesmo nó quando ele for removido do modo de manutenção.

Colocar um nó no modo de manutenção

Escolha os nós que você quer colocar no modo de manutenção especificando os intervalos de endereços IP dos nós selecionados na seção maintenanceBlocks do arquivo de configuração do cluster. Os nós escolhidos precisam estar no estado Ready e funcionando no cluster.

Para colocar nós no modo de manutenção:

  1. Edite o arquivo de configuração do cluster para selecionar os nós que você quer colocar no modo de manutenção.

    É possível editar o arquivo de configuração com um editor de sua preferência ou editar o recurso personalizado do cluster diretamente executando o seguinte comando:

    kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME
    

    Substitua:

    • CLUSTER_NAMESPACE: o namespace do cluster.
    • CLUSTER_NAME: o nome do cluster.
  2. Adicione a seção maintenanceBlocks ao arquivo de configuração do cluster para especificar um único endereço IP ou um intervalo de endereços para os nós que você quer colocar no modo de manutenção.

    O exemplo a seguir mostra como selecionar vários nós especificando um intervalo de endereços IP:

    ...
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
    spec:
      maintenanceBlocks:
        cidrBlocks:
        - 172.16.128.1-172.16.128.64
    ...
    
  3. Salve e aplique a configuração atualizada do cluster:

    kubectl apply -f my-cluster.yaml
    

    Depois que a configuração do cluster for aplicada, ele colocará os nós aplicáveis no modo de manutenção.

  4. Execute o seguinte comando para ver o status dos nós no cluster:

    kubectl get nodes -n CLUSTER_NAME
    

    A resposta é semelhante a esta:

    NAME                STATUS                     ROLES    AGE     VERSION
    user-gdch-01        Ready                      master   2d22h   v1.23.5-gke.1502
    user-gdch-04        Ready                      none     2d22h   v1.23.5-gke.1502
    user-gdch-05        Ready,SchedulingDisabled   none     2d22h   v1.23.5-gke.1502
    user-gdch-06        Ready                      none     2d22h   v1.23.5-gke.1502
    

    O status SchedulingDisabled indica que um nó está no modo de manutenção.

  5. Execute o seguinte comando para ver o número de nós no modo de manutenção:

    kubectl get nodepools
    

    A resposta será semelhante a esta:

    NAME   READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
    np1    3       0             0         1                  0
    

    A coluna UNDERMAINTENANCE neste exemplo mostra que um nó está no modo de manutenção.

    Os clusters também adicionam os seguintes taints aos nós quando eles são colocados no modo de manutenção:

  • baremetal.cluster.gke.io/maintenance:NoExecute
  • baremetal.cluster.gke.io/maintenance:NoSchedule

Redimensionar pools de nós

O pool de nós de qualquer cluster de usuário no ambiente do GDC pode ser redimensionado para escalonar com as mudanças na carga de trabalho. Para gerenciar pools de nós em um cluster de usuário, é necessário ter a função Administrador do cluster de usuário (user-cluster-admin).

Para escalonar um pool de nós em um cluster, siga estas etapas:

Console

  1. No painel, selecione o projeto em que o cluster que você quer editar está.
  2. No menu de navegação, selecione Clusters.
  3. Selecione o nome do cluster associado ao pool de nós. A página Detalhes do cluster é exibida.
  4. Clique na guia Pools de nós.
  5. Selecione o ícone Editar do pool de nós que você quer redimensionar. A solicitação Editar pool de nós é exibida.
  6. Atualize o campo Número de nós para refletir a nova quantidade de nós necessária no pool de nós. É possível aumentar ou diminuir o número de nós para atender aos requisitos da sua carga de trabalho.

  7. Clique em Salvar.

  8. Volte para a guia Pools de nós do cluster e confirme se o pool de nós redimensionado tem o status Ready e o número correto de nós. Pode levar alguns minutos para que o pool de nós seja escalonado de acordo com sua especificação.

    Confirme se o pool de nós está pronto usando o console.

API

  1. Abra a especificação do recurso personalizado Cluster com a CLI kubectl usando o editor interativo:

    kubectl edit clusters.cluster.gdc.goog/USER_CLUSTER_NAME -n platform \
          --kubeconfig ORG_ADMIN_CLUSTER_KUBECONFIG
    
  2. Atualize o campo nodeCount para o pool de nós a ser redimensionado:

    nodePools:
    ...
    - machineTypeName: n2-standard-2-gdc
      name: nodepool-1
      nodeCount: NUMBER_OF_WORKER_NODES
    

    Substitua NUMBER_OF_WORKER_NODES pelo número atualizado de nós de trabalho a serem provisionados no pool de nós.

  3. Salve o arquivo e saia do editor.

  4. Verifique se o escalonamento de nós foi concluído conferindo a configuração do pool de nós:

    kubectl get clusters.cluster.gdc.goog/USER_CLUSTER_NAME -n platform -o json \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG | jq .status.workerNodePoolStatuses
    

    Confirme se o número readyNodes reflete a quantidade de nós definida para o pool de nós. Pode levar alguns minutos para o pool de nós ser escalonado de acordo com sua especificação.

Ver todos os clusters em uma organização

É possível conferir todos os clusters de usuários disponíveis em uma organização, incluindo os status, as versões do Kubernetes e outros detalhes.

Console

  • No menu de navegação, selecione Clusters.

    Todos os clusters disponíveis na organização com os respectivos status e outras informações são exibidos:

    Página de detalhes do cluster com status e outras informações de cada cluster de usuário na organização.

kubectl

  • Liste os clusters de usuário disponíveis em uma organização:

    kubectl get clusters.cluster.gdc.goog -n platform \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    O resultado será assim:

    NAME        STATE     K8S VERSION
    user-vm-1   Running   1.25.10-gke.2100
    user-test   Running   1.26.5-gke.2100
    

Ver propriedades atualizáveis

Para cada cluster de usuário, um conjunto de propriedades está disponível para mudança após a criação. Só é possível mudar as propriedades mutáveis que estão no spec do recurso personalizado Cluster. Nem todas as propriedades em spec podem ser atualizadas depois que o cluster é provisionado. Para conferir essas propriedades atualizáveis, siga estas etapas:

Console

  1. No menu de navegação, selecione Clusters.

  2. Na lista de clusters de usuário, clique no nome de um cluster para ver as propriedades dele.

  3. As propriedades editáveis têm um ícone Editar.

kubectl

  • Confira a lista de propriedades da especificação Cluster e os valores válidos correspondentes a cada propriedade:

    kubectl explain clusters.cluster.gdc.goog.spec \
        --kubeconfig ORG_ADMIN_CLUSTER_KUBECONFIG
    

    O resultado será assim:

    KIND:     Cluster
    VERSION:  cluster.gdc.goog/v1
    
    RESOURCE: spec <Object>
    
    DESCRIPTION:
        <empty>
    
    FIELDS:
      clusterNetwork    <Object>
        The cluster network configuration. If unset, the default configurations
        with pod and service CIDR sizes are used. Optional. Mutable.
    
      initialVersion    <Object>
        The GDCH version information of the user cluster during cluster creation.
        Optional. Default to use the latest applicable version. Immutable.
    
      loadBalancer  <Object>
        The load balancer configuration. If unset, the default configuration with
        the ingress service IP address size is used. Optional. Mutable.
    
      nodePools <[]Object>
        The list of node pools for the cluster worker nodes. Optional. Mutable.
    
      releaseChannel    <Object>
        The release channel a cluster is subscribed to. When a cluster is
        subscribed to a release channel, GDCH maintains the cluster versions for
        users. Optional. Mutable.
    

    Atualize essas configurações usando o console do GDC ou a CLI kubectl. Por exemplo, é possível redimensionar um pool de nós.

Ajustar o tamanho do endereço IP do serviço de entrada

É possível escalonar o tamanho do endereço IP do serviço de entrada depois de criar um cluster de usuário.

  1. Abra a especificação do recurso personalizado Cluster com a CLI kubectl usando o editor interativo:

    kubectl edit clusters.cluster.gdc.goog/USER_CLUSTER_NAME -n platform \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    
  2. Atualize o campo ingressServiceIPSize para o novo tamanho do endereço IP:

    ...
    spec:
    ...
      loadBalancer:
        ingressServiceIPSize: INGRESS_SERVICE_IP_SIZE
    ...
    

    Substitua INGRESS_SERVICE_IP_SIZE pelo tamanho atualizado do endereço IP do serviço de entrada.

  3. Salve o arquivo e saia do editor.

Não há um limite definido para o tamanho do endereço IP do serviço de entrada. A quantidade de endereços IP solicitados é atendida com base na sua organização. Se a solicitação não puder ser atendida, o cluster vai informar um erro.