kubect drain node01 --ignore-daemonsets
Node01의 pod를 다른 node로 배출한다. Pod가 evicted된다.
그리고 drain할 경우, get nodes 시 해당 노드에 Unscheduled가 status인 것을 볼 수 있다. (SchedulingDisabled)
단, ReplicaSet, Job, DaemonSet과 같은 것으로 관리되는 pod인 경우에만 다른 node로 보낼 수 있고, 그렇지 않은 경우 강제로 drain하려고 하면 기존 Node는 완전히 제거된다! 이 pod를 옮기거나 스케쥴을 재조정할 주체가 없기 때문이다.
kubectl uncordon node01
Node를 다시 스케쥴링 가능 상태로 복귀한다.
복귀한다고 해도 기존에 evicted된 pod는 같이 복귀되지 않는다.
신규 pod가 created된 경우에만 해당 node에 생성된다.
kubectl cordon node01
해당 node에 신규 pod가 생성되지 않게 하면서 기존에 배포된 pod도 영향을 받지 않게 한다.
이 경우에도 해당 노드의 Status가 Unscheduled를 의미하는 SchedulingDisabled로 변경된 것을 볼 수 있다.
V1.33.0
cat /etc/release
구성 요소는 다른 릴리즈 버전으로 갈 수 있다.
업그레이드 프로세스는 클러스터 설정에 달려있다. 직접 설치한 경우 직접 업그레이드를 진행해야 한다.
Kubeadm 클러스터 업그레이드 시 먼저 마스터 노드를 업그레이드 한다. 그 이후 워커 노드를 업그레이드 한다.
마스터 노드가 잠시 다운되고 백업 후 업그레이드가 완료되면 다시 정상적으로 작동한다. 이 동안 워커 노드에는 영향이 없으나 마스터 노드로써 작동하지 않으므로 관련 기능도 작동하지 않는다. 그 이후 워커 노드들이 다운, 백업, 업그레이드 후 다시 정상 작동한다.
워커 노드 업그레이드 전략
클러스터를 업그레이드하기 전에 kubeadm을 먼저 업그레이드해라.
시험에서 나오면 공식 문서를 꼭 보고 버전 별로 그대로 하자..
1) 마스터 노드 drain
kubectl drain controlplane
2) 현재 버전 및 업그레이드 가능 버전 확인
apt update
apt-cache madison kubeadm
kubectl get nodes (클러스터 버전 확인)
kubeadm upgrade plan (kubeadm의 안정 업그레이드 버전 확인)
3) 마스터 노드 components 업그레이드
3-1) 마스터 노드 kubeadm 업그레이드
apt-get upgrade -y kubeadm=1.12.0-00
kubeadm upgrade apply v1.12.00
3-2) 마스터 노드 kubelet 업그레이드
apt-get upgrade -y kubelet=1.12.0-00
systemctl daemon-reload
systemctl restart kubelet
이 명령 이후에 master node의 버전이 1.12.0 으로 업그레이드 된다.
4) 마스터 노드 uncordon 으로 node 다시 스케쥴링
kubectl uncordon controlplane
5) 워커 노드 접속
kubectl get nodes -o wide
ssh '워커 노드 internal-ip'
6) 워커 노드 drain
kubectl drain node-1
7) 워커 노드 별 kubeadm / kubelet 업그레이드
apt-get upgrade -y kubeadm=1.12.0
apt-get upgrade -y kubelet=1.12.0-00
kubeadm upgrade node config --kubelet-version v1.12.00
systemctl daemon-reload
systemctl restart kubelet
8) 워커 노드 별 uncordon 으로 node 다시 스케쥴링
kubectl uncordon node-1
9) 그 다음 워커 노드에서도 동일하게 진행한다.
kubectl describe pod etcd-controlplane -n kube-system | grep cert
etcdctl version
etcdctl snapshot save snapshot.db
etcdctl snapshot status
etcdctl snapshot restore snapshot.db --data-dir /newdirectory
systemctl daemon-reload
service etcd restore
service kube-apiserver start
쿠버네티스에서 etcd는 클러스터의 모든 상태 데이터를 저장하는 핵심 Key-Value 저장소입니다.
CKA 시험에서는 etcd 백업 및 복구가 자주 출제되므로, 명령어와 절차를 확실히 익혀야 합니다.
etcdctl version
ETCDCTL_API=3 반드시 지정해야 함 (K8s 기본 etcd 버전: v3)ETCDCTL_API=3 etcdctl --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 snapshot save /backup/etcd-snapshot.db
✅ 주요 옵션
--endpoints → etcd 서버 주소 (보통 127.0.0.1:2379) --cacert → CA 인증서 --cert → 클라이언트 인증서 --key → 클라이언트 키 etcdutl backup --data-dir /var/lib/etcd --backup-dir /backup/etcd-backup
ETCDCTL_API=3 etcdctl snapshot status /backup/etcd-snapshot.db --write-out=table
etcdutl snapshot restore /backup/etcd-snapshot.db --data-dir /var/lib/etcd-restored
/etc/kubernetes/manifests/etcd.yaml 수정 필요 --data-dir=/var/lib/etcd → --data-dir=/var/lib/etcd-restored etcdutl backup으로 만든 디렉토리는 /var/lib/etcd로 복사 후 etcd 재시작 --endpoints 값은 etcd 서버의 IP와 포트(2379)를 의미합니다.
확인 방법:
1. etcd static pod manifest 확인
cat /etc/kubernetes/manifests/etcd.yaml | grep listen-client-urls
출력 예시:
--listen-client-urls=https://127.0.0.1:2379
→ 이 값을 --endpoints에 넣으면 됨.
kubectl -n kube-system describe pod etcd-controlplane | grep 2379.db 복구 (새 data-dir 필요) 클러스터의 etcd 데이터를 /opt/snapshot-pre-restore.db 경로에 백업하세요.
/etc/kubernetes/pki/etcd/ 경로 사용 ✅ 정답 예시:
ETCDCTL_API=3 etcdctl --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 snapshot save /opt/snapshot-pre-restore.db
위에서 생성한 /opt/snapshot-pre-restore.db 스냅샷의 상태를 테이블 형식으로 출력하세요.
✅ 정답 예시:
ETCDCTL_API=3 etcdctl snapshot status /opt/snapshot-pre-restore.db --write-out=table
1번 문제에서 생성한 스냅샷(/opt/snapshot-pre-restore.db)을 /var/lib/etcd-restored로 복원하세요.
✅ 정답 예시:
etcdutl snapshot restore /opt/snapshot-pre-restore.db --data-dir /var/lib/etcd-restored
추가작업
/etc/kubernetes/manifests/etcd.yaml 수정 → --data-dir 값 변경 etcd 서비스를 중지한 상태에서 /var/lib/etcd 데이터를 /backup/etcd-raw 디렉토리에 백업하세요.
✅ 정답 예시:
etcdutl backup --data-dir /var/lib/etcd --backup-dir /backup/etcd-raw
복구 후 kubectl get pods -A 명령어가 정상적으로 출력되는지 확인하세요.
✅ 정답 예시:
kubectl get pods -A
🔥 시험 팁
/etc/kubernetes/pki/etcd/)와 파일명 반드시 외워둘 것. 쿠버네티스에서 etcd는 클러스터의 모든 상태 데이터를 저장하는 핵심 컴포넌트입니다.
etcdctl 명령어로 스냅샷(백업)을 만들 수 있고, etcdutl 명령어로 스냅샷 복구를 할 수 있습니다.
이번 글에서는 etcdutl snapshot restore를 활용한 복구 과정을 정리합니다.
이전에 생성한 스냅샷(/opt/snapshot-pre-boot.db)을 새로운 디렉토리에 복구합니다.
etcdutl snapshot restore /opt/snapshot-pre-boot.db --data-dir /var/lib/etcd-from-backup
/opt/snapshot-pre-boot.db : 백업된 스냅샷 파일 경로 --data-dir : 복구할 etcd 데이터 디렉토리 (기존 /var/lib/etcd 대신 새 경로 지정) ⚠️ 마지막 줄은
\없이 Enter 입력해야 명령어가 실행됩니다.
복구 시 기존/var/lib/etcd가 아닌 별도의 경로를 사용하는 것이 안전합니다.
복구한 데이터를 사용하려면 etcd 매니페스트 파일을 수정해야 합니다.
# /etc/kubernetes/manifests/etcd.yaml
...
volumes:
- hostPath:
path: /var/lib/etcd-from-backup # 복구된 디렉토리로 수정
type: DirectoryOrCreate
name: etcd-data
/var/lib/etcd → /var/lib/etcd-from-backup 으로 변경합니다. /etc/kubernetes/manifests 디렉토리 내의 매니페스트는 static pod이므로, 파일을 저장하면 etcd pod가 자동 재생성됩니다. watch crictl ps
kubectl get deployments,services
ETCD 스냅샷 복구 절차는 다음과 같습니다.
etcdutl snapshot restore로 새 디렉토리에 데이터 복구 /etc/kubernetes/manifests/etcd.yaml에서 hostPath를 복구 경로로 수정 kubectl로 리소스 복구 검증 ✅ 참고:
etcdctl → 백업(snapshop save) etcdutl → 복구(snapshot restore)