Neste documento, descrevemos como substituir uma réplica do etcd com falha em um cluster de usuário de alta disponibilidade (HA, na sigla em inglês) para o Google Distributed Cloud.
As instruções fornecidas aqui se aplicam a um cluster de usuário de alta disponibilidade que usa kubeception, ou seja, um cluster de usuário que não tem o Controlplane V2 ativado. Se você precisar substituir uma réplica do etcd em um cluster de usuário que tenha o Controlplane V2 ativado, entre em contato com o Cloud Customer Care.
Antes de começar
Verifique se o cluster de administrador está funcionando corretamente.
Verifique se os outros dois membros do etcd no cluster de usuário estão funcionando corretamente. Se mais de um membro do etcd tiver falhado, consulte Recuperação da corrupção ou perda de dados do etcd.
Como substituir uma réplica do etcd com falha
Faça um backup do PodDisruptionBudget (PDB) do etcd para poder restaurá-lo posteriormente.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME get pdb kube-etcd-pdb -o yaml > PATH_TO_PDB_FILE
Em que:
ADMIN_CLUSTER_KUBECONFIG
é o caminho para o arquivo kubeconfig do cluster do administrador.USER_CLUSTER_NAME
é o nome do cluster de usuário que contém a réplica do etcd com falha.PATH_TO_PDB_FILE
é o caminho onde você quer salvar o arquivo PDB etcd. Por exemplo,/tmp/etcpdb.yaml
.
Exclua o PodDisruptionBudget (PDB) do etcd.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME delete pdb kube-etcd-pdb
Execute o seguinte comando para abrir o StatefulSet do kube-etcd no editor de texto:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME edit statefulset kube-etcd
Altere o valor da sinalização
--initial-cluster-state
paraexisting
.containers: - name: kube-etcd ... args: - --initial-cluster-state=existing ...
Drene o nó de réplica do etcd com falha.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG drain NODE_NAME --ignore-daemonsets --delete-local-data
Em que
NODE_NAME
é o nome do nó da réplica do etcd com falha.Crie um novo shell no contêiner de um dos pods do kube-etcd ativo.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG exec -it \ KUBE_ETCD_POD --container kube-etcd --namespace USER_CLUSTER_NAME \ -- bin/sh
Em que
KUBE_ETCD_POD
é o nome do pod de kube-etcd ativo. Por exemplo,kube-etcd-0
.Nesse novo shell, execute os seguintes comandos:
Remova o nó da réplica do etcd com falha do cluster do etcd.
Primeiro, liste todos os membros do cluster do etcd:
etcdctl member list -w table
A saída mostra todos os IDs de membros. Determine o ID do membro da réplica com falha.
Em seguida, remova a réplica com falha:
export ETCDCTL_CACERT=/etcd.local.config/certificates/etcdCA.crt export ETCDCTL_CERT=/etcd.local.config/certificates/etcd.crt export ETCDCTL_CERT=/etcd.local.config/certificates/etcd.crt export ETCDCTL_KEY=/etcd.local.config/certificates/etcd.key export ETCDCTL_ENDPOINTS=https://127.0.0.1:2379 etcdctl member remove MEMBER_ID
Em que
MEMBER_ID
é o ID de membro hexadecimal do pod de réplica do etcd com falha.Adicione um novo membro com o mesmo nome e URL de peer do nó da réplica com falha.
etcdctl member add MEMBER_NAME --peer-urls=https://MEMBER_NAME.kube-etcd:2380
Em que
MEMBER_NAME
é o identificador do nó de réplica kube-etcd com falha. Por exemplo,kube-etcd-1
oukube-etcd2
.
Siga as etapas 1 a 3 de Como implantar os pods de utilitário para criar um pod de utilitário no cluster de administrador. Esse pod é usado para acessar o PersistentVolume (PV) do membro do etcd com falha no cluster do usuário.
Limpe o diretório de dados do etcd no pod de utilitário.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG exec -it -n USER_CLUSTER_NAME etcd-utility-MEMBER_NUMBER -- /bin/bash -c 'rm -rf /var/lib/etcd/*'
Exclua o pod utilitário.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG delete pod -n USER_CLUSTER_NAME etcd-utility-MEMBER_NUMBER
Remova a restrição do nó com falha.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG uncordon NODE_NAME
Abra o kube-etcd StatefulSet no editor de texto.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME edit statefulset kube-etcd
Altere o valor da sinalização
--initial-cluster-state
paraexisting
.containers: - name: kube-etcd ... args: - --initial-cluster-state=existing ...
Restaure o PDB do etcd que foi excluído na etapa 1.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG apply -f /path/to/etcdpdb.yaml