본 포스팅은 Udemy Certificated Kubernetes Administrator 강좌를 공부한 내용입니다.

 

ETCD란?

Distributed Reliable Key Value Store

일반적인 Key/Value Store보다 높은 안정성과 분산 환경을 제공해줄 수 있어 위와 같이 설명된 것 같다.

또한 Key/Value Store이다보다 사용이 굉장히 쉽고 적은 데이터 환경에서는 아주 빠르게 이용할 수 있다.

하지만 많은 데이터가 저장되는 용도로는 좋지 않다고 한다.

 

ETCD 기본 명령어

ETCD는 일반 K-V Store 처럼 Key/Value에 대한 operation을 지원한다.

ETCD 설치는 아래 링크 참조

https://github.com/etcd-io/etcd/releases

 

etcd-io/etcd

Distributed reliable key-value store for the most critical data of a distributed system - etcd-io/etcd

github.com

$ ./etcdctl version
etcdctl version: 3.4.9
API version: 3.4

# K-V 생성
$ ./etcdctl put key value
OK

# K-V 조회
$ ./etcdctl get key
key
value

# K-V 삭제
$ ./etcdctl del key
1

일반적인 K-V operation 이외에 지원되는 기능으로는 Key를 Directory 구조로 사용할 수 있다.

$ ./etcdctl put parent/child1 value1
OK

$ ./etcdctl put parent/child2 value2
OK

$ ./etcdctl get parent/ --prefix
parent/child1
value1
parent/child2
value2

$ ./etcdctl del parent/ --prefix
2

위처럼 --prefix option을 통해 parent의 하위 directory를 조회/삭제하는 것과 유사한 결과가 나오는 것을 확인할 수 있다.

 

Kubernetes의 ETCD

Kubernetes에서 ETCD이 역할은 k8s cluster의 정보를 저장하는 역할이다.

k8s cluster 정보라는 것은 nodes, pods, configs, secrets 등 kubectl get 을 사용했을 때 조회할 수 있는 resource type 등을 의미한다.

 

kubernetes를 위한 ETCD를 배포하기 위한 방법은 Manual 적으로 배포하는 방법과 kubeadm 이용하는 방법이 있다.

kubeadm를 사용할 경우 kube-system namespace(master node)에 etcd-master가 pod 형태로 배포된다.

 

kubernetes는 각 resource type을 key로 가지고 생성된 resource를 value 형태로 ETCD에 저장한다.

$ etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
get / --prefix --keys-only
/registry/apiregistration.k8s.io/apiservices/v1.

/registry/apiregistration.k8s.io/apiservices/v1.admissionregistration.k8s.io

/registry/apiregistration.k8s.io/apiservices/v1.apiextensions.k8s.io

/registry/apiregistration.k8s.io/apiservices/v1.apps

/registry/apiregistration.k8s.io/apiservices/v1.authentication.k8s.io

/registry/apiregistration.k8s.io/apiservices/v1.authorization.k8s.io

/registry/apiregistration.k8s.io/apiservices/v1.autoscaling

/registry/apiregistration.k8s.io/apiservices/v1.batch

/registry/apiregistration.k8s.io/apiservices/v1.coordination.k8s.io
...

$ etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
get /registry/pods/kube-system --prefix --keys-only
/registry/pods/kube-system/coredns-5644d7b6d9-49pb2

/registry/pods/kube-system/coredns-5644d7b6d9-98tmz

/registry/pods/kube-system/etcd-master

/registry/pods/kube-system/kube-apiserver-master

/registry/pods/kube-system/kube-controller-manager-master

/registry/pods/kube-system/kube-proxy-972kw

/registry/pods/kube-system/kube-proxy-blr9v

/registry/pods/kube-system/kube-scheduler-master

/registry/pods/kube-system/weave-net-9pzcd

/registry/pods/kube-system/weave-net-ls2gv

 

ETCD High Availability

 

ETCD는 안정성이 뛰어나다고 했는데 그 얘기는 당연히 하나가 죽어도 다른 ETCD에 의해 그 역할이 대체된다는 의미를 나타낸다.

ETCD를 실행할 때 --initial-cluster option으로 clustering할 다른 ETCD의 IP와 Port를 입력하게 되면 아래 그림처럼 ETCD Cluster가 구성된다.

 

정리

kubeadm을 이용한 ETCD 배포, ETCD certification 등 많은 부분이 추후에 설명될거라고 한다.

기본 개념을 정리하는 단계라 비교적 쉬운 내용이었다.

ETCD의 leader election 방법이나 data replication은 ETCD를 깊게 볼 일이 있으면 그때 확인 해 봐야겠다.

+ Recent posts