본문 바로가기
IT 기술/k8s

[k8s] etcd 백업 / 복원 하기

by Geunny 2024. 5. 9.
반응형

사전작업

etcd 를 백업/복원 하기 위해서는 etcdctl 명령어를 통해 진행해야 한다.

만약 작업환경에 etcdctl 이 설치되어 있지 않다면 설치를 한 이후 진행해야 한다.

 

Debian 계열

https://gist.github.com/skynet86/451c42ec3dc883e190aa7c57bc6c2acc

 

Install etcdctl - Ubuntu

Install etcdctl - Ubuntu . GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

RHEL 계열

https://docs.openstack.org/ko_KR/install-guide/environment-etcd-rdo.html

 

RHEL 및 CentOS에서의 Etcd — Installation Guide 문서

RHEL 및 CentOS에서의 Etcd OpenStack 서비스들은 분산 키 잠금 관리, 구성 저장, 서비스가 살아있는지 및 다른 시나리오에 대한 지속적인 추적을 위한 안정적인 분산 키-값 저장소인 Etcd를 사용할 수 있

docs.openstack.org

 

etcd 백업하기

 

https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#snapshot-using-etcdctl-options

 

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 the data. You can find in-depth information a

kubernetes.io

 

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 복원하기.

 

https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#restoring-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 the data. You can find in-depth information a

kubernetes.io

 

이전에 저장한 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

댓글