사전작업
etcd 를 백업/복원 하기 위해서는 etcdctl 명령어를 통해 진행해야 한다.
만약 작업환경에 etcdctl 이 설치되어 있지 않다면 설치를 한 이후 진행해야 한다.
Debian 계열
https://gist.github.com/skynet86/451c42ec3dc883e190aa7c57bc6c2acc
RHEL 계열
https://docs.openstack.org/ko_KR/install-guide/environment-etcd-rdo.html
etcd 백업하기
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>
<trusted-ca-file> , <cert-file> , <key-file> 은 모두 etcd 실행 설정에서 찾아볼수 있다.
해당 설정값은 /etc/kubernetes/manifests/etcd.yaml 에서 확인 가능하다.
<backup-file-location> 은 스넵샷을 저장할 폴더로 지정하면 된다.
강의에서는 /opt/snapshot-pre-boot.db 이름으로 저장하라고 지정함.
etcd 복원하기.
이전에 저장한 etcd 스넵샷 파일을 이용하여 복원(restore) 작업을 수행한다.
먼저 etcdctl 을 통해 스넵샷 파일을 통해 etcd 파일들을 복원하여 폴더에 저장한다.
ETCDCTL_API=3 etcdctl --data-dir <data-dir-location> snapshot restore <backup-file>
<backup-file> 에는 위에서 진행되었던 /opt/snapshot-pre-boot.db 를 입력하여 위에 저장했던 etcd 의 스넵샷 정보를 이용하여 복원 파일을 만들어 준다.
이후 etcd 의 manifest 파일에서 경로를 수정하여 위에 생성한 디렉토리 경로를 바라보게 만들어 준다.
etcd 설정 파일경로 /etc/kubernetes/manifests/etcd.yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
kubeadm.kubernetes.io/etcd.advertise-client-urls: https://192.168.64.30:2379
creationTimestamp: null
labels:
component: etcd
tier: control-plane
name: etcd
namespace: kube-system
spec:
containers:
- command:
- etcd
- --advertise-client-urls=https://192.168.64.30:2379
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --client-cert-auth=true
- --data-dir=/var/lib/etcd
- --experimental-initial-corrupt-check=true
- --experimental-watch-progress-notify-interval=5s
- --initial-advertise-peer-urls=https://192.168.64.30:2380
- --initial-cluster=k8s-master=https://192.168.64.30:2380
- --key-file=/etc/kubernetes/pki/etcd/server.key
- --listen-client-urls=https://127.0.0.1:2379,https://192.168.64.30:2379
- --listen-metrics-urls=http://127.0.0.1:2381
- --listen-peer-urls=https://192.168.64.30:2380
- --name=k8s-master
- --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: registry.k8s.io/etcd:3.5.7-0
imagePullPolicy: IfNotPresent
livenessProbe:
failureThreshold: 8
httpGet:
host: 127.0.0.1
path: /health?exclude=NOSPACE&serializable=true
port: 2381
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 15
name: etcd
resources:
requests:
cpu: 100m
memory: 100Mi
startupProbe:
failureThreshold: 24
httpGet:
host: 127.0.0.1
path: /health?serializable=false
port: 2381
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 15
volumeMounts:
- mountPath: /var/lib/etcd
name: etcd-data
- mountPath: /etc/kubernetes/pki/etcd
name: etcd-certs
hostNetwork: true
priority: 2000001000
priorityClassName: system-node-critical
securityContext:
seccompProfile:
type: RuntimeDefault
volumes:
- hostPath:
path: /etc/kubernetes/pki/etcd
type: DirectoryOrCreate
name: etcd-certs
- hostPath:
path: /var/lib/etcd
type: DirectoryOrCreate
name: etcd-data
status: {}
위 정보에서 아래 volumes 에서 etcd-data name을 갖는 오브젝트의 path 경로를 /var/lib/etcd 에서 우리가 위에서 생성한 <data-dir-location> 경로로 변경해 주면 kubelet 이 재기동되면서 해당 경로 설정이 적용된다.
'IT 기술 > k8s' 카테고리의 다른 글
[cka] kodecloud PODs 생성하기. (0) | 2024.05.27 |
---|---|
[k8s] kubeadm token 생성하기. (0) | 2024.05.15 |
[k8s] 노드 상태 다루기 [drain/cordon/uncordon] (0) | 2024.04.25 |
[k8s] InitContainer (0) | 2024.04.23 |
[k8s] Secret 정보 암호화하기. (0) | 2024.04.22 |
댓글