서버구축 (WEB,DB)

Kubernetes 클러스터 핵심 데이터 저장소 etcd 백업 및 복원

날으는물고기 2024. 11. 23. 00:25

Kubernetes 클러스터의 안정성과 신뢰성을 유지하기 위해서는 핵심 구성 요소인 etcd의 백업과 복원이 필수적입니다. etcd는 Kubernetes의 모든 상태 정보와 설정 데이터를 저장하는 분산 키-값 저장소로, 장애 발생 시 클러스터의 빠른 복원을 위해서는 정확한 백업 절차를 따르는 것이 중요합니다. etcd 백업 및 복원 방법, 로컬 환경에서 백업 데이터 검증, 그리고 다중 마스터 노드 환경에서의 etcd 클러스터 복구 방법입니다.


etcd 백업의 중요성

etcd는 Kubernetes의 핵심 데이터 저장소로, 모든 클러스터 상태와 구성 정보를 저장합니다. 따라서 etcd의 데이터 손실은 클러스터 전체의 운영에 심각한 영향을 미칠 수 있습니다. 정기적인 etcd 백업은 다음과 같은 이유로 중요합니다.

  • 데이터 손실 방지: 하드웨어 장애, 소프트웨어 버그 또는 인간의 실수로 인한 데이터 손실 방지
  • 빠른 복구: 장애 발생 시 클러스터를 신속하게 이전 상태로 복원
  • 데이터 무결성 유지: 백업을 통해 데이터의 일관성과 무결성을 확인

etcdctl 도구 설정

etcd의 백업 및 복원을 위해서는 etcdctl 도구가 필요합니다. etcdctl은 etcd와 상호 작용할 수 있는 커맨드라인 도구로, etcd의 데이터 관리에 필수적입니다.

etcdctl 설치 확인

Kubernetes 마스터 노드에는 일반적으로 etcdctl이 기본 설치되어 있습니다. 설치 여부는 다음 명령어로 확인할 수 있습니다.

etcdctl version

환경 변수 설정

etcdctl을 사용할 때는 etcd 서버와의 통신을 위해 필요한 인증 정보와 엔드포인트를 환경 변수로 설정해야 합니다.

export ETCDCTL_API=3
export ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt
export ETCDCTL_CERT=/etc/kubernetes/pki/etcd/server.crt
export ETCDCTL_KEY=/etc/kubernetes/pki/etcd/server.key

참고: 경로는 Kubernetes 설치 환경에 따라 다를 수 있으므로, 자신의 환경에 맞게 수정해야 합니다.


etcd 백업 수행 방법

1. etcd 백업 실행

etcd의 모든 데이터를 스냅샷으로 저장하려면 다음 명령어를 실행합니다.

etcdctl --endpoints=https://127.0.0.1:2379 snapshot save /path/to/backup/etcd-snapshot.db
  • /path/to/backup/etcd-snapshot.db: 백업 파일을 저장할 경로와 파일 이름입니다.

예를 들어, 날짜별로 백업합니다.

etcdctl --endpoints=https://127.0.0.1:2379 snapshot save /var/backups/etcd-snapshot-$(date +%Y%m%d).db

2. 백업 파일 권한 설정

백업 파일의 권한을 적절하게 설정하여 보안을 강화합니다.

chmod 600 /path/to/backup/etcd-snapshot.db

백업 확인 및 자동화

1. 백업 상태 확인

백업이 정상적으로 생성되었는지 확인하려면 다음 명령어를 사용합니다.

etcdctl snapshot status /path/to/backup/etcd-snapshot.db

출력 예시

+----------+----------+------------+------------+
|   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| b01bf247 | 35127127 |      10759 |      53 MB |
+----------+----------+------------+------------+

2. 정기 백업 자동화

정기적으로 백업을 수행하기 위해 cron 작업을 설정할 수 있습니다.

0 2 * * * /usr/local/bin/etcdctl --endpoints=https://127.0.0.1:2379 snapshot save /var/backups/etcd-snapshot-$(date +\%Y\%m\%d).db
  • 매일 새벽 2시에 백업이 실행됩니다.
  • 백업 보존 정책을 설정하여 오래된 백업을 자동으로 삭제할 수 있습니다.

백업 복원 절차

1. 백업 복원 명령어

백업 파일을 사용해 etcd를 복원하려면 다음 명령어를 사용합니다.

etcdctl snapshot restore /path/to/backup/etcd-snapshot.db \
  --data-dir /var/lib/etcd-from-backup \
  --initial-cluster etcd-member=https://127.0.0.1:2380 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-advertise-peer-urls https://127.0.0.1:2380
  • --data-dir: 복원된 데이터를 저장할 디렉터리입니다.
  • 복원 후 etcd 서버를 복원된 데이터로 시작해야 합니다.

2. etcd 서버 재시작

복원된 데이터를 사용하여 etcd 서버를 재시작합니다.

etcd --data-dir /var/lib/etcd-from-backup

로컬 etcd 인스턴스에서 백업 데이터 확인

로컬 환경에서 별도의 etcd 인스턴스를 구성하고 백업 데이터를 복원하여 데이터의 무결성을 확인할 수 있습니다.

1. etcd 설치

Linux 환경에서 etcd 설치

# etcd 바이너리 다운로드
wget https://github.com/etcd-io/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-amd64.tar.gz

# 압축 해제
tar xzvf etcd-v3.5.0-linux-amd64.tar.gz

# 실행 파일 이동
sudo mv etcd-v3.5.0-linux-amd64/etcd* /usr/local/bin/

2. 로컬 etcd 인스턴스 실행

# 데이터 디렉터리 생성
sudo mkdir -p /var/lib/etcd

# etcd 서버 실행
etcd --name etcd-server \
  --data-dir /var/lib/etcd \
  --listen-client-urls http://127.0.0.1:2379 \
  --advertise-client-urls http://127.0.0.1:2379

3. 백업 데이터 복원

etcdctl snapshot restore /path/to/backup/etcd-snapshot.db \
  --data-dir /var/lib/etcd-restore \
  --name restored-etcd \
  --initial-cluster restored-etcd=http://127.0.0.1:2380 \
  --initial-advertise-peer-urls http://127.0.0.1:2380

4. 복원된 데이터로 etcd 서버 시작

etcd --name restored-etcd \
  --data-dir /var/lib/etcd-restore \
  --listen-client-urls http://127.0.0.1:2379 \
  --advertise-client-urls http://127.0.0.1:2379 \
  --initial-cluster restored-etcd=http://127.0.0.1:2380 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-advertise-peer-urls http://127.0.0.1:2380

5. 데이터 확인

# 특정 키 조회
etcdctl --endpoints=http://127.0.0.1:2379 get /path/to/your/key

# 전체 키 나열
etcdctl --endpoints=http://127.0.0.1:2379 get "" --prefix --keys-only

6. 데이터 수정 및 추가

# 키-값 추가
etcdctl --endpoints=http://127.0.0.1:2379 put /path/to/new/key "your-value"

# 기존 키 값 수정
etcdctl --endpoints=http://127.0.0.1:2379 put /path/to/your/key "new-value"

7. 클린업

# etcd 서버 종료
pkill etcd

# 데이터 디렉터리 삭제
sudo rm -rf /var/lib/etcd-restore

다중 마스터 노드에서 etcd 클러스터 백업 및 복구

다중 마스터 노드 환경에서 etcd 클러스터를 백업하고 복구하는 방법입니다.

1. 사전 요구사항

  • etcdctl 설치: etcdctl이 설치되어 있어야 합니다.
  • 인증서 파일: ca.crt, server.crt, server.key 파일이 필요합니다.

2. etcdctl 설치 방법

Linux에서 etcdctl 설치

ETCD_VER=v3.4.13
GOOGLE_URL=https://storage.googleapis.com/etcd
DOWNLOAD_URL=${GOOGLE_URL}

# 다운로드 및 설치
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o etcd.tar.gz
tar xzvf etcd.tar.gz
sudo mv etcd-${ETCD_VER}-linux-amd64/etcd* /usr/local/bin/

3. etcdctl 설정

alias etcdctl='ETCDCTL_API=3 etcdctl \
--endpoints=https://[노드IP]:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key'

4. 스냅샷 저장

etcdctl snapshot save /경로/파일명.db

5. 스냅샷 상태 확인

etcdctl snapshot status /경로/파일명.db -w="table"

6. 스냅샷 복원

각 마스터 노드에서 다음과 같이 실행합니다.

 

마스터 노드 1

etcdctl snapshot restore /경로/파일명.db \
  --data-dir /var/lib/etcd \
  --name m1 \
  --initial-cluster "m1=https://[m1_IP]:2380,m2=https://[m2_IP]:2380,m3=https://[m3_IP]:2380" \
  --initial-advertise-peer-urls https://[m1_IP]:2380 \
  --initial-cluster-token="etcd-cluster-1" \
  --skip-hash-check=true

마스터 노드 2 및 3에서도 동일하게 실행하되, --name--initial-advertise-peer-urls를 해당 노드에 맞게 수정합니다.

7. etcd 클러스터 재시작

각 마스터 노드에서 etcd를 시작합니다.

etcd \
  --name m1 \
  --listen-client-urls http://[m1_IP]:2379 \
  --advertise-client-urls http://[m1_IP]:2379 \
  --listen-peer-urls http://[m1_IP]:2380 &

Kubernetes 클러스터에서 etcd의 백업 및 복원 방법입니다. 정기적인 백업과 올바른 복원 절차를 통해 클러스터의 안정성과 데이터 무결성을 유지할 수 있습니다. 특히, 장애 발생 시 빠르게 대응하여 서비스 다운타임을 최소화할 수 있습니다.


참고 자료


Tip: 항상 최신 버전의 etcd 및 Kubernetes 문서를 참고하여 버전 호환성과 새로운 기능에 대한 정보를 확인하시기 바랍니다.

728x90