Fairy ' s
[K8s] ETCD 본문
Master Node - ETCD
- 간단/안전/신속하며, 분산되고 신뢰할 수 있는 Key-Value Store
- 키 값 쌍을 저장하고 회수할 수 있다.
- Install ETCD
- Github 사이트에서 OS에 맞는 바이너리 다운로드 / 실행
- 포트 2379로 Listen하는 서비스가 시작된다.
- 어떤 클라이언트든 이 ETCD 서비스에 접속해 정보를 저장하고 검색할 수 있다.
Key-Value Store
- 개인은 문서를 하나 갖고 그 개인에 관한 모든 정보가 해당 파일에 문서나 페이지 형태로 저장된다.
- 이런 파일은 어떤 형식이나 구조로든 만들어질 수 있고, 한 파일의 변화는 다른 파일에 영향을 주지 않는다.
- 다른 문서를 업데이트하지 않고도 이 문서들에 추가적인 세부 사항을 추가할 수 있다.
- 단순한 키와 값을 저장하고 회수할 수 있다.
- 데이터가 복잡해지면 일반적으로 Json이나 Yano같은 데이터 포맷을 사용하게 된다.
>> v2.0
# Run ETCD Service
./etcd
# To store key value pair
./etcdctl set key1 value1
# To retrieve saves data
./etcdctl get key1
> value1
# To view more option & commaonds
./etcdctl
# ETCDCTL Versions
./etcdctl --version
> etcdctl verstion: 3.3.11
API version: 2
# API version은 2가지 유형의 version이 있다.
# Edcdctl Utility, api
>> v3.0
# To change etcdctl version
ETCDCTL_API=3 ./etcdctl version
> etcdctl version: 3.3.11
API version: 3.3
# To store key value pair
./etcdctl put key1 value1
> OK
# To retrieve saves data
./etcdctl get key1
> key1
value1
ETCD Datastore
- Nodes, PODs, Configs, Secrets, Accounts, Roles, Role Bindings 등이 있다.
- kube control get 명령을 실행할 때 우리가 볼 수 있는 정보는 모두 ETCD server에서 가져온 것이다.
- Node 추가, pod, replica sets 배포와 같은 클러스터에 대한 모든 변경사항들이 ETCD server에서 업데이트 된다.
- 클러스터를 어떻게 설정하느냐에 따라 ETCD는 다르게 배포된다. (Scratch, kubeadm 툴)
- Setup - Manual : Scratch
- ETCD 바이너리를 직접 다운로드하여 ETCD를 Deploy하고, 바이너리를 설치하여 ETCD를 직접 마스터 노드에서 서비스로 구성한다.
- https://${INTERNAL_IP}:2379
2379 포트는 ETCD가 대기하는 default 포트이며, kube API server에서 ETCD server에 접근하려 할 때 URL이 구성되어 있어야 한다.
wget -q --https-only \
"https://github.com/etcd-io/releases/download/v3.3.11/etcd-v3.3.11-linux-amd64.tar.gz"
- Setup - kubeadm
- kubeadm을 사용하여 클러스터를 설정하는 경우, ETCD server를 kube system namespace 안의 pod로 배포한다.
kubectl get pods -n kube-system
Explore ETCD
# ETCD 데이터베이스를 탐색 (pod 내에서 실행)
etcd control utility
# Kubernetes에서 저장된 모든 키 나열
kubectl exec etcd-master -n kube-system \
etcdctl get / --prefix -keys-only
- 쿠버네티스는 특정 디렉토리 구조로 데이터를 저장한다.
- 루트 디렉토리는 Registry이며, 그 아래에 minions, pods, replicasets, deployments, roles, secrets 등 이있다.
High Availability 환경에선 클러스터에 여러 마스터 노드가 있다. 그리고 마스터 노드에 분산된 여러 ETCD 인스턴스를 갖게 된다. 그 경우, ETCD 서비스 구성에서 파라미터를 잘 설정하면 ETCD 인스턴스가 서로에 대해 알게 된다.
ETCD CTL의 더 자세한 명령
# ETCDCTL commands supported by version 2
etcdctl backup
etcdctl cluster-health
etcdctl mk
etcdctl mkdir
etcdctl set
# ETCDCTL commands supported by version 3
etcdctl snapshot save
etcdctl endpoint health
etcdctl get
etcdctl put
# To set the right version of API
export ETCDCTL_API=3
API 버전이 설정되지 않은 경우 버전 2로 설정된 것으로 가정한다.
ETCDCTL이 ETCD API 서버에 인증할 수 있도록 인증서 파일의 경로를 지정해야 한다.
--cacert /etc/kubernetes/pki/etcd/ca.crt
--cert /etc/kubernetes/pki/etcd/server.crt
--key /etc/kubernetes/pki/etcd/server.key
kubectl exec etcd-master -n kube-system -- sh -c \
"ETCDCTL_API=3 etcdctl get / --prefix --keys-only --limit=10 \
--cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt \
--key /etc/kubernetes/pki/etcd/server.key"
'Study > K8s' 카테고리의 다른 글
[K8s] Pods (0) | 2023.07.28 |
---|---|
[K8s] Kube Scheduler & Kublet & Kube Proxy (0) | 2023.07.12 |
[K8s] CLI (0) | 2023.07.12 |
[K8s] Kube Controller Manager & Kube API Server (0) | 2023.07.12 |
[K8s] Cluster Architecture (0) | 2023.07.11 |
Comments