Redefinir nós e excluir clusters

Quando um cluster do GKE em Bare Metal está em processo de instalação, os serviços binários e systemd são instalados nos nós que hospedam esse cluster, e os serviços começam a detectar as portas nos nós.

No entanto, se a instalação do cluster falhar, todos esses binários e serviços precisam ser excluídos. Em outras palavras, os nós precisam ser redefinidos ou limpos na preparação de uma nova tentativa de instalação do cluster. Se os nós não forem redefinidos dessa forma, a próxima tentativa de instalar um cluster neles vai falhar.

Nesta página, descrevemos essa operação de limpeza de nós específicos e como excluir um cluster.

Escolher um método de exclusão

O método usado para excluir um cluster depende do seguinte:

  • O tipo de cluster.
  • Se você quiser limpar apenas nós específicos e não excluir todo o cluster.
  • Como o cluster foi criado.

O GKE em Bare Metal oferece os seguintes métodos de exclusão:

  • O console do Google Cloud ou a Google Cloud CLI:

    • Use o console ou a CLI gcloud para excluir clusters de usuário gerenciados pela API GKE On-Prem. Um cluster de usuário será gerenciado pela API GKE On-Prem se uma das seguintes condições for verdadeira:

  • bmctl:

    • Use bmctl reset nodes para redefinir nós específicos.
    • Use bmctl reset para excluir os seguintes tipos de cluster:

      • Clusters de administração, híbridos e independentes (conhecidos como clusters autogerenciados). Isso inclui clusters de administrador gerenciados pela API GKE On-Prem.
      • Clusters de usuário que não são gerenciados pela API GKE On-Prem.

    Se você usar bmctl para redefinir nós ou excluir um cluster, o comando espera que o arquivo de configuração do cluster esteja no diretório de trabalho atual. Por padrão, o caminho é semelhante a este:

    bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml

    Se você usou a sinalização --workspace-dir para especificar um diretório diferente durante a criação do cluster, use a sinalização para especificar o diretório de trabalho durante a redefinição do cluster.

  • kubectl:

    • Use kubectl delete cluster para excluir apenas clusters de usuário que não são gerenciados pelos clusters da API GKE On-Prem. Não execute o comando em outros tipos de clusters.
    • Se você usar kubectl delete cluster, também precisará excluir o namespace em que o cluster está depois de excluir o cluster.

Depois de excluir um cluster, reinstale-o depois de fazer as alterações de configuração necessárias.

Excluir clusters autogerenciados

Para excluir um cluster de administrador, híbrido ou autônomo, execute o seguinte comando:

bmctl reset --cluster CLUSTER_NAME

No comando, substitua CLUSTER_NAME pelo nome do cluster que você quer redefinir.

A saída do comando bmctl cluster reset será semelhante a esta amostra:

Please check the logs at bmctl-workspace/example-cluster-1/log/reset-20221025-184705/reset.log
[2022-10-25 18:47:11+0000] Creating bootstrap cluster... OK
[2022-10-25 18:48:18+0000] Loading images... OK
[2022-10-25 18:48:18+0000] Waiting for reset jobs to finish...
[2022-10-25 18:48:28+0000] Operation reset in progress: 1       Completed: 0    Failed: 0
...
[2022-10-25 18:50:08+0000] Operation reset in progress: 0       Completed: 1    Failed: 0
[2022-10-25 18:50:08+0000] Flushing logs... OK
[2022-10-25 18:50:08+0000] Deleting GKE Hub member example-cluster-1 in project example-project-12345...
[2022-10-25 18:50:11+0000] Successfully deleted GKE Hub member example-cluster-1 in project example-project-12345
[2022-10-25 18:50:11+0000] Deleting bootstrap cluster... OK

Além de excluir o cluster, o comando exclui a associação do cluster da frota.

Para clusters de administrador gerenciados pela API GKE On-Prem, você também precisa excluir os recursos da API no Google Cloud. Caso contrário, o cluster será exibido na página Clusters do GKE no console do Google Cloud. Use o comando a seguir para excluir os recursos da API GKE On-Prem para um cluster de administrador:

gcloud container bare-metal admin-clusters unenroll CLUSTER_NAME \
    --project=FLEET_HOST_PROJECT_ID \
    --location=REGION \
    --ignore-errors

Substitua:

  • FLEET_HOST_PROJECT_ID: o ID do projeto da frota em que o cluster de administrador era membro.

  • REGION: a região do Google Cloud em que a API GKE On-Prem armazena metadados do cluster.

Uma sinalização --ignore-errors garante que o cancelamento do registro de um recurso de cluster de administrador bare metal seja bem-sucedido, mesmo que ocorram erros durante o cancelamento.

Depois que a exclusão do cluster for concluída, você poderá criar um novo cluster. Para detalhes, consulte a Visão geral da criação de cluster.

Excluir clusters de usuários

Se o cluster de usuário for gerenciado pela API GKE On-Prem, exclua o cluster usando o console ou a CLI gcloud. Caso contrário, use bmctl ou kubectl para excluir o cluster.

bmctl

É possível usar bmctl para excluir clusters de usuário que foram criados com bmctl ou kubectl e que não estão registrados na API GKE On-Prem.

Execute o seguinte comando para excluir um cluster de usuário com bmctl:

bmctl reset --cluster USER_CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG_PATH

No comando, substitua as seguintes entradas por informações específicas ao ambiente:

  • USER_CLUSTER_NAME: o nome do cluster de usuário que você está excluindo.

  • ADMIN_KUBECONFIG_PATH: o caminho para o arquivo kubeconfig do cluster de administrador associado. O bmctl tem suporte para o uso de --kubeconfig como um alias para a sinalização --admin-kubeconfig.

A saída do comando bmctl cluster reset será semelhante a esta amostra:

Please check the logs at bmctl-workspace/example-cluster-1/log/reset-20221025-184705/reset.log
[2022-10-25 18:47:11+0000] Creating bootstrap cluster... OK
[2022-10-25 18:48:18+0000] Loading images... OK
[2022-10-25 18:48:18+0000] Waiting for reset jobs to finish...
[2022-10-25 18:48:28+0000] Operation reset in progress: 1       Completed: 0    Failed: 0
...
[2022-10-25 18:50:08+0000] Operation reset in progress: 0       Completed: 1    Failed: 0
[2022-10-25 18:50:08+0000] Flushing logs... OK
[2022-10-25 18:50:08+0000] Deleting GKE Hub member example-cluster-1 in project example-project-12345...
[2022-10-25 18:50:11+0000] Successfully deleted GKE Hub member example-cluster-1 in project example-project-12345
[2022-10-25 18:50:11+0000] Deleting bootstrap cluster... OK

kubectl

É possível usar kubectl para excluir clusters de usuário que foram criados com bmctl ou kubectl e que não estão registrados na API GKE On-Prem. Para usar kubectl para excluir um cluster de usuário, primeiro exclua o objeto do cluster e, em seguida, o namespace dele. Caso contrário, os jobs para redefinir máquinas não poderão ser criados, e o processo de exclusão poderá ficar travado indefinidamente.

Para excluir um cluster de usuário com kubectl:

  1. Execute este comando para excluir o objeto do cluster:

    kubectl delete cluster USER_CLUSTER_NAME -n USER_CLUSTER_NAMESPACE \
        --kubeconfig ADMIN_KUBECONFIG_PATH

    No comando, substitua as seguintes entradas por informações específicas ao ambiente:

    • USER_CLUSTER_NAME: o nome do cluster de usuário que você está excluindo.

    • USER_CLUSTER_NAMESPACE: o namespace do cluster. Por padrão, os namespaces do cluster para o GKE em Bare Metal são o nome do cluster precedido por cluster-. Por exemplo, se você nomear o cluster test, o namespace terá um nome como cluster-test.

    • ADMIN_KUBECONFIG_PATH: o caminho para o arquivo kubeconfig do cluster de administrador associado.

  2. Depois que o cluster for excluído, execute o seguinte comando para excluir o namespace:

    kubectl delete namespace USER_CLUSTER_NAMESPACE --kubeconfig ADMIN_KUBECONFIG_PATH

Console

Se o cluster de usuário for gerenciado pela API GKE On-Prem, siga estas etapas para excluí-lo:

  1. No console, acesse a página de visão geral dos clusters do Google Kubernetes Engine.

    Acesse os clusters do GKE

  2. Selecione o projeto do Cloud em que o cluster de usuário está.

  3. Na lista de clusters, clique no cluster que você quer editar.

  4. Na lista de clusters, localize aquele que você quer excluir. Se o Tipo for externo, isso indica que o cluster foi criado usando bmctl e não foi registrado na API GKE On-Prem. Nesse caso, siga as etapas na guia bmctl ou kubectl para excluir o cluster.

    Se o ícone na coluna Status indicar um problema, siga as etapas na guia da CLI gcloud para excluir o cluster. É necessário adicionar a sinalização --ignore-errors ao comando de exclusão.

  5. Clique no nome da programação que você quer excluir.

  6. No painel Detalhes, perto da parte de cima da janela, clique em Excluir.

  7. Quando solicitado a confirmar, insira o nome do cluster e clique em Remover.

CLI da gcloud

Se o cluster de usuário for gerenciado pela API GKE On-Prem, siga as etapas a seguir para excluí-lo em um computador que tenha a gcloud CLI instalada:

  1. Faça login com sua Conta do Google:

    gcloud auth login
    
  2. Atualize os componentes:

    gcloud components update
    
  3. Receba uma lista de clusters para garantir que seja especificado o nome correto do cluster no comando de exclusão:

    gcloud container bare-metal clusters list \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    Substitua:

    • FLEET_HOST_PROJECT_ID: o ID do projeto em que o cluster foi criado.

    • LOCATION: o local do Google Cloud associado ao cluster de usuário.

    O resultado será assim:

    NAME                      LOCATION    VERSION         ADMIN_CLUSTER            STATE
    example-user-cluster-1a   us-west1    1.15.11          example-admin-cluster-1  RUNNING
    
  4. Execute o comando a seguir para excluir o cluster:

    gcloud container bare-metal clusters delete USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --force \
      --allow-missing
    

    Substitua:

    • USER_CLUSTER_NAME: o nome do cluster de usuário a ser verificado.

    • FLEET_HOST_PROJECT_ID: o ID do projeto em que o cluster foi criado.

    • LOCATION: o local do Google Cloud associado ao cluster de usuário.

    A sinalização --force permite excluir um cluster que tenha pools de nós. Sem a sinalização --force, é necessário excluir os pools de nós primeiro e, em seguida, excluir o cluster.

    A sinalização --allow-missing é uma sinalização padrão da API do Google. Ao incluir essa sinalização, o comando retornará que a operação foi bem-sucedida, se o cluster não for encontrado.

    Se o comando retornar um erro que contenha o texto failed connecting to the cluster's control plane, isso indica problemas de conectividade com o cluster de administrador, o agente do Connect ou no ambiente local. Para resolver problemas com o agente do Connect, confira Como coletar registros do agente do Connect.

    • Se você acha que o problema de conectividade é temporário, por exemplo, por causa de problemas de rede, aguarde e execute o comando novamente.

    • Se você souber que o cluster de administrador foi excluído e se as máquinas de nós do administrador ou do cluster de usuário tiverem sido encerradas ou off-line, inclua a sinalização --ignore-errors e tente executar o comando novamente.

      Também será necessário incluir --ignore-errors se o cluster foi excluído usando bmctl ou kubectl, o que deixa os recursos da API GKE On-Prem no Google Cloud. Um sintoma disso é que o cluster ainda é exibido na página Clusters do GKE no console em um estado não íntegro.

Para informações sobre outras sinalizações, consulte a referência da CLI gcloud.

Redefinir nós de cluster específicos

A redefinição de nós específicos é útil se, por exemplo, um cluster de administrador for excluído, mas os clusters de usuário gerenciados por esse cluster de administrador permanecerem. Nesse caso, não é possível excluir os clusters de usuário como um todo porque o cluster de administrador foi excluído. Assim, os nós dos clusters de usuário precisam ser redefinidos individualmente.

Para redefinir nós, você precisa de uma conta de serviço com acesso de leitura ao Google Container Registry (GCR). O comando bmctl espera que o arquivo de chave JSON dessa conta de serviço seja um argumento. Para redefinir nós individuais de um cluster, execute o seguinte comando:

bmctl reset nodes --addresses NODE_1_IP_ADDRESS,NODE_2_IP_ADDRESS \
    --ssh-private-key-path SSH_KEY_PATH \
    --gcr-service-account-key SERVICE_ACCOUNT_KEY_PATH \
    --login-user root

No comando, substitua as seguintes entradas por informações específicas ao ambiente:

  • NODE_1_IP_ADDRESS , NODE_2_IP_ADDRESS: lista separada por vírgulas de endereços IP de nós que você quer excluir.

  • SSH_KEY_PATH: caminho para a chave privada SSH. Essa é a chave que será usada para estabelecer conexões SSH com nós durante a redefinição.

  • SERVICE_ACCOUNT_KEY_PATH: caminho para o arquivo JSON que contém a chave da conta de serviço. A chave concede a permissão bmctl para extrair imagens do Google Container Registry. É possível criar uma chave de conta de serviço usando o console ou a CLI gcloud. Veja detalhes em Como criar e gerenciar chaves da conta de serviço. Outra maneira de criar o arquivo de chave da conta de serviço é executando o comando create config com a sinalização --create-service-accounts. Veja detalhes sobre esse comando em Criar e configurar o cluster de administrador com o bmctl.

Detalhes de exclusão do cluster

Durante a exclusão, o registro de associação à frota, as ativações de armazenamento e os dados do anthos-system StorageClass do cluster são excluídos.

Para todos os nós, as interfaces de túnel usadas para a rede do cluster são removidas, e os seguintes diretórios são excluídos:

  • /etc/kubernetes
  • /etc/cni/net.d
  • /root/.kube
  • /var/lib/kubelet

Para nós do balanceador de carga:

  • Os serviços keepalived e haproxy são excluídos.
  • Os arquivos de configuração de keepalived e haproxy foram excluídos.