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

O Google Distributed Cloud (GDC) air-gapped permite-lhe gerir os seus clusters do Kubernetes após a criação através do GKE no GDC. Este serviço permite-lhe adaptar-se aos requisitos em evolução das cargas de trabalho de contentores e manter os nós de cluster existentes com os seguintes fluxos de trabalho:

Este documento destina-se a administradores de TI no grupo de administradores da plataforma que gerem cargas de trabalho de contentores alojadas em clusters que abrangem vários projetos, e a programadores no grupo de operadores de aplicações responsáveis pela criação de cargas de trabalho de aplicações num único projeto. Para mais informações, consulte Públicos-alvo para a documentação do GDC air-gapped.

Antes de começar

Para concluir as tarefas neste documento, tem de pedir as autorizações necessárias e preparar o seu ambiente.

Peça funções de IAM

Tem de ter funções específicas para receber as autorizações necessárias para manter o cluster do Kubernetes. As funções necessárias dependem de estar a trabalhar num cluster partilhado com âmbito da organização ou num cluster padrão com âmbito do projeto. Para mais informações, consulte o artigo Configurações do cluster do Kubernetes.

Funções do cluster partilhado

Para ver e manter o cluster do Kubernetes partilhado e os respetivos recursos, peça ao administrador de IAM da organização que lhe conceda as seguintes funções com base na tarefa a realizar:

  • Criador de projetos (project-creator): crie ou veja recursos do projeto. Esta função é necessária para anexar um cluster partilhado a um projeto.

  • Editor de projetos (project-editor): elimine, atualize ou veja recursos do projeto. Esta função é necessária para desanexar um cluster partilhado de um projeto.

  • Visualizador de clusters do utilizador (user-cluster-viewer): veja o cluster partilhado e os respetivos recursos. Esta função fornece acesso às APIs do plano de gestão para o cluster partilhado alojado no servidor da API de gestão.

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

Funções do cluster padrão

Para ver o cluster do Kubernetes padrão e os respetivos recursos, peça ao administrador de IAM do projeto que lhe conceda a função de Visualizador de clusters padrão (standard-cluster-viewer). Esta função fornece acesso às APIs do plano de gestão para o cluster padrão alojado no servidor da API de gestão.

Esta função está associada ao espaço de nomes do projeto.

Prepare o seu ambiente

Para executar comandos num cluster do Kubernetes através da API, certifique-se de que tem os seguintes recursos:

  • Localize o nome do cluster do Kubernetes ou pergunte a um membro do grupo de administradores da plataforma qual é o nome do cluster.

  • Use o nome do cluster do Kubernetes para substituir CLUSTER_NAME nestas instruções.

  • Inicie sessão e gere o ficheiro kubeconfig para o servidor da API de gestão.

  • Use o caminho kubeconfig do servidor da API de gestão para substituir MANAGEMENT_API_SERVER nestas instruções.

Mova clusters na hierarquia do projeto

Os projetos fornecem um agrupamento lógico de instâncias de serviços. Pode adicionar e remover clusters do Kubernetes partilhados da hierarquia do projeto do GDC para agrupar os serviços de forma adequada. Não pode mover clusters padrão na hierarquia do projeto, uma vez que estão limitados apenas a um único projeto.

Anexe um projeto a um cluster partilhado

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

Consola

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

API

  • Crie um novo recurso personalizado ProjectBinding para o cluster:

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: resourcemanager.gdc.goog/v1
    kind: ProjectBinding
    metadata:
      name: CLUSTER_NAME-PROJECT_NAME
      namespace: platform
      labels:
        resourcemanager.gdc.goog/projectbinding-for-user-project: "true"
    spec:
      clusterRef:
       name: CLUSTER_NAME
      selector:
        nameSelector:
          matchNames:
          - PROJECT_NAME
    EOF
    

    Substitua o seguinte:

    • MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal.
    • CLUSTER_NAME: o nome do cluster.
    • PROJECT_NAME: o nome do projeto ao qual associar o cluster. Cada recurso ProjectBinding só pode ser mapeado para um cluster. Se um projeto precisar de acesso a vários clusters, tem de criar um ProjectBinding exclusivo para cada cluster.

Terraform

  1. Num ficheiro de configuração do Terraform, insira o seguinte fragmento de código para criar o recurso personalizado ProjectBinding:

    provider "kubernetes" {
      config_path = "MANAGEMENT_API_SERVER"
    }
    
    resource "kubernetes_manifest" "PROJECT_BINDING_RESOURCE_NAME" {
      manifest = {
        "apiVersion" = "resourcemanager.gdc.goog/v1"
        "kind" = "ProjectBinding"
        "metadata" = {
          "name" = "CLUSTER_NAME-PROJECT_NAME"
          "namespace" = "platform"
          "labels" = {
            "resourcemanager.gdc.goog/projectbinding-for-user-project" = "true"
          }
        }
        "spec" = {
          "clusterRef" = {
            "name" = "CLUSTER_NAME"
          }
          "selector" = {
            "nameSelector" = {
              "matchNames" = [
                "PROJECT_NAME",
              ]
            }
          }
        }
      }
    }
    

    Substitua o seguinte:

    • MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal.
    • PROJECT_BINDING_RESOURCE_NAME: o nome do recurso do Terraform da associação do projeto, como CLUSTER_NAME-PROJECT_NAME-binding. Este nome é usado pelo Terraform para identificar a associação do projeto e não é usado pelo GDC.
    • CLUSTER_NAME: o nome do cluster. Cada recurso ProjectBinding só pode ser mapeado para um cluster. Se um projeto precisar de acesso a vários clusters, tem de criar um ProjectBinding exclusivo para cada cluster.
    • PROJECT_NAME: o nome do projeto ao qual associar. Cada recurso ProjectBinding só pode ser mapeado para um cluster. Se um projeto precisar de acesso a vários clusters, tem de criar um ProjectBinding exclusivo para cada cluster.
  2. Aplique a nova associação do projeto:

    terraform apply
    

Desanexe um projeto de um cluster partilhado

A desanexação de um projeto de um cluster partilhado pode introduzir alterações significativas, como a eliminação de cargas de trabalho em execução no cluster. Certifique-se de que compreende as consequências antes de desanexar um projeto de um cluster partilhado.

Para desanexar um projeto de um cluster partilhado existente, conclua os seguintes passos:

Consola

  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 Desanexar para o projeto a desanexar do cluster.

API

  • Elimine o recurso ProjectBinding que associa o projeto e o cluster:

    kubectl --kubeconfig MANAGEMENT_API_SERVER delete projectbinding \
        CLUSTER_NAME-PROJECT_NAME -n platform
    

    Substitua o seguinte:

    • MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal.
    • CLUSTER_NAME: o nome do cluster.
    • PROJECT_NAME: o nome do projeto a desanexar do cluster.

Terraform

  • Elimine o recurso de associação do projeto:

    terraform destroy -target kubernetes_manifest.PROJECT_BINDING_RESOURCE_NAME
    

    Substitua PROJECT_BINDING_RESOURCE_NAME pelo nome do recurso do Terraform da associação do projeto a eliminar, como CLUSTER_NAME-PROJECT_NAME-binding. Este nome é usado pelo Terraform para identificar a associação do projeto e não é usado pelo GDC.

Veja todos os clusters num projeto ou numa organização

Pode ver todos os clusters do Kubernetes disponíveis num projeto ou 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

  1. No seletor de projetos, selecione o seu projeto ou organização.

    Os clusters padrão têm âmbito do projeto e os clusters partilhados têm âmbito da organização. Selecione o âmbito correto para ver o tipo de cluster do Kubernetes adequado.

  2. No menu de navegação, selecione Kubernetes Engine > Clusters.

    São apresentados todos os clusters partilhados 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 partilhado na organização.

gdcloud

  • Liste os clusters do Kubernetes disponíveis da zona:

    gdcloud clusters list
    

    O resultado é semelhante ao seguinte:

    CLUSTERREF.NAME   READINESS.STATE   TYPE   CURRENTVERSION.USERCLUSTERVERSION     CURRENTVERSION.SUPPORT.STATUS
    user-vm-1         Ready             user   1.15.0-gdch.394225-1.28.15-gke.1200   In Support
    user-vm-2         Ready             user   1.15.0-gdch.394225-1.29.12-gke.800    In Support
    

API

  • Liste os clusters do Kubernetes disponíveis da zona:

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

    Substitua o seguinte:

    • MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal.
    • KUBERNETES_CLUSTER_NAMESPACE: o espaço de nomes do cluster. Para clusters partilhados, use o espaço de nomes platform. Para clusters padrão, use o espaço de nomes do projeto do cluster.

    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
    

Liste as versões do Kubernetes disponíveis para um cluster

Pode listar as versões do Kubernetes disponíveis na zona do GDC para validar as funcionalidades do Kubernetes às quais pode aceder no cluster.

  • Liste as versões do Kubernetes disponíveis na sua zona:

    kubectl get userclustermetadata.upgrade.private.gdc.goog \
        -o=custom-columns=K8S-VERSION:.spec.kubernetesVersion \
        --kubeconfig MANAGEMENT_API_SERVER
    

    Substitua MANAGEMENT_API_SERVER pelo ficheiro kubeconfig do servidor da API zonal do cluster.

    O resultado é semelhante ao seguinte:

    K8S-VERSION
    1.25.10-gke.2100
    1.26.5-gke.2100
    1.27.4-gke.500
    

Veja as propriedades que podem ser atualizadas

Para cada cluster do Kubernetes, está disponível um conjunto de propriedades para alteração após a criação. Só pode alterar as propriedades mutáveis que se encontram na spec do recurso personalizado Cluster. Nem todas as propriedades na spec são elegíveis para atualização após o aprovisionamento do cluster. Para ver estas propriedades que podem ser atualizadas, 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 Editar ícone.

API

  • Veja a lista de propriedades da `spec` do 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.

    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 CLI kubectl. Por exemplo, pode redimensionar um node pool.

O que se segue?