ETCD 란
etcd는 Kubernetes Cluster의 모든 상태 정보를 키-값 형태로 저장하는 데이터베이스이다.
etcd에 장애가 생기면 모든 컴포넌트가 미아가 되기 때문에 가용성이 매우 중요하다. 그래서 보통 이중화, 삼중화 이상을 해 놓는다.
etcd는 클러스터링하여 분산 실행하는 RSM (Replicated State Machine) 구조로 되어있다.
간단히 말해 Leader-Follower 구조인데, Leader node가 클라이언트의 요청을 처리하다가 문제가 생기면 새로운 Leader node가 선출되어 계속해서 가용성을 유지하는 구조이다. (Follower는 Leader의 상태를 복제해둔 거라고 보면 된다)
etcd는 서버 하나당 프로세스 한 개당 사용할 수 있기 때문에 보통통 etcd 자체를 클러스터링 한 다음 마스터 서버에 분산을 하여 안전성을 보장하는 방식으로 아키텍처를 구성한다.
minikube를 통해 etcd 살펴보기
minikube를 통해 간단히 etcd의 구성을 살펴보겠다.
minikube start
kubectl describe pod etcd-minikube -n kube-system
ETCDCTL
etcdctl은 etcd를 다루기 위한 유틸리티 (cli) 이다. v2와 v3를 사용할 수 있는데, 기본적으로 v2를 사용한다.
이 명령어를 사용할 때는 etcd api server에 접근하기 위해 인증서 파일 경로를 지정해야 한다.
etcdctl를 사용하여 etcd 데이터베이스에서 '/registry/pods/' (Kubernetes의 모든 pod가 저장된 곳) 경로에 저장된 키를 가져오는 예시를 수행해보겠다.
kubectl exec -it \
-n kube-system etcd-minikube \
-- sh -c 'ETCDCTL_CACERT=/var/lib/minikube/certs/etcd/ca.crt \
ETCDCTL_CERT=/var/lib/minikube/certs/etcd/peer.crt \
ETCDCTL_KEY=/var/lib/minikube/certs/etcd/peer.key \
ETCDCTL_API=3 \
etcdctl \
get \
--keys-only \
--prefix=true \
"/registry/pods/" '
위의 명령어를 수행하면 아래와 같이 '/registry/pods/'로 시작하는 모든 경로를 가져오는 것을 확인할 수 있다.
위의 명령어를 좀 더 자세히 설명해보자면 다음과 같다.
kubectl exec -it \ # etcd-minikube 파드에 접속하여 명령을 실행하기 위해 'kubectl exec' 사용, -it 옵션은 인터랙티브 모드 설정
-n kube-system etcd-minikube \ # 'kube-system' 네임스페이스의 'etcd-minikube' pod를 지정
-- sh -c 'ETCDCTL_CACERT=/var/lib/minikube/certs/etcd/ca.crt \ # CA 인증서 경로 설정, etcd 서버 인증서 검증용
ETCDCTL_CERT=/var/lib/minikube/certs/etcd/peer.crt \ # 클라이언트 인증서 경로 설정, etcd 서버와의 통신용
ETCDCTL_KEY=/var/lib/minikube/certs/etcd/peer.key \ # 클라이언트 인증서에 대응하는 프라이빗 키 경로 설정
ETCDCTL_API=3 \ # etcd API 버전을 v3로 설정
etcdctl \ # etcd와 상호작용하기 위한 CLI 도구 실행
get \ # etcd 데이터베이스에서 데이터를 조회하는 명령
--keys-only \ # 키만 가져오도록 설정, 값은 포함하지 않음
--prefix=true \ # 지정된 prefix와 일치하는 모든 키를 검색
"/registry/pods/" ' # Kubernetes의 모든 pod 정보가 저장된 경로 prefix
+) etcd 에 값 저장하고 읽기
etcd는 데이터베이스니까 값을 저장하고 읽는 것도 가능하다.
etcd pod의 container shell에 접속해서 키-값을 저장하고 읽는 명령을 실행해보도록 하겠다.
kubectl -n kube-system exec -it etcd-minikube -- /bin/sh
아래와 같이 etcd shell에 접속이 된 걸 확인할 수 있다.
간단히 'Name'이라는 키를 저장해보도록 하겠다.
ETCDCTL_API=3 etcdctl \
--cacert /var/lib/minikube/certs/etcd/ca.crt \
--cert /var/lib/minikube/certs/etcd/peer.crt \
--key /var/lib/minikube/certs/etcd/peer.key \
put Name kubernetes
키 저장에 성공하면 아래와 같이 'OK'라는 문장이 뜬다.
위에서 저장한 키를 다시 읽어보도록 하겠다.
ETCDCTL_API=3 etcdctl \
--cacert /var/lib/minikube/certs/etcd/ca.crt \
--cert /var/lib/minikube/certs/etcd/peer.crt \
--key /var/lib/minikube/certs/etcd/peer.key \
get Name
위에서 넣은 값이 그대로 출력되는 것을 확인할 수 있다.
모든 클러스터 정보 조회
클러스터의 모든 리소스 정보를 조회하려면 get 명령어의 프리픽스를 클러스터의 모든 리소스가 저장된 최상위 경로인 "/"로 설정해주면 된다.
ETCDCTL_API=3 etcdctl \
--cacert /var/lib/minikube/certs/etcd/ca.crt \
--cert /var/lib/minikube/certs/etcd/peer.crt \
--key /var/lib/minikube/certs/etcd/peer.key \
get / --prefix --keys-only
그러면 아래와 같이 모든 구성 정보가 출력되는 것을 확인할 수 있다.
'Kubernetes' 카테고리의 다른 글
[Kubernetes] 쿠버네티스를 사용해야 하는 이유 (0) | 2024.08.01 |
---|