일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- AI
- CloudWatch
- 정보처리기사 실기
- 코틀린 코루틴의 정석
- AWS EKS
- 공부
- CKA 기출문제
- mysql 튜닝
- kotlin
- kotlin coroutine
- Elasticsearch
- Java
- 오블완
- 정보처리기사 실기 기출문제
- CKA
- Pinpoint
- Kubernetes
- PETERICA
- Spring
- minikube
- Linux
- APM
- 정보처리기사실기 기출문제
- IntelliJ
- MySQL
- kotlin spring
- aws
- 티스토리챌린지
- kotlin querydsl
- 기록으로 실력을 쌓자
- Today
- Total
피터의 개발이야기
[EKS] 쿠버네티스 etcd 클러스터 백업, #1 ETCD란, 백업과 복원을 위한 2가지 방법 본문
ㅁ 개요
AWS EKS 백업을 하는 방법을 공부하였다. 공부의 목적인 EKS 백업을 위한 방법을 찾기 위한 목적이었지만, 레퍼런스 검증단계에서 etcd 내장 스냅샷 기능으로는 AWS EKS를 백업할 수 없었다. 그래서 대안으로 Velero를 이용한 EKS 백업 및 복구하는 방법까지 정리하게 되었다. 공부가 진행되면서 글이 길어져서 Etcd의 개념과 백업 복구의 필요성에 대해서 설명하고 etcd 백업하는 두가지 방법에 대해서 총 3편으로 글을 쓰게 되었다.
1편
kubernetes에게 Etcd란?
kubernetes 백업의 필요성
Etcd의 백업 및 복구(Backup and Restore)
Etcd의 백업의 두가지 방법
2편
etcd 내장 스냅샷
3편
Velero를 이용한 AWS EKS 백업 복구 방법
ㅁ kubernetes에게 Etcd란?
Etcd는 key:value 형태의 데이터를 저장하는 스토리지이다. etcd는 모든 클러스터 데이터에 대한 Kubernetes의 백업 저장소로 사용되는 일관되고 고가용성 키 값 저장소이다. etcd가 다운된다면 Kubernetes 클러스터는 제대로 동작하지 못하게 되므로 높은 신뢰성을 제공해야 한다. 그래서 Etcd는 Replicated state machine(이하 RSM)이다. RSM이라는 분산 컴퓨팅 환경에서 서버가 몇 개 다운되어도 서비스가 잘 동작하기 위해, 똑같은 데이터를 여러 서버에 계속하여 복제하고 있다. Etcd는 일종의 데이터 저장소 이고 이를 안정성을 위해 분산 다중화 하고 있다. 이에 대해서 보다 자세한 설명은 [Kubernetes 운영을 위한 etcd 기본 동작 원리의 이해]에서 확인 할 수 있다. 이번 글의 주제인 백업과 복원에 대해서 이야기하고자 한다.
ㅁ kubernetes 백업의 필요성
etcd는 모든 클러스터 데이터에 대한 Kubernetes의 백업 저장소로 사용되는 일관되고 고가용성 키 값 저장소이다. Kubernetes 클러스터가 etcd를 백업 저장소로 사용 하는 경우 해당 데이터에 대한 백업 계획이 필요하다. etcd 클러스터 데이터를 주기적으로 백업하는 것은 모든 컨트롤 플레인 노드 손실과 같은 재해 시나리오에서 Kubernetes 클러스터를 복구하는 데 중요하다.
재해에는 다음과 같은 상황이 발생할 수 있을 것이다.
ㅇ 휴먼에러
- 누군가 실수로 네임 스페이스를 삭제
- kubernetes 오브젝트 변경 실패 시:
보통 이런 경우 kubectl get object -o yaml 로 설정정보를 백업하고 실행하면 단위실행 건에 대해서는 복원할 수 있다.
- Kubernetes API 업그레이드에 실패 시 원복
- 클러스터를 복구 불가능한 상태 발생:
나의 경우 최근 개발계 부하테스트를 위한 성능 변경 작업 시 EKS + CloudFormation으로 워크노드 구성 중 기존 AutoScale 그룹의 자동조정 이벤트를 지웠어야 했는데, 그룹 자체를 지우면서 복구 불능 상태에 빠진 것이 있다.
ㅇ EKS 업그레이드 작업 시 백업
- 현재 EKS 업그레이드 작업 중이며, 혹시 모를 원복 작업을 위해 백업을 하고 있다.(이번 글을 쓰게 된 이유)
ㅇ EKS 복제작업:
- 한 환경에서 다른 환경으로 Kubernetes 클러스터 마이그레이션.
ㅁ Etcd의 백업 및 복구(Backup and Restore)
Etcd는 예기치 못한 사고로 인한 etcd 데이터베이스 유실을 대비하기 위해 backup API를 제공한다. Database backup snapshot은 etcd 프로세스가 commit한 데이터베이스 파일을 백업한다. 실질적으로 etcd의 backup은 etcd 데이터 파일경로(data dir)에 존재하는 db 파일을 백업하는 것이다.
Backup 파일로부터 etcd를 복구하는 것은 두 단계로 나누어 진행할 수 있습니다. 먼저 db 파일을 호스트 OS의 특정 경로(dir)에 옮겨두고, 새로운 etcd를 시작시키면 된다. 단, etcd 서버와 클러스터가 새로운 메타데이터를 가지고 시작할 수 있게 정보를 주어야 하고, etcd 클러스터는 새로운 메타데이터로 db를 덮어쓰기(overwrite)하고 동작을 시작한다.
ㅁ Etcd의 백업의 두가지 방법
구체적인 백업 방법은 크게 두가지 이다.
1. etcd 클러스터 백업
1) etcd 내장 스냅샷
2) 볼륨 스냅샷
2. Velero를 이용한 EKS 백업 및 복구
ㅇ etcd 클러스터 백업
etcd 클러스터 백업 기능은 저장도구인 etcd 자체의 스냅샷 기능을 이용하는 것이다. 그렇기 때문에 etcd에 통신할 수 있는 etcdctl과 etcdctl를 응답해 줄 객체가 반드시 있어야 한다. 그래서 etcd 백업은 실제적으로 AWS EKS에서는 작업이 불가능하였다. AWS EKS의 경우 자체적으로 etcd를 관리하고 있기 때문이다.
예를 들어 minikube로 로컬에 kubernetes master 클러스터를 직접 구성한 경우 etcd가 kube-system의 파드로 구성되어 있는데, 이런 경우는 etcd 내장 스냅샷을 이용한 백업이 가능하다.
ㅇ AWS EKS인 경우 etcd 클러스터 백업이 불가한 이유
AWS EKS인 경우 kube-system에 etcd가 존재하지 않고 aws EKS 내부에 자체적으로 관리되고 있다. Amazon EKS 클러스터에는 Amazon EKS 컨트롤 플레인와 데이터 저장 노드가 포함된다.
Amazon EKS 컨트롤 플레인에는 etcd 및 Kubernetes API 서버와 같은 Kubernetes 소프트웨어를 실행하는 컨트롤 플레인 노드가 포함되어 있다. 컨트롤 플레인은 AWS에서 관리하는 계정에서 실행되며, Kubernetes API는 클러스터와 연결된 Amazon EKS 엔드포인트를 통해 노출된다. 각 Amazon EKS 클러스터 제어 영역은 단일 테넌트이고 고유하며 자체 Amazon EC2 인스턴스로 실행된다.
etcd 노드에 의해 저장된 모든 데이터 및 연결된 Amazon EBS 볼륨은 AWS KMS를 사용하여 암호화된다. 클러스터 제어 플레인은 여러 가용 영역에 프로비저닝되고 Elastic Load Balancing Network Load Balancer와 마주한다. Amazon EKS는 또한 VPC 서브넷의 탄력적 네트워크 인터페이스를 프로비저닝하여 제어 영역 인스턴스에서 노드(예: kubectl exec logs proxy 데이터 흐름)로의 연결을 제공한다. 이런 경우, Velero를 이용한 EKS 백업 복구 방법이 있다.
현재 나의 목표은 AWS EKS의 백업 방법을 찾는 것이기 때문에 Velero를 이용한 방법으로 진행할 예정이다. 그렇지만 공부하는 과정에서 알게 된 etcd 클러스터 백업 방법도 공부차원에서 etcd 클러스터 백업 & 복구 방법으로 정리하려고 한다.
아래의 글은 etcd-client를 통해 AWS EKS의 etcd에 접속하여 스냅샷 백업을 시도하기 위하 etcd-client를 설치하는 과정이다. 하지만 결국 여러 시도를 하였지만 (내가 몰라서 인지, 누가 알려주면 좋을듯) 실패하였다. 그래도 etcd-client 설치 과정에 대해서 이력을 남겨본다.
ㅁ etcdctl 설치
ㅇ etcdctl가 없다면 설치다운을 받아야 한다. etcd 다운로드는 이곳을 참조하여 진행하였다.
ㅇ 참고로 설치테스트는 신규 EC2 인스턴스에서 진행하였다.
ETCD_VER=v3.5.5
# choose either URL
GOOGLE_URL=https://storage.googleapis.com/etcd
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GOOGLE_URL}
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
/tmp/etcd-download-test/etcd --version
/tmp/etcd-download-test/etcdctl version
ㅇ git에서 제공되는 etcd 설치 방법에 대한 내용이다.
wget https://github.com/etcd-io/etcd/releases/download/v3.5.5/etcd-v3.5.5-linux-amd64.tar.gz
ㅇ 설치 파일을 다운받았다.
# 압축해제
tar xzvf etcd-v3.5.5-linux-amd64.tar.gz
# 경로 단순화
mv etcd-v3.5.5-linux-amd64 etcdCmd
ㅇ 다운을 풀고, 편하게 실행하기 위해 경로를 단순화 하였다.
# 작동 확인용 버전체크
./etcdctl version
ㅇ etcdctl 가동되는 것을 확인하였다.
ㅁ 함께 보면 좋은 사이트
ㅇ etcd 기본 동작원리를 잘 설명해주는 곳
ㅇ etcd 공식문서에서 제공하는 복구 방법 문헌
ㅇ Amazon EKS 클러스터에는 두 가지 기본 구성 요소 설명
ㅇ Velero 방법을 찾게 해준 곳
'AWS > EKS' 카테고리의 다른 글
[EKS] 쿠버네티스 etcd 클러스터 백업, #3 Velero를 이용한 AWS EKS 백업 복구 방법 (0) | 2022.10.08 |
---|---|
[EKS] 쿠버네티스 etcd 클러스터 백업, #2 etcd 내장 스냅샷 (0) | 2022.10.04 |
[EKS] eksctl 자주사용 명령어 (0) | 2022.10.02 |
[EKS] Amazon EKS 버전 업그레이드, #3 kubectl 설치 또는 업데이트 (0) | 2022.09.29 |
[EKS] Amazon EKS 버전 업그레이드, #1 EKS 클러스터 (0) | 2022.09.28 |