Questo documento descrive come sostituire una replica etcd non riuscita in un cluster utente ad alta affidabilità (HA) per Google Distributed Cloud.
Le istruzioni riportate qui si applicano a un cluster utente HA che utilizza kubeception; ovvero un cluster utente in cui non è abilitato Controlplane V2. Se devi sostituire una replica etcd in un cluster utente in cui è abilitato Controlplane V2, contatta l'assistenza clienti Google Cloud.
Prima di iniziare
Assicurati che il cluster di amministrazione funzioni correttamente.
Assicurati che gli altri due membri di etcd nel cluster utente funzionino correttamente. Se si è verificato un errore per più di un membro etcd, vedi Recupero da danneggiamento o perdita di dati etcd.
Sostituzione di una replica etcd non riuscita
Esegui il backup di una copia del PodDisruptionBudget (PDB) di etcd in modo da poterlo ripristinare in un secondo momento.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME get pdb kube-etcd-pdb -o yaml > PATH_TO_PDB_FILE
Dove:
ADMIN_CLUSTER_KUBECONFIG
è il percorso del file kubeconfig per il cluster di amministrazione.USER_CLUSTER_NAME
è il nome del cluster utente che contiene la replica etcd non riuscita.PATH_TO_PDB_FILE
è il percorso in cui vuoi salvare il file PDB etcd, ad esempio/tmp/etcpdb.yaml
.
Elimina il PodDisruptionBudget (PDB) di etcd.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME delete pdb kube-etcd-pdb
Esegui questo comando per aprire StatefulSet di kube-etcd nell'editor di testo:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME edit statefulset kube-etcd
Modifica il valore del flag
--initial-cluster-state
inexisting
.containers: - name: kube-etcd ... args: - --initial-cluster-state=existing ...
Esegui il drain del nodo della replica etcd non riuscita.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG drain NODE_NAME --ignore-daemonsets --delete-local-data
Dove
NODE_NAME
è il nome del nodo della replica etcd non riuscita.Crea una nuova shell nel container di uno dei pod kube-etcd funzionanti.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG exec -it \ KUBE_ETCD_POD --container kube-etcd --namespace USER_CLUSTER_NAME \ -- bin/sh
dove
KUBE_ETCD_POD
è il nome del pod kube-etcd funzionante. Ad esempio,kube-etcd-0
.Da questa nuova shell, esegui i seguenti comandi:
Rimuovi il nodo della replica etcd non riuscita dal cluster etcd.
Innanzitutto, elenca tutti i membri del cluster etcd:
etcdctl member list -w table
L'output mostra tutti gli ID membro. Determina l'ID membro della replica non riuscita.
Poi rimuovi la replica non riuscita:
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
Dove
MEMBER_ID
è l'ID membro esadecimale del pod della replica etcd non riuscita.Aggiungi un nuovo membro con lo stesso nome e lo stesso URL peer del nodo di replica non riuscito.
etcdctl member add MEMBER_NAME --peer-urls=https://MEMBER_NAME.kube-etcd:2380
Dove
MEMBER_NAME
è l'identificatore del nodo di replica kube-etcd non riuscito. Ad esempio,kube-etcd-1
okube-etcd2
.
Segui i passaggi 1-3 della sezione Deployment dei pod di utilità per creare un pod di utilità nel cluster di amministrazione. Questo pod viene utilizzato per accedere al PersistentVolume (PV) del membro etcd non riuscito nel cluster utente.
Pulisci la directory dei dati etcd dall'interno del pod dell'utilità.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG exec -it -n USER_CLUSTER_NAME etcd-utility-MEMBER_NUMBER -- /bin/bash -c 'rm -rf /var/lib/etcd/*'
Elimina il pod dell'utilità.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG delete pod -n USER_CLUSTER_NAME etcd-utility-MEMBER_NUMBER
Rimuovi il contrassegno dal nodo non riuscito.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG uncordon NODE_NAME
Apri lo StatefulSet kube-etcd nell'editor di testo.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME edit statefulset kube-etcd
Modifica il valore del flag
--initial-cluster-state
innew
.containers: - name: kube-etcd ... args: - --initial-cluster-state=new ...
Ripristina il PDB etcd eliminato nel passaggio 1.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG apply -f /path/to/etcdpdb.yaml