Kubernetes Cluster의 Node는 크게 두 가지로 구분될 수 있습니다.
Control Plane 노드: 클러스터의 머리 역할
Worker 노드: 사용자가 배포한 컨테이너가 실행되는 곳
etcd 개념
Control Plane 노드에는 다양한 Component로 구성되어 있습니다.
API Server, Controller manager, Scheduler, etcd 등 다양한 Component가 있는데
그중 etcd는 쿠버네티스에서 일어나는 모든 이벤트를 저장하고 있는 저장소입니다.
쉽게 말하면 etcd는 쿠버네티스 클러스터의 데이터베이스입니다.
컨트롤플레인 노드, 마스터 노드에는 모두 kubelet이라는 Pod가 실행됩니다.
이 kubelet Pod에는 cadvisor가 포함되어 있으며 모든 이벤트를 ControlPlane 노드의 API Server로 보내고
API Server는 etcd로 Key: Value 형태로 저장이 됩니다.
etcd Config
etcd는 Control Plane 노드에 Static Pod형태로 실행되고 있습니다.
/etc/kubernetes/manifest/etcd.yaml
※ Static Pod: 특정 경로에 yaml을 위치하면 쿠버네티스가 자동으로 실행시켜 줌., Pod 가 삭제돼도 yaml 파일이 해당 경로에 있으면 재실행
etcd.yaml 파일을 간단히 살펴볼게요
etcd는 기본적으로 2379 포트를 사용하고 있으며,
엔드포인트(endpoint)는 Control Plane의 localhost인 127.0.0.1:2379, <Control Plane Node>:2379로 접근이 가능하며,
--cert-file, --key-file 경로에 있는 인증서/키 파일은 etcd에 대한 ssl/tls 인증이며 파일들로 https를 사용할 수 있습니다.
--trusted-ca-file: 경로에 있는 ca.crt는 etcd의 인증서 입니다.
앞서 말한 4가지는 etcd backup & restore에 사용되니 꼭 기억해 주세요!!
/etc/kubernetes/pki/etcd/server.crt을 decode 해봤습니다.
유효기간은 1년이며 SAN은 Control Plane Node/IP, localhost, 등 etcd에 접근할 수 있는 곳이 한정되어 있어요
/etc/kubernetes/pki/etcd/ca.crt를 복호화해봤습니다.
유효기관은 10년이며 etcd의 ca인 것을 확인할 수 있습니다.
etcd 백업 및 복구
이 부분은 CKA 시험에 꼭 나오니 유의하여 보시기 바랍니다.
etcdctl 사용할 때 $ ECTDCTL_API=3 또는 $ export ETCDCTL_API=3을 입력하여
etcdctl 버전을 명시해야 합니다.
먼저 etcd backup을 먼저 알아볼게요
$ ETCDCTL_API=3 etcdctl snapshot save <경로 및 파일명> \
--endpoints="https://localhost:2379" \ #endpoint 경로 입력
--key=/etc/kubernetes/pki/etcd/server.key \ #--key-file 파일 경로
--cert=/etc/kubernetes/pki/etcd/server.crt \ #--cert-file 파일 경로
--cacert=/etc/kubernetes/pki/etcd/ca.crt #--trusted-ca-file 파일 경로
usage는 위와 같아요 샘플코드를 한번 볼게요
$ ETCDCTL_API=3 etcdctl snapshot save /opt/etcd.db \
--endpoints="https://localhost:2379" \
--key=/etc/kubernetes/pki/etcd/server.key \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--cacert=/etc/kubernetes/pki/etcd/ca.crt
명령어를 실행하면 해당 경로에 파일이 생기는 것을 볼 수 있어요
다음은 restore입니다.
$ ETCDCTL_API=3 etcdctl snapshot restore <경로 및 파일명>
usage는 위와 같고 샘플코드를 한 번 볼게요
$ ETCDCTL_API=3 etcdctl snapshot restore /opt/etcd.db
/opt폴더에 etcd.db이름을 가진 스냅샷이 생성됩니다.
etcd backup & restore 테스트
default namespace에 pod가 없는 상태에서 snapshot을 생성했어요
/opt폴더에 etcd.db라는 파일이 생겼습니다.
$ kubectl run nginx --image=nginx #nginx image로 nginx pod 생성
$ mkdir /var/etcd-new #디렉토리에 폴더 생성
$ ETCDCTL_API=3 etcdctl snapshot restore /opt/etcd.db
그다음 nginx pod 배포, 새로운 etcd의 새로운 디렉토리를 사용할 폴더를 생성 후 nginx pod가 잘 실행되고 있는지 확인!
etcd restore를 진행해 볼게요
restore를 한 후 /etc/kubernetes/manifest/etcd.yaml 파일을 수정해야 합니다.
끝쪽에 위치해 있는 etcd-data의 경로를 새로 저장할 폴더로 변경합니다.
변경을 완료하면 해당 디렉토리에는 etcd파일이 존재하게 되며 스냅샷을 생성했을 때로 돌아가게 됩니다.
저는 스냅샷 생성 당시 nginx pod가 없었기에 생성했던 nginx pod가 삭제됨을 볼 수 있습니다.
끝~
'스터디' 카테고리의 다른 글
2023 구글 클라우드 스터디잼 Gen AI 기초 과정 소개 및 신청 (0) | 2023.08.10 |
---|---|
2023 구글 클라우드 스터디잼 심화과정 후기 (0) | 2023.08.10 |
2023 구글 클라우드 스터디잼 심화과정 소개 및 신청 (0) | 2023.07.03 |
2023 구글 클라우드 스터디잼 중급과정 후기(Getting Started with Google Kubernetes Engine) (0) | 2023.06.21 |
2023 구글 클라우드 스터디잼 중급 과정 소개 및 신청(Getting Started With Google Kubernetes Engine) (0) | 2023.05.25 |