Faça a manutenção dos clusters do Kubernetes

O Google Distributed Cloud (GDC) air-gapped permite-lhe gerir os seus clusters Kubernetes após a criação através do GKE no GDC. Este serviço permite-lhe adaptar-se aos requisitos de carga de trabalho de contentores em evolução.

Antes de começar

Para ver e gerir node pools num cluster do Kubernetes, tem de ter as seguintes funções:

  • Administrador do cluster de utilizadores (user-cluster-admin)
  • Visualizador de nós de cluster de utilizadores (user-cluster-node-viewer)

Estas funções não estão associadas a um espaço de nomes.

Para executar comandos num cluster do Kubernetes, certifique-se de que tem os seguintes recursos:

  1. Localize o nome do cluster do Kubernetes ou pergunte ao administrador da plataforma qual é o nome do cluster.

  2. Inicie sessão e gere o ficheiro kubeconfig para o cluster Kubernetes, se não tiver um.

  3. Use o caminho kubeconfig do cluster Kubernetes para substituir KUBERNETES_CLUSTER_KUBECONFIG nestas instruções.

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 e 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 edit cluster KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    Substitua o seguinte para o cluster Kubernetes:

    • KUBERNETES_CLUSTER_NAME: o nome do cluster.
    • KUBERNETES_CLUSTER_NAMESPACE: o espaço de nomes do cluster.
    • KUBERNETES_CLUSTER_KUBECONFIG: o caminho do ficheiro kubeconfig.

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

  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. Obtenha o estado dos nós no cluster:

    kubectl get nodes -n KUBERNETES_CLUSTER_NAME \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    A resposta é algo semelhante ao seguinte:

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

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

  4. Obtenha o número de nós no modo de manutenção:

    kubectl get nodepools --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    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 do KUBERNETES no ambiente da GDC pode ter o respetivo conjunto de nós redimensionado para se adaptar às alterações da carga de trabalho. Para gerir node pools num cluster do Kubernetes, tem de ter a função User Cluster Admin (user-cluster-admin). Esta função não está associada a um espaço de nomes.

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 Kubernetes Engine > 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/KUBERNETES_CLUSTER_NAME -n platform \
          --kubeconfig MANAGEMENT_API_SERVER
    

    Substitua o seguinte:

    • KUBERNETES_CLUSTER_NAME: O nome do cluster que aloja o node pool.
    • MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal onde o cluster Kubernetes está alojado. Se ainda não gerou um ficheiro kubeconfig para o servidor da API na zona segmentada, consulte Iniciar sessão para ver detalhes.
  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/KUBERNETES_CLUSTER_NAME -n platform -o json \
        --kubeconfig MANAGEMENT_API_SERVER | 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.

Mova clusters na hierarquia do projeto

Os projetos oferecem o agrupamento lógico de instâncias de serviços. Pode adicionar e remover clusters do Kubernetes da hierarquia do projeto GDC para agrupar os seus serviços de forma adequada.

Anexe o projeto a um cluster

Quando cria um cluster a partir da consola do GDC, tem de anexar, pelo menos, um projeto antes de poder implementar com êxito cargas de trabalho de contentores no mesmo. Se tiver de adicionar projetos adicionais a um cluster existente, conclua os seguintes passos:

  1. No menu de navegação, selecione Kubernetes Engine > Clusters.
  2. Clique no cluster na lista de clusters para abrir a página Detalhes do cluster.
  3. Selecione Anexar projeto.
  4. Selecione os projetos disponíveis para adicionar na lista de projetos. Clique em Guardar.

Desassocie um projeto de um cluster

Para desassociar um projeto de um cluster do Kubernetes existente, conclua os seguintes passos:

  1. No menu de navegação, selecione Kubernetes Engine > Clusters.
  2. Clique no cluster na lista de clusters para abrir a página Detalhes do cluster.
  3. Clique em Desassociar para desassociar o projeto do cluster.

Veja todos os clusters numa organização

Pode ver todos os clusters do Kubernetes disponíveis numa organização, incluindo os respetivos estados, versões do Kubernetes e outros detalhes. Uma vez que os clusters do Kubernetes são um recurso zonal, só pode listar clusters por zona.

Consola

  • No menu de navegação, selecione Kubernetes Engine > 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 estados e outras informações de cada cluster do Kubernetes na organização.

kubectl

  • Liste os clusters Kubernetes disponíveis na zona numa organização:

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

    Substitua MANAGEMENT_API_SERVER pelo caminho kubeconfig do servidor da API zonal. Se ainda não gerou um ficheiro kubeconfig para o servidor da API na sua zona segmentada, consulte Iniciar sessão para ver detalhes.

    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 do Kubernetes, está disponível um conjunto de propriedades para alterar depois de ser criado. 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 Kubernetes Engine > Clusters.

  2. Na lista de clusters do Kubernetes, 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 MANAGEMENT_API_SERVER
    

    Substitua MANAGEMENT_API_SERVER pelo caminho kubeconfig do servidor da API zonal. Se ainda não gerou um ficheiro kubeconfig para o servidor da API na sua zona segmentada, consulte Iniciar sessão para ver detalhes.

    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 GDC air-gapped 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, GDC 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 do Kubernetes.

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

    kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform \
        --kubeconfig MANAGEMENT_API_SERVER
    

    Substitua o seguinte:

    • KUBERNETES_CLUSTER_NAME: O nome do cluster que fornece o endereço IP.
    • MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal onde o cluster Kubernetes está alojado. Se ainda não gerou um ficheiro kubeconfig para o servidor da API na zona segmentada, consulte Iniciar sessão para ver detalhes.
  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.

Atualize um cluster do Kubernetes

Pode fazer uma atualização automática ou manual do cluster Kubernetes. Para mais instruções sobre como atualizar o cluster, consulte a secção Atualização do cluster.