해당 페이지는 아래 URL을 참고하여 작성 함
https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster
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란?
- 모든 클러스터 데이터에 대한 kuebernetes의 백업 저장소로 사용되는 일간되고 고가용성 키 값이 저장되는 저장소
etcd 특징
- etc는 홀수 멤버의 클러스터로 실행 함
- etcd는 리더 기반 분산 시스템
- 리소스 요구사항이 보장된 서버에 격리되 환경에서 etcd 클러스터 실행 권고
문서 메뉴얼에 나와있는 홀수 멤버, 리더 기반 분산시스템 이라 함은
Kubenetes 가 quorum 방식의 HA을 지원하기 때문이다.
해당 내용은 현재 범위에 넘어가기에 링크로 대체 한다
https://en.wikipedia.org/wiki/Quorum_(distributed_computing)
- 모든 kubenetes의 모든 객체는 etcd에 저장 됨
etcd 클러스터 백업
- etcd 클러스터 데이터를 주기적으로 백업하는 노드 손실와 같은 장애 대응 복구에 매우 중요
- 스냅샷 파일에는 모든 Kubenetes 상태와 중요 정보가 저장 됨
- Kubenetes 데이터를 안정적으로 유지하기 위해서 스냅샷 저장 필요
1. etcd snapshot
- etcd는 내장 스냅샷을 지원 함
- etcdctl snapshot save 명령어를 통한 스냅샷 방법 or
member/snap/db 파일을 통한 스냅샷 생성
- 스냅샷을 찍더라도 성능에 영향은 없음
※ snapshot save 명령어
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=<trusted-ca-file> --cert=<cert-file> --key=<key-file> \
snapshot save <backup-file-location>
※ endpoint, cacert, cert, key 정보 확인
[root@m-k8s manifests]# cat /etc/kubernetes/manifests/etcd.yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
kubeadm.kubernetes.io/etcd.advertise-client-urls: https://192.168.1.10:2379
creationTimestamp: null
labels:
component: etcd
tier: control-plane
name: etcd
namespace: kube-system
spec:
containers:
- command:
- etcd
- --advertise-client-urls=https://192.168.1.10:2379
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --client-cert-auth=true
- --data-dir=/var/lib/etcd
- --initial-advertise-peer-urls=https://192.168.1.10:2380
- --initial-cluster=m-k8s=https://192.168.1.10:2380
- --key-file=/etc/kubernetes/pki/etcd/server.key
- --listen-client-urls=https://127.0.0.1:2379,https://192.168.1.10:2379
- --listen-metrics-urls=http://127.0.0.1:2381
- --listen-peer-urls=https://192.168.1.10:2380
- --name=m-k8s
- --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
- --peer-client-cert-auth=true
- --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
- --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
- --snapshot-count=10000
- --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
image: k8s.gcr.io/etcd:3.4.3-0
imagePullPolicy: IfNotPresent
livenessProbe:
failureThreshold: 8
httpGet:
host: 127.0.0.1
path: /health
port: 2381
scheme: HTTP
initialDelaySeconds: 15
timeoutSeconds: 15
name: etcd
resources: {}
volumeMounts:
- mountPath: /var/lib/etcd
name: etcd-data
- mountPath: /etc/kubernetes/pki/etcd
name: etcd-certs
hostNetwork: true
priorityClassName: system-cluster-critical
volumes:
- hostPath:
path: /etc/kubernetes/pki/etcd
type: DirectoryOrCreate
name: etcd-certs
- hostPath:
path: /var/lib/etcd
type: DirectoryOrCreate
name: etcd-data
status: {}
--advertise-client-urls, --cert-file, --key-file, --trusted-ca-file 값을 조합하여 명령어 사용
[root@m-k8s manifests]# ETCDCTL_API=3 etcdctl --endpoints https://192.168.1.10:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /root/test
Snapshot saved at /root/test
# ls -al /root
total 15824
....
-rw-r--r--. 1 root root 4038688 Oct 21 18:38 test
/root/test 파일이 생성 됨을 확인
etcd 클러스터 백업
- etcd는 major.minor 버전의 etcd 프로세스에서 가져온 스냅샷에서 복원을 지원함
- etcd의 다른 패치버전을 복원하는 것도 지원
- 실패한 클러스터의 데이터를 복구
- 복원 작업 전 스냅샷 파일 필요
※ 메뉴얼 상 문법
export ETCDCTL_API=3
etcdctl snapshot restore --data-dir <data-dir-location> snapshotdb
※ 명령어 수행
--data-dir은 복구될 될 디렉토리를, snapshotdb에는 백업된 파일 정보 입력
# ETCDCTL_API=3 etcdctl snapshot restore --data-dir /root/restore /root/test
2022-10-21 18:52:10.859808 I | mvcc: restore compact to 75799
2022-10-21 18:52:10.864177 I | etcdserver/membership: added member 8e9e05c52164694d [http://localhost:2380] to cluster cdf818194e3a8c32
# tree /root/restore/
/root/restore/
`-- member
|-- snap
| |-- 0000000000000001-0000000000000001.snap
| `-- db
`-- wal
`-- 0000000000000000-0000000000000000.wal
파일 복구 후 /etc/kubernetes/manifests/etcd.yaml 내 --data-dir, etcd-data의 mountPath 변경 필요
apiVersion: v1
kind: Pod
metadata:
annotations:
kubeadm.kubernetes.io/etcd.advertise-client-urls: https://192.168.1.10:2379
creationTimestamp: null
labels:
component: etcd
tier: control-plane
name: etcd
namespace: kube-system
spec:
containers:
- command:
- etcd
- --advertise-client-urls=https://192.168.1.10:2379
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --client-cert-auth=true
- --data-dir=/root/restore
....
volumeMounts:
- mountPath: /root/restore
name: etcd-data
- mountPath: /etc/kubernetes/pki/etcd
name: etcd-certs
hostNetwork: true
priorityClassName: system-cluster-critical
volumes:
- hostPath:
path: /etc/kubernetes/pki/etcd
type: DirectoryOrCreate
name: etcd-certs
- hostPath:
path: /var/lib/etcd
type: DirectoryOrCreate
name: etcd-data
status: {}
정상적으로 수행된 경우 pod가 정상적으로 나온다
# kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-99c9b6f64-wgjpw 1/1 Running 0 8h
kube-system calico-node-grvm8 1/1 Running 0 8h
kube-system calico-node-h6vvv 1/1 Running 0 8h
kube-system calico-node-k49xh 1/1 Running 0 8h
kube-system calico-node-n2wjq 1/1 Running 0 8h
kube-system coredns-66bff467f8-nmnvc 1/1 Running 0 8h
kube-system coredns-66bff467f8-r89xr 1/1 Running 0 8h
kube-system etcd-m-k8s 1/1 Running 0 8h
kube-system kube-apiserver-m-k8s 1/1 Running 0 8h
kube-system kube-controller-manager-m-k8s 1/1 Running 0 8h
kube-system kube-proxy-8gcv6 1/1 Running 0 8h
kube-system kube-proxy-bpdn2 1/1 Running 0 8h
kube-system kube-proxy-f2jsf 1/1 Running 0 8h
kube-system kube-proxy-vvm6n 1/1 Running 0 8h
kube-system kube-scheduler-m-k8s 1/1 Running 0 8h
제대로 반영되지 않은 경우 아래와 같이 아무런 정보가 나오지 않으며, yaml 파일 재확인이 필요
# kubectl get pods -A
No resources found
'kubernetes' 카테고리의 다른 글
[kubernetes] static pod란 (0) | 2022.10.31 |
---|---|
[kubernetes] pod란? (0) | 2022.10.26 |
[kubernetes] namespace 란? (0) | 2022.10.21 |
[kubernetes] kubernertes Component (0) | 2022.10.21 |