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.

Un officier sort un cœur mémoire lumineux d’une chambre circulaire dans un hangar sombre. Un officier sort un cœur mémoire lumineux d’une chambre circulaire dans un hangar sombre.
Sauver
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
Arrêter
mv /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/kube-apiserver.yaml
mv /etc/kubernetes/manifests/etcd.yaml /tmp/etcd.yaml
Restaurer
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
Y pointer le Pod statique
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
Démarrer
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

S’entraîner sur un cluster réel →