Este documento descreve como substituir uma réplica do etcd com falhas num cluster de utilizador de alta disponibilidade (HA) para o Google Distributed Cloud.
As instruções apresentadas aqui aplicam-se a um cluster de utilizadores de HA que usa o kubeception; ou seja, um cluster de utilizadores que não tem o Controlplane V2 ativado. Se precisar de substituir uma réplica do etcd num cluster de utilizadores com o Controlplane V2 ativado, contacte o apoio ao cliente do Google Cloud.
Antes de começar
Certifique-se de que o cluster de administração está a funcionar corretamente.
Certifique-se de que os outros dois membros do etcd no cluster de utilizadores estão a funcionar corretamente. Se falharam mais do que um membro do etcd, consulte o artigo Recuperação de dados danificados ou perdidos do etcd.
Substituir uma réplica do etcd com falhas
Faça uma cópia de segurança do PodDisruptionBudget (PDB) do etcd para que possa restaurá-lo mais tarde.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME get pdb kube-etcd-pdb -o yaml > PATH_TO_PDB_FILE
Onde:
ADMIN_CLUSTER_KUBECONFIGé o caminho para o ficheiro kubeconfig do cluster de administrador.USER_CLUSTER_NAMEé o nome do cluster de utilizadores que contém a réplica do etcd com falhas.PATH_TO_PDB_FILEé o caminho onde quer guardar o ficheiro PDB do etcd, por exemplo,/tmp/etcpdb.yaml.
Elimine 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 seu editor de texto:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME edit statefulset kube-etcd
Altere o valor da flag
--initial-cluster-stateparaexisting.containers: - name: kube-etcd ... args: - --initial-cluster-state=existing ...Esvazie o nó de réplica do etcd com falhas.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG drain NODE_NAME --ignore-daemonsets --delete-local-data
Em que
NODE_NAMEé o nome do nó de réplica do etcd com falha.Crie uma nova shell no contentor de um dos pods kube-etcd em funcionamento.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG exec -it \ KUBE_ETCD_POD --container kube-etcd --namespace USER_CLUSTER_NAME \ -- bin/sh
Onde
KUBE_ETCD_PODé o nome do pod kube-etcd em funcionamento. Por exemplo,kube-etcd-0.Nesta nova shell, execute os seguintes comandos:
Remova o nó de réplica do etcd com falha do cluster etcd.
Primeiro, liste todos os membros do cluster etcd:
etcdctl member list -w table
O resultado 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
Onde
MEMBER_IDé o ID do membro hexadecimal do pod de réplica do etcd com falha.Adicione um novo membro com o mesmo nome e URL de pares que o nó de réplica com falhas.
etcdctl member add MEMBER_NAME --peer-urls=https://MEMBER_NAME.kube-etcd:2380
Em que
MEMBER_NAMEé o identificador do nó de réplica do kube-etcd com falha. Por exemplo,kube-etcd-1oukube-etcd2.
Siga os passos 1 a 3 de Implementar os pods de utilidade para criar um pod de utilidade no cluster de administrador. Este pod é usado para aceder ao PersistentVolume (PV) do membro do etcd com falhas no cluster de utilizador.
Limpe o diretório de dados etcd a partir do pod de utilidade.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG exec -it -n USER_CLUSTER_NAME etcd-utility-MEMBER_NUMBER -- /bin/bash -c 'rm -rf /var/lib/etcd/*'
Elimine o pod de utilidade.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG delete pod -n USER_CLUSTER_NAME etcd-utility-MEMBER_NUMBER
Remova a vedação do nó com falhas.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG uncordon NODE_NAME
Abra o StatefulSet kube-etcd no seu editor de texto.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME edit statefulset kube-etcd
Altere o valor da flag
--initial-cluster-stateparanew.containers: - name: kube-etcd ... args: - --initial-cluster-state=new ...Restaure o PDB do etcd que foi eliminado no passo 1.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG apply -f /path/to/etcdpdb.yaml