Redefinir nós e excluir clusters

Quando um cluster do Google Distributed Cloud Virtual para Bare Metal está sendo instalado, os serviços binários e systemd são instalados nos nós que hospedam esse cluster e os serviços são iniciados para detectar 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 Anthos On-Prem. Um cluster de usuário será gerenciado pela API Anthos On-Prem se uma das condições a seguir for verdadeira:

  • bmctl:

    • Use bmctl reset nodes para redefinir nós específicos.
    • Use bmctl reset para excluir clusters de administradores, híbridos e autônomos e clusters de usuários que não são gerenciados pela API Anthos 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 Anthos 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

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 Anthos 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 Anthos no local.

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 Anthos no local. 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 Anthos On-Prem, siga as etapas abaixo para excluí-lo:

  1. No console, acesse a página de clusters do GKE Enterprise.

    Acesse a página de clusters do GKE Enterprise

  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. No painel Detalhes, se o Tipo for Anthos (Bare metal User), siga estas etapas para excluir o cluster:

    1. No painel Detalhes, clique em Ver detalhes.

    2. Próximo à parte superior da janela, clique em Excluir.

    3. Quando solicitado a confirmar, clique em Excluir novamente.

    Se o Tipo for externo, isso indica que o cluster foi criado usando uma ferramenta de linha de comando e que ele não é gerenciado pela API Anthos On-Prem. Nesse caso, use bmctl ou kubectl para excluir o cluster.

CLI da gcloud

Se o cluster de usuário for gerenciado pela API Anthos On-Prem, execute as etapas a seguir para excluir o cluster em um computador que tenha a CLI gcloud 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.14.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 tiver sido excluído usando bmctl ou kubectl, deixando os recursos da API Anthos no local no Google Cloud. Um sintoma é que o cluster ainda é exibido na página Clusters do Anthos no console do Google Cloud 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.