Manutenção de clusters

O dispositivo isolado do Google Distributed Cloud (GDC) permite-lhe gerir os clusters do Kubernetes após a criação para que possa adaptar-se aos requisitos em evolução da sua carga de trabalho de contentores.

Realize a manutenção de nós

Quando precisar de reparar ou fazer a manutenção dos nós, primeiro, coloque-os no modo de manutenção. A colocação de nós no modo de manutenção esgota em segurança os respetivos pods/cargas de trabalho e exclui os nós do agendamento de pods. No modo de manutenção, pode trabalhar nos seus nós sem o risco de interromper o tráfego de pods.

Como funciona

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

  • Os nós especificados estão marcados como não agendáveis. Esta ação é o que kubectl cordon faz.
  • As restrições de nós são adicionadas aos nós especificados para indicar que não é possível agendar nem executar pods nos nós. Esta ação é semelhante a kubectl drain.
  • É aplicado um limite de tempo de 20 minutos para garantir que os nós não ficam bloqueados à espera que os pods terminem. Os pods podem não terminar se estiverem configurados para tolerar todas as falhas ou tiverem finalizadores. Os clusters GDC tentam terminar todos os pods, mas, se o limite de tempo for excedido, o nó é colocado no modo de manutenção. Este limite de tempo impede que os pods em execução bloqueiem as atualizações.
  • Se tiver uma carga de trabalho baseada em VMs em execução no nó, os clusters GDC aplicam um NodeSelector ao pod da instância de máquina virtual (VMI) e, em seguida, param o pod. O NodeSelector garante que o pod VMI é reiniciado no mesmo nó quando o nó é removido do modo de manutenção.

Coloque um nó no modo de manutenção

Escolha os nós que quer colocar no modo de manutenção especificando intervalos de endereços IP para os nós selecionados na secção maintenanceBlocks do ficheiro de configuração do cluster. Os nós que escolher têm de estar num estado Ready e a funcionar no cluster.

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

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

    Pode editar o ficheiro de configuração com um editor à sua escolha ou pode editar o recurso personalizado do cluster diretamente executando o seguinte comando:

    kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME
    

    Substitua o seguinte:

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

    O exemplo seguinte 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. Guarde e aplique a configuração do cluster atualizada:

    kubectl apply -f my-cluster.yaml
    

    Depois de a configuração do cluster ser aplicada, o cluster coloca os nós aplicáveis no modo de manutenção.

  4. Execute o seguinte comando para obter o estado dos nós no cluster:

    kubectl get nodes -n CLUSTER_NAME
    

    A resposta é algo semelhante ao seguinte:

    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
    

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

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

    kubectl get nodepools
    

    A resposta tem um aspeto semelhante ao seguinte resultado:

    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 as seguintes contaminações aos nós quando são colocados no modo de manutenção:

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

Redimensione node pools

Qualquer cluster de utilizadores no ambiente do GDC pode ter o tamanho do respetivo conjunto de nós alterado para ser dimensionado de acordo com as alterações da carga de trabalho. Para gerir pools de nós num cluster de utilizador, tem de ter a função User Cluster Admin (user-cluster-admin).

Para dimensionar um conjunto de nós num cluster existente, conclua os seguintes passos:

Consola

  1. No painel de controlo, selecione o projeto no qual existe o cluster que quer editar.
  2. No menu de navegação, selecione Clusters.
  3. Selecione o nome do cluster ao qual o conjunto de nós está associado. É apresentada a página Detalhes do cluster.
  4. Clique no separador Conjuntos de nós.
  5. Selecione o ícone Editar para o conjunto de nós que quer redimensionar. É apresentado o comando Editar node pool.
  6. Atualize o campo Número de nós para refletir a nova quantidade de nós necessários no node pool. Pode aumentar ou diminuir o número de nós para se adequar aos requisitos da sua carga de trabalho.

  7. Clique em Guardar.

  8. Navegue novamente para o separador Conjuntos de nós do cluster e confirme se o conjunto de nós redimensionado tem o estado Ready e o número correto de nós. A expansão do conjunto de nós para a sua especificação pode demorar alguns minutos.

    Confirme se o conjunto de nós está pronto através da consola.

API

  1. Abra a especificação do recurso personalizado Cluster com a CLI kubectl através do 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 node pool a redimensionar:

    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 aprovisionar no node pool.

  3. Guarde o ficheiro e saia do editor.

  4. Verifique se o dimensionamento dos nós está concluído verificando a configuração do conjunto 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 que definiu para o conjunto de nós. A expansão do conjunto de nós de acordo com a sua especificação pode demorar alguns minutos.

Veja todos os clusters numa organização

Pode ver todos os clusters de utilizadores disponíveis numa organização, incluindo os respetivos estados, versões do Kubernetes e outros detalhes.

Consola

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

    São apresentados todos os clusters disponíveis na organização com os respetivos estados e outras informações:

    Página de detalhes do cluster para ver os estados e outras informações de cada cluster de utilizadores na organização.

kubectl

  • Liste os clusters de utilizadores disponíveis numa organização:

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

    O resultado é semelhante ao seguinte:

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

Veja as propriedades atualizáveis

Para cada cluster de utilizadores, está disponível um conjunto de propriedades para alterar após a sua criação. Só pode alterar as propriedades mutáveis que se encontram no spec de recurso personalizado Cluster. Nem todas as propriedades em spec são elegíveis para atualização após o aprovisionamento do cluster. Para ver estas propriedades atualizáveis, conclua os seguintes passos:

Consola

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

  2. Na lista de clusters de utilizadores, clique no nome de um cluster para ver as respetivas propriedades.

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

kubectl

  • Veja 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 é semelhante ao seguinte:

    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 estas definições através da consola do GDC ou da kubectl CLI. Por exemplo, pode redimensionar um conjunto de nós.

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

Pode dimensionar o tamanho do endereço IP do serviço de entrada depois de criar um cluster de utilizadores.

  1. Abra a especificação do recurso personalizado Cluster com a CLI kubectl através do 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 do endereço IP do serviço de entrada atualizado.

  3. Guarde o ficheiro e saia do editor.

Não existe um limite definido para o tamanho do endereço IP do serviço de entrada. A quantidade de endereços IP pedidos é preenchida com base na sua organização. Se o pedido não puder ser cumprido, o cluster comunica um erro.