Fairy ' s

[K8s] ETCD 본문

Study/K8s

[K8s] ETCD

berafairy 2023. 7. 11. 16:27

 

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