
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-boot.db
ETCD 인증서 관련파일들이 위치한 곳에서 etcdctl 커맨드 수행
ETCD의 구성 방식에 따라 복구 방식에 차이가 존재 (Stacked / External)
두 경우 모두 ETCD의 data-dir에 직접적으로 복구하지 않고, 임시 경로에 복구하였다가 Pod/서비스를 재시작해주는 방법을 권고
$ k get po -n kube-system etcd-controlplane -o yaml
...
spec:
containers:
- command:
- etcd
...
- --data-dir=/var/lib/etcd # 현재 ETCD의 data-dir 경로를 확인
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 \
--data-dir /var/lib/etcd-from-backup \ ### 복구할 위치 지정
snapshot restore /opt/snapshot-pre-boot.db ### snapshot 파일명 지정
$ vi etcd.yaml
spec:
containers:
- command:
- etcd
...
- --data-dir=/var/lib/etcd
...
volumeMounts:
- mountPath: /var/lib/etcd-from-backup # 수정
name: etcd-data
...
volumes:
- hostPath:
path: /var/lib/etcd-from-backup # 수정
type: DirectoryOrCreate
name: etcd-data
$ k get po -n kube-system kube-apiserver-controlplane -o yaml | grep etcd
- --etcd-cafile=/etc/kubernetes/pki/etcd/ca.pem
- --etcd-certfile=/etc/kubernetes/pki/etcd/etcd.pem
- --etcd-keyfile=/etc/kubernetes/pki/etcd/etcd-key.pem
- --etcd-servers=https://{{{ETCD 서버 IP}}}:2379
$ systemctl status etcd
● etcd.service - etcd key-value store
Loaded: loaded (/etc/systemd/system/etcd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2024-08-18 14:04:42 UTC; 41min ago
Docs: https://github.com/etcd-io/etcd
Main PID: 833 (etcd)
Tasks: 39 (limit: 251379)
CGroup: /system.slice/etcd.service
└─833 /usr/local/bin/etcd --name etcd-server --data-dir=/var/lib/etcd-data --cert-file=/etc/etcd/pki/etcd.pem --key
...
또는
$ ps -ef | grep etcd
또는
서비스경로에서 etcd.service 파일 확인
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 \
--data-dir /var/lib/etcd-from-backup \ ### 복구할 위치 지정
snapshot restore /opt/snapshot-pre-boot.db ### snapshot 파일명 지정
## 복구한 파일을 기존과 동일하게 변경 (etcd:etcd 로 가정)
$ chown -R etcd:etcd /var/lib/etcd-from-backup
권한이 올바르지 않을 경우 아래와 같은 오류가 발생
Aug 18 14:04:30 etcd-server systemd[1]: systemd-journald.service: Failed to add fd to store: Operation not permitted Aug 18 14:04:30 etcd-server systemd[1]: systemd-journald.service: Failed to add fd to store: Operation not permitted Aug 18 14:04:30 etcd-server systemd[1]: systemd-journald.service: Failed to add fd to store: Operation not permitted Aug 18 14:04:30 etcd-server systemd[1]: systemd-journald.service: Failed to add fd to store: Operation not permitted Aug 18 14:04:30 etcd-server systemd[1]: systemd-journald.service: Failed to add fd to store: Operation not permitted
$ vi etcd.service
...
[Service]
User=etcd
Type=notify
ExecStart=/usr/local/bin/etcd \
--name etcd-server \
--data-dir=/var/lib/etcd-from-backup ## 복구된 경로로 변경
...
$ systemctl daemon-reload
$ systemctl restart etcd
https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/