본 포스팅은 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
$ ./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를 깊게 볼 일이 있으면 그때 확인 해 봐야겠다.
'Kubernetes > CKA' 카테고리의 다른 글
CKA 준비 (6) - Scheduling 1 (Manual, taint and toleration) (0) | 2020.06.07 |
---|---|
CKA 준비 (5) - namespace, service (0) | 2020.06.07 |
CKA 준비 (4) - Pod, ReplicaSet, Deployment (0) | 2020.06.05 |
CKA 준비 (3) - Basic Data Plane Components (kubelet, kube-proxy) (0) | 2020.06.05 |
CKA 준비 (2) - Basic Control Plane Components (api-server, controller-manager, scheduler) (0) | 2020.06.04 |