Manter clusters do Kubernetes

O Google Distributed Cloud (GDC) com isolamento físico permite gerenciar os clusters do Kubernetes após a criação usando o GKE no GDC. Esse serviço permite que você se adapte aos requisitos em evolução da carga de trabalho do contêiner e mantenha os nós de cluster atuais com os seguintes fluxos de trabalho:

Este documento é destinado a administradores de TI do grupo de administradores de plataforma que gerenciam cargas de trabalho de contêiner hospedadas em clusters que abrangem vários projetos e a desenvolvedores do grupo de operadores de aplicativos que são responsáveis por criar cargas de trabalho de aplicativos em um único projeto. Para mais informações, consulte Públicos-alvo da documentação do GDC com isolamento físico.

Antes de começar

Para concluir as tarefas neste documento, solicite as permissões necessárias e prepare seu ambiente.

Solicitar papéis do IAM

Você precisa ter papéis específicos para receber as permissões necessárias para manter o cluster do Kubernetes. Os papéis necessários dependem de você estar trabalhando em um cluster compartilhado com escopo de organização ou em um cluster padrão com escopo de projeto. Para mais informações, consulte Configurações de cluster do Kubernetes.

Papéis de cluster compartilhados

Para visualizar e manter o cluster compartilhado do Kubernetes e os recursos dele, peça ao administrador da organização do IAM para conceder a você os seguintes papéis com base na tarefa a ser executada:

  • Criador de projetos (project-creator): criar ou visualizar recursos do projeto. Esse papel é necessário para anexar um cluster compartilhado a um projeto.

  • Editor do projeto (project-editor): excluir, atualizar ou visualizar recursos do projeto. Esse papel é necessário para remover um cluster compartilhado de um projeto.

  • Leitor de cluster de usuário (user-cluster-viewer): visualizar o cluster compartilhado e os recursos dele. Esse papel fornece acesso às APIs do plano de gerenciamento para o cluster compartilhado hospedado no servidor da API de gerenciamento.

Esses papéis não estão vinculados a um namespace de projeto.

Papéis de cluster padrão

Para visualizar o cluster padrão do Kubernetes e os recursos dele, peça ao administrador do projeto do IAM para conceder a você o papel de Leitor de cluster padrão (standard-cluster-viewer). Esse papel fornece acesso às APIs do plano de gerenciamento para o cluster padrão hospedado no servidor da API de gerenciamento.

Esse papel está vinculado ao namespace do projeto.

Preparar o ambiente

Para executar comandos em um cluster do Kubernetes usando a API, verifique se você 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.

  • Faça login e gere o arquivo kubeconfig para o servidor de API de gerenciamento.

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

Mover clusters na hierarquia do projeto

Os projetos fornecem agrupamento lógico de instâncias de serviço. É possível adicionar e remover clusters compartilhados do Kubernetes da hierarquia de projetos do GDC para agrupar os serviços de maneira adequada. Não é possível mover clusters padrão na hierarquia do projeto, porque eles têm escopo apenas para um único projeto.

Anexar projeto a um cluster compartilhado

Ao criar um cluster compartilhado no console do GDC, é necessário anexar pelo menos um projeto antes de implantar cargas de trabalho de contêiner nele. Se você precisar adicionar mais projetos a um cluster, siga estas etapas:

Console

  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 que será anexado ao cluster.
  5. Clique em Salvar.

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:

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

Terraform

  1. Em um arquivo de configuração do Terraform, insira o snippet de código a seguir 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:

    • MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor de API zonal.
    • PROJECT_BINDING_RESOURCE_NAME: o nome do recurso do Terraform da vinculação do projeto, como CLUSTER_NAME-PROJECT_NAME-binding. Esse nome é usado pelo Terraform para identificar a vinculaçã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, um ProjectBinding exclusivo precisará ser criado para cada cluster.
    • PROJECT_NAME: o nome do projeto a ser vinculado. Cada recurso ProjectBinding só pode ser mapeado para um cluster. Se um projeto exigir acesso a vários clusters, um ProjectBinding exclusivo precisará ser criado para cada cluster.
  2. Aplique a nova vinculação do projeto:

    terraform apply
    

Remover o projeto de um cluster compartilhado

A remoção de um projeto de um cluster compartilhado pode introduzir mudanças significativas, como a exclusão de cargas de trabalho em execução no cluster. Entenda as consequências antes de remover um projeto de um cluster compartilhado.

Para remover um projeto de um cluster compartilhado, siga estas etapas:

Console

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

API

  • Exclua o recurso ProjectBinding que vincula o projeto e o cluster:

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

    Substitua:

    • MANAGEMENT_API_SERVER: o caminho do kubeconfig do servidor de API zonal.
    • CLUSTER_NAME: o nome do cluster.
    • PROJECT_NAME: o nome do projeto a ser removido do cluster.

Terraform

  • Exclua o recurso de vinculação do projeto:

    terraform destroy -target kubernetes_manifest.PROJECT_BINDING_RESOURCE_NAME
    

    Substitua PROJECT_BINDING_RESOURCE_NAME pelo nome do recurso do Terraform da vinculação do projeto a ser excluída, como CLUSTER_NAME-PROJECT_NAME-binding. Esse nome é usado pelo Terraform para identificar a vinculação do projeto e não é usado pelo GDC.

Ver todos os clusters em um projeto ou organização

É possível ver todos os clusters do Kubernetes disponíveis em um projeto ou organização, incluindo status, versões do Kubernetes e outros detalhes.

Como os clusters do Kubernetes são um recurso zonal, só é possível listar clusters por zona.

Console

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

    Os clusters padrão têm escopo de projeto, e os clusters compartilhados têm escopo de organização. Selecione o escopo correto para ver o tipo de cluster do Kubernetes apropriado.

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

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

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

gdcloud

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

    gdcloud clusters list
    

    O resultado será o 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 na zona:

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

    Substitua:

    • MANAGEMENT_API_SERVER: o caminho do kubeconfig do servidor de API da zona.
    • KUBERNETES_CLUSTER_NAMESPACE: o namespace do cluster. Para clusters compartilhados, use o namespace platform. Para clusters padrão, use o namespace do projeto do cluster.

    O resultado será o seguinte:

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

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

É possível listar as versões do Kubernetes disponíveis na zona do GDC para verificar os recursos do Kubernetes que podem ser acessados 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 arquivo kubeconfig do servidor de API zonal do cluster.

    A saída será assim:

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

Ver propriedades atualizáveis

Para cada cluster do Kubernetes, um conjunto de propriedades está disponível para alteração após a criação. Só é possível alterar as propriedades mutáveis que estão no spec do recurso personalizado Cluster. Nem todas as propriedades no spec estão qualificadas para atualização após o provisionamento do cluster. Para conferir essas propriedades atualizáveis, siga estas etapas:

Console

  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 propriedades dele.

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

API

  • 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 MANAGEMENT_API_SERVER
    

    Substitua MANAGEMENT_API_SERVER pelo caminho do kubeconfig do servidor de API zonal.

    O resultado será o 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 essas configurações usando o console do GDC ou a CLI kubectl. Por exemplo, é possível redimensionar um pool de nós.

A seguir