Kubernetes CKA발행일 2026. 1. 5.원본 https://blog.naver.com/jword_/224135391941 ↗

[CKA] 1.1 etcd

[CKA] 1.1 etcd — #개발자의도구들 #CKA #etcd #keyvalue RDBMS의 비효율성과 key-value 데이터 베이스 RDBMS의...

#Cloud#Naver Blog

#개발자의도구들 #CKA #etcd #keyvalue

​

RDBMS의 비효율성과 key-value 데이터 베이스

RDBMS의 문제점

관계형 데이터 베이스는 엑셀과 같은 형태입니다. 행과 열이 존재하며, 각 칸에 그에 맞는 해당 데이터가 들어갑니다.

​

하지만, RDBMS는 아주 불편한 설계상의 문제가 있습니다. 새로운 열을 추가할 때마다 테이블 전체의 데이터가 영향을 받습니다. 예를 들어 직장인과, 학생을 하나의 테이블에 넣었다고 가정하면 다음과 같은 문제가 발생합니다.

이름나이직업급여성적
철수35회사원350만원❌
영희22학생❌A+
민수40회사원400만원❌
지은20학생❌B+

회사원에게 들어갈 급여는 학생에게 필요없습니다. 반면에 학생에게 필요한 성적은 회사원에게 필요없습니다.

​

여기서 더 다양한 열을 추가한다면 테이블 전체가 영향을 받고, 해당되지 않는 사람들은 빈칸이 계속해서 늘어납니다. 데이터가 많이 쌓이면 이 문제는 더욱 심해집니다.

​

key-value 저장소

가장 단순한 저장 방식입니다.

text 코드 예제
                                    "name": "toolod"

복잡한 검색은 하기 어려운 구조이지만, 엄청나게 빠르고 유연하게 사용할 수 있습니다. 특히나 필요한 것을 빠르게 찾아야할 때에 매우 유용합니다.

​

또한 아무리 새로운 key가 추가되더라도 다른 값들에 영향을 받지 않고 독립적으로 존재할 수 있습니다.

​

etcd

etcd는 위에서 언급한 key-value 저장소의 한 종류입니다. 공식 설명도 매우 간단하게 표현하고 있습니다.

json 코드 예제
                                    "간단하고, 안전하며, 빠른 분산형 키-값 저장소"

여기서 etcd"분산형"으로 여러대의 서버에 데이터를 나눠서 저장한 다는 것을 기억해 두면 좋습니다. 한서버에 고장이 나도 다른서버에서 데이터를 찾을 수 있어 매우 안전한 구조입니다.

​

Basic

설치

​

etcdctl로 데이터 다루기

etcd를 설치하면 etcdctl이라는 도구가 함께 설치됩니다. 이는 etcd용 cli도구 입니다. 이걸로 데이터를 저장하고 불러올 수 있습니다.

text 코드 예제
                                    # 데이터 저장
etcdctl put {key} {value}

# 데이터 불러오기
etcdctl get {key}

# version
etcdctl version

주의점

etcd는 버전별로 명령어가 다릅니다. 현재는 v3가 최신 버전이라 최신 버전에 대해서 주로 다룰 것입니다. 하지만 인터넷 자료를 통해서 이전 버전의 명령어가 나올 수도 있으니 혼동에 유의하시기 바랍니다.

쿠버네티스에서의 etcd

etcd는 모든걸 기억한다.

쿠버네티스의 클러스터를 운영하다 보면 정말 많은 정보가 생깁니다. 어떤 노드가 있는지, Pod는 몇 개인지, 설정은 어떻게 되어있는지 등 이 모든 정보를 기억하기 위해 etcd를 사용하고 있습니다.

​

etcd에는 아래와 같은 것들이 저장됩니다.

  • 노드(Nodes) 정보
  • 파드(Pods) 정보
  • 설정(Configs)
  • 시크릿(Secrets)
  • 계정(Accounts)
  • 역할(Roles)
  • 역할 바인딩(Role Bindings)
  • 그 외 클러스터 관련 모든 것

​

​

kubectl get과 같은 명령어를 쿠버네티스에서 자주 사용합니다.

bash 코드 예제
                                    kubectl get nodes
kubectl get pods

이 명령어를 실행하면 클러스터의 여러 정보가 화면에 나타납니다. 그럼 해당 정보가 어딘가에 기록되어 있어야 합니다. 바로 etcd에 기록된 정보들을 가져오는 것입니다.

​

그리고 클러스터 내부에서 뭔가 변화가 생길 수 있습니다. 새로운 노드를 추가하거나, 파드를 배포하거나, 레플리카 세트를 만들거나 등 이런 모든 변경 사항은 etcd에 기록이 되어야만 합니다. 기록이 완료되면 비로소 완료된 것으로 인정받습니다.

​

그래서 etcd는 모든 클러스터 정보의 유일한 진실의 원천 (Single Source of Truth)라고 합니다.

쿠버네티스에 etcd를 배포하는 방법

쿠버네티스 클러스터에 etcd를 배포하는 방법은 크게 두가지가 있습니다.

​

  1. 직접 설정

이 방법의 경우 모든 것을 수동으로 설정합니다. 수동 설정의 이점은 자유도가 높아 커스텀하게 설정을 할 수 있다는 것입니다. 하지만, 그만큼 알아야할 것이나 작업량이 많기 때문에 리소스가 많이 드록 진입장볍이 높습니다.

  • etcd 바이너리를 직접 다운
  • 바이너리 설치
  • 마스터 노드에서 etcd를 서비스로 구성

​

​

  1. kubeadm으로 설정

kudeadm을 사용하면 알아서 etcd를 kube-system 네임스페이스에 배포해줍니다.

​

kubeadm 환경에서 etcd 탐색하기

kubeadm으로 클러스터를 만들면, etcd가 pod안에서 돌아가고 있습니다. 이 pod안에 있는 etcdctl을 사용해서 데이터를 살펴볼 수 있습니다.

​

kubernetes가 저장한 모든 키를 보고 싶다면 아래 명령어를 사용해보세요.

bash 코드 예제
                                    kubectl exec etcd-master -n kube-system -- etcdctl get / --prefix --keys-only

/registry
├── nodes
├── pods
├── replicasets
├── deployments
├── secrets
├── configmaps
└── ...

명령어 실행시 etcd에 저장된 키들이 나옵니다. kubernetes는 특정 디렉터리 구조로 데이터를 저장합니다.

​

고가용성 대응

실제 운영환경에서는 마스터 노드가 여러개가 있습니다. 하나의 노드가 죽으면 클러스터 전체가 마비될 수 있기 때문입니다. 그래서 고가용성(HA) 환경에서는 마스터 노드를 여러 대를 둬서 운영합니다.

​

여기서 중요한건 서로 분산 환경에 위치한 etcd들이 서로를 인식해야한다는 것 입니다. 그래야 데이터를 동기화하여 Single Source of Truth가 완성되기 때문입니다.

​

이 설정을 위해서는 다음 명령어를 사용할 수 있습니다.

text 코드 예제

--initial-cluster etcd1=https://10.0.0.1:2380,etcd2=https://10.0.0.2:2380,etcd3=https://10.0.0.3:2380

​