####################### KUBERNETES ETCD FULL LAB (BACKUP + BREAK + RESTORE) #######################
################################ STEP 1: CHECK CLUSTER ############################################
kubectl get nodes
kubectl get pods -A
##############################################################################################
################################ STEP 2: TAKE BACKUP (NO etcdctl ON HOST) ####################
exec -n kube-system etcd-controlnode -- etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key --endpoints=https://127.0.0.1:2379 snapshot save /var/lib/etcd-backup3.db
##############################################################################################
################################ STEP 3: BREAK CLUSTER ########################################
kubectl delete deployment webserver-deployment
kubectl delete pod samplepod
kubectl get all
##############################################################################################
################################ STEP 4: STOP ETCD ############################################
mv /etc/kubernetes/manifests/etcd.yaml /tmp/
# Verify
crictl ps | grep etcd
##############################################################################################
################################ STEP 5: RESTORE SNAPSHOT #####################################
ctr -n k8s.io run --rm -t
--mount type=bind,src=/etc/kubernetes/pki/etcd,dst=/etc/kubernetes/pki/etcd,options=rbind:rw
--mount type=bind,src=/var/lib,dst=/var/lib,options=rbind:rw
registry.k8s.io/etcd:3.5.16-0 etcd-restore sh
# Inside container:
ETCDCTL_API=3 etcdctl snapshot restore /var/lib/etcd/etcd-backup.db
--data-dir=/var/lib/etcd-restore
# VERIFY (VERY IMPORTANT)
echo /var/lib/*
exit
##############################################################################################
################################ STEP 6: UPDATE ETCD MANIFEST #################################
vi /etc/kubernetes/manifests/etcd.yaml
# CHANGE THESE THREE PLACES:
--data-dir=/var/lib/etcd-restore
# volumeMounts:
* mountPath: /var/lib/etcd-restore
# volumes:
path: /var/lib/etcd-restore
##############################################################################################
################################ STEP 7: START ETCD ###########################################
mv /tmp/etcd.yaml /etc/kubernetes/manifests/
# Wait 20–30 seconds
##############################################################################################
################################ STEP 8: FIX AUTH (VERY IMPORTANT) ############################
mv /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/
sleep 5
mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/
mv /etc/kubernetes/manifests/kube-controller-manager.yaml /tmp/
sleep 5
mv /tmp/kube-controller-manager.yaml /etc/kubernetes/manifests/
mv /etc/kubernetes/manifests/kube-scheduler.yaml /tmp/
sleep 5
mv /tmp/kube-scheduler.yaml /etc/kubernetes/manifests/
##############################################################################################
################################ STEP 9: (OPTIONAL) BYPASS AUTH ###############################
vi /etc/kubernetes/manifests/kube-apiserver.yaml
# Add:
--authorization-mode=AlwaysAllow
##############################################################################################
################################ STEP 10: VERIFY ##############################################
crictl ps
ps -ef | grep etcd
kubectl get nodes
kubectl get pods -A
##############################################################################################
################################ FINAL MEMORY #################################################
Backup → Break → Stop → Restore → Fix Mount → Start → Restart Control Plane → Verify
##############################################################################################