무엇을 백업할 것인가
- 방법 1: YAML object configuration file을 백업
- 방법 2: ETCD를 통째로 백업
두 방법 모두 마운트해 준 Persistant Volume은 따로 백업해주어야 할 것이다
YAML Object Configuration File 백업
- YAML 설정 디렉토리째로 백업하면 되지 않나요?
- 이 경우 SCM (Git같은)에 소스코드와 함께 보관하는 것도 좋다
문제점: Declarative Approach가 권장되는 방법이기는 하지만, 팀에서 누군가가 Imperative하게 Object를 생성/수정해 놓고서 문서화도 안하고 튀었을 수도 있다.
해결책: kube-apiserver에 쿼리하여 현재 사용 중인 리소스 설정을 전부 YAML 형태로 내보내기한다.
kubectl get all --all-namespaces -o yaml > backup.yaml
- 하지만 일부 리소스 그룹은 이것으로 백업이 되지 않는다고 한다
- Velero와 같은 백업전용도구를 사용하는 것도 검토할 수 있음
ETCD 백업
일부 Managed Kubernetes 환경에서는 etcd 클러스터에 접근이 아예 불가능할 수도 있다. 그런 케이스에서는 이런 방법은 사용할 수 없을 것이다
ETCD 데이터 디렉토리째로 백업
etcd는 마스터노드에 위치한다. 만약 etcd의 systemd service 파일이 다음과 같다면,
ExecStart=/usr/local/bin/etcd
--data-dir=/var/lib/etcd
그냥 /var/lib/etcd
를 통째로 복사하면 아무튼 백업이 되는 것이다.
ETCD의 스냅샷 기능을 사용
- 스냅샷 박제:
ETDCTL_API=3 etcdctl snapshot save backup.db
- 스냅샷 확인:
ETCDTL_API=3 etcdctl snapshot status backup.db
스냅샷 복원
kube-apiserver
를 정지한다- kube-apiserver가 의존하는 etcd 클러스터를 재시작해야 하기 때문)
service kube-apiserver stop
- kube-apiserver가 의존하는 etcd 클러스터를 재시작해야 하기 때문)
Snapshot Restore 명령어로 복구한다
(--data-dir 파라미터로 복원 데이터디렉토리를 지정해야 한다)ETDCTL_API=3 etcdctl snapshot restore backup.db --data-dir /var/lib/etcd-restored
이러면 새로운 클러스터 설정으로 복원이 된다
When etcd restores from a backup, it initializes a new cluster configuration and configures the members of etcd as new members to a new cluster. This is to prevent a new member from accidentally joining an existing cluster.ETCD Configuration 파일 (쿠버를 구성한 방법에 따라 Pod definition file 또는 systemd service 파일이 될 수 있음)의
--data-dir=
파라미터를 수정한다
Pod Definition File:
volumes:
- hostPath:
path: /etc/kubernetes/pki/etcd # 이 부분이 아님
type: DirectoryOrCreate
name: etcd-certs
- hostPath:
path: /var/lib/etcd-new # 이 부분!
type: DirectoryOrCreate
name: etcd-data
Systemd service file:
[Service]
User=etcd
Type=notify
ExecStart=/usr/local/bin/etcd \
--name etcd-server \
--data-dir=/var/lib/etcd-data-new \
systemd service file을 사용할 경우 디렉토리 권한에 주의할 것
주의 사항: 실제로는 etcdctl
의 각 명령어에 --endpoints=https://127.0.0.1:2379 --cacert=/etc/etcd/ca.crt --cert=/etc/etcd/etcd-server.crt --key=/etc/etcd/etcd-server.key
같이 etcd 엔드포인트, 인증서 등의 옵션을 명시하여야한다
ETCD member 체크하기
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/etcd/pki/ca.pem --cert=/etc/etcd/pki/etcd.pem --key=/etc/etcd/pki/etcd-key.pem member list
882326955ca7477d, started, etcd-server, https://192.8.185.12:2380, https://192.8.185.12:2379, false
'콤퓨우터 > 필기: KodeKloud CKA 강의' 카테고리의 다른 글
147-152. View Certificate Details and Certificates API (0) | 2024.05.17 |
---|---|
146. TLS in Kubernetes (0) | 2024.05.17 |
122-127. OS Upgrades, Kubernetes Software Versions, Cluster Upgrade Process (0) | 2024.05.17 |
100-104. Environment Variables and Configure Secrets in Application (0) | 2024.05.17 |
96-97. Commands on Docker and Kubernetes (0) | 2024.05.17 |