본문 바로가기

자격증/CKA

[CKA] ETCD Backup&Restore

반응형

CKA 시험 유형

작업 시스템 : k8s-master
https://127.0.0.1:2379에서 실행 중인 기존 etcd 인스턴스의 스냅샷을 생성하여 스냅샷을 /data/etcd-snapthot.db에 저장합니다. 다음으로 /data/etcd-snapshot-previous.db에 있는 기존의 이전 스냅샷을 복원합니다.

 

etcdctl을 사용하여 서버에 연결하기 위해 다음 TLS 인증서/키가 제공됩니다.
CA certificate: /etc/kubernetes/pki/etcd/ca.crt
Client certificate: /etc/kubernetes/pki/etcd/server.crt
Client key: /etc/kubernetes/pki/etcd/server.key

 

etcd

 - CoreOS 가 만든 key:value 형태의 분산 데이터 스토리지

 - 고가용성을 위해 여러 곳에 분산되어 동기화

 - 쿠버네티스 클러스터의 정보를 저장

 - 모든 etcd 데이터는 /var/lib/etcd에 보관

 

etcd 설치 확인

- k8s 마스터 노드에 접근 후(ex. ssh k8s-master) etcd 버전과 etcdctl 툴 설치 확인

# etcd --version
etcd Version: 3.2.26
Git SHA: Not provided (use ./build instead of go build)
Go Version: go1.13.8
Go OS/Arch: linux/amd64

# etcdctl --version
etcdctl version: 3.2.26
API version: 2

 

/var/lib/etcd 확인

# tree /var/lib/etcd
/var/lib/etcd
└── member
    ├── snap
    │   ├── 000000000000001c-0000000000035b76.snap
    │   ├── 000000000000001d-0000000000038287.snap
    │   ├── 000000000000001e-000000000003a998.snap
    │   ├── 000000000000001f-000000000003d0a9.snap
    │   ├── 0000000000000021-000000000003f7ba.snap
    │   └── db
    └── wal
        ├── 0.tmp
        ├── 0000000000000000-0000000000000000.wal
        ├── 0000000000000001-0000000000015e1d.wal
        ├── 0000000000000002-000000000002a9dc.wal
        └── 0000000000000003-000000000003e7ac.wal

3 directories, 11 files

 

etcd는 하나의 pod로 동작

# kubectl get pod -n kube-system
NAME                                         READY   STATUS    RESTARTS         AGE
coredns-565d847f94-k9kvr                     1/1     Running   28 (85m ago)     94d
coredns-565d847f94-tdhmn                     1/1     Running   28 (85m ago)     94d
etcd-master.example.com                      1/1     Running   0                94d
kube-apiserver-master.example.com            1/1     Running   33 (10m ago)     94d
kube-controller-manager-master.example.com   1/1     Running   35 (2m31s ago)   94d
kube-proxy-6529g                             1/1     Running   29 (85m ago)     94d
kube-proxy-skhgb                             1/1     Running   33 (26m ago)     94d
kube-proxy-x5gsk                             1/1     Running   28 (25m ago)     94d
kube-scheduler-master.example.com            1/1     Running   35 (2m30s ago)   94d
metrics-server-7bc5695bdf-dcn54              1/1     Running   14 (25m ago)     78m
weave-net-bwqrp                              2/2     Running   60 (85m ago)     94d
weave-net-r8v7n                              2/2     Running   59 (25m ago)     94d
weave-net-t92nl                              2/2     Running   68 (26m ago)     94d

 

Backup & Restore는 쿠버네티스 공식 문서를 참고해서 진행

https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/

 

Operating etcd clusters for Kubernetes

etcd is a consistent and highly-available key value store used as Kubernetes' backing store for all cluster data. If your Kubernetes cluster uses etcd as its backing store, make sure you have a back up plan for those data. You can find in-depth information

kubernetes.io

 

etcd Backup

 - 실행 중인 기존 etcd 인스턴스의 스냅샷을 생성하고 스냅샷을 /data/etcd-snaphost.db 로 저장

 - 현재 deploy-nignx pod 3개 실행

# ssh k8s-master
# sudo 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 /data/etcd-snapshot.db

# kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
deploy-nginx-5cfbcf5f65-5tl6w   1/1     Running   0          20s
deploy-nginx-5cfbcf5f65-mrfwm   1/1     Running   0          20s
deploy-nginx-5cfbcf5f65-twrq6   1/1     Running   0          20s

  

etcd Restore

 - /data/etcd-snapshot-previous.db에 있는 기존의 이전 스냅샷을 복원

 - pod가 실행되지 않은 상태

 - etcd.yaml 파일에 이전 스냅샷을 저장한 경로로 변경

 - 변경 후 시간이 지나면 자동으로 설정이 적용되며 pod 확인시 복원된 스냅샷 설정으로 변경된 것을 확인할 수 있음

# ETCDCTL_API=3 etcdctl snapshot restore --data-dir /var/lib/etcd-new /data/etcd-snapshot-previous.db

# tree /var/lib/etcd-new
/var/lib/etcd-new
└── member
    ├── snap
    │   ├── 0000000000000001-0000000000000001.snap
    │   └── db
    └── wal
        └── 0000000000000000-0000000000000000.wal

3 directories, 3 files

# vi /etc/kubernetes/manifests/etcd.yaml
....
  - hostPath:
      path: /var/lib/etcd-new
      type: DirectoryOrCreate
    name: etcd-data
    
# kubectl get pod
No resources found in default namespace.

 

 

[참고]

 - https://www.youtube.com/watch?v=dv_5WCYS5P8&list=PLApuRlvrZKojqx9-wIvWP3MPtgy2B372f&index=4

 - https://velog.io/@khyup0629/K8S-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95

 

반응형

'자격증 > CKA' 카테고리의 다른 글

[CKA] Deployment & Pod Scale  (0) 2023.03.14
[CKA] Side-car Container Pod 실행  (0) 2023.03.12
[CKA] multi-container Pod 생성  (0) 2023.03.05
[CKA] Static Pod 생성  (0) 2023.03.05
[CKA] Pod 생성하기  (0) 2023.03.04