Aide-mémoire CKAD
exemple snapshot etcd Kubernetes
etcd garde chaque objet de l’API. snapshot save copie ce stock. snapshot restore écrit un nouveau répertoire sur le nœud — le hostPath du Pod statique doit le monter, sinon le cluster revient vide.
ETCDCTL_API=3 etcdctl endpoint health --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key
ETCDCTL_API=3 etcdctl member list --write-out=table --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key
ETCDCTL_API=3 etcdctl snapshot save /var/lib/etcd-backup.db --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key
etcdutl snapshot status /var/lib/etcd-backup.db --write-out=table
mv /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/kube-apiserver.yaml
mv /etc/kubernetes/manifests/etcd.yaml /tmp/etcd.yaml
etcdutl snapshot restore /var/lib/etcd-backup.db --data-dir=/var/lib/etcd-from-backup --name=controlplane --initial-cluster=controlplane=https://10.0.0.1:2380 --initial-advertise-peer-urls=https://10.0.0.1:2380 --initial-cluster-token=etcd-restore-1
spec:
containers:
- name: etcd
command:
- etcd
- --data-dir=/var/lib/etcd
- --name=controlplane
- --initial-cluster=controlplane=https://10.0.0.1:2380
- --initial-advertise-peer-urls=https://10.0.0.1:2380
- --initial-cluster-token=etcd-restore-1
volumeMounts:
- name: etcd-data
mountPath: /var/lib/etcd
volumes:
- name: etcd-data
hostPath:
path: /var/lib/etcd-from-backup
type: DirectoryOrCreate
mv /tmp/etcd.yaml /etc/kubernetes/manifests/etcd.yaml
mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml
Champs
- etcdctl endpoint
- Membre vivant. https://127.0.0.1:2379 et les certificats sous /etc/kubernetes/pki/etcd/ avec kubeadm — sauf si la tâche en donne d’autres.
- etcdctl member
- Nom et URL peer (port 2380). Ces deux valeurs sont ce que --name et --initial-cluster doivent répéter au restore.
- etcdctl snapshot
- Écrit un fichier depuis un membre vivant. ETCDCTL_API=3. N’arrête pas etcd. Si etcdctl manque, il est souvent seulement dans le Pod statique etcd.
- etcdutl snapshot
- Travaille sur le fichier, pas sur le cluster. Pas de certificats. status affiche hash, revision, clés, taille. restore crée --data-dir et refuse si ce répertoire existe déjà.
- --data-dir
- Chemin dans le conteneur. Le laisser sur /var/lib/etcd. Les fichiers restaurés arrivent par le volume.
- --initial-cluster
- name=https://peer:2380, copié du manifeste. Un membre sur un control plane unique.
- --initial-cluster-token
- Un token nouveau au restore, puis le même token ici. L’ancien token nomme encore l’ancien cluster.
- hostPath.path
- Chemin sur le nœud — le répertoire créé par snapshot restore. Monté sur mountPath, qui reste /var/lib/etcd.
- mv
- Sortir de /etc/kubernetes/manifests arrête le Pod statique. Le remettre le démarre. Éditer le fichier pendant qu’il est dans /tmp.
Pièges
- snapshot restore n’écrase pas /var/lib/etcd. Il crée un nouveau répertoire. Dans le Pod statique, changer seulement hostPath.path vers ce répertoire. Laisser --data-dir et mountPath sur /var/lib/etcd pour que le volume arrive là où etcd l’ouvre.
- Copier le nom du membre et l’URL peer depuis etcdctl member list dans --name, --initial-cluster et --initial-advertise-peer-urls. Le port peer est 2380. Le port client 2379 ne sert qu’à --endpoints.
- Passer un --initial-cluster-token nouveau à snapshot restore et poser le même token dans le Pod statique. L’ancien token nomme encore l’ancien cluster.
- snapshot save, c’est etcdctl, contre un membre vivant, avec les certificats. snapshot status et snapshot restore, c’est etcdutl, sur le fichier, sans certificats. Si etcdutl manque, ETCDCTL_API=3 etcdctl snapshot restore prend les mêmes flags — déprécié, retiré dans etcd 3.6.
- Pas un objet CKAD. Au CKA, utiliser l’endpoint et les chemins de certificats imprimés par la tâche. Ceux-ci sont les défauts kubeadm.
Doc officielle Operating etcd clusters etcd disaster recovery