etcd란?
simple, secure, fast한 key-value 저장소
표 데이터베이스
SQL, 관계형 DB를 말함
- 새로운 정보 추가 시 테이블 전체가 영향받음

- 세상에 새로운 인간D가 들어오자마자 새로운 데이터를 자기 혼자만 갖고 있다..
- 다른 사람들에게는 없는 데이터인데 저 NULL 값이 굉장히 신경쓰인다
- 따라서 이러한 DB는 유연성이 적고 정형 데이터에 적합한 DB이다
Document store

key-value store
key: 나이 value: 24
key: user:john_doe
value: name=john_doe, age=24
key: user:john_doe
value: '{"name":"john_doe", "age":"224"}'
- 매우 빠르게 동작 가능, 매우 유연, 빠른 조회가 가능
install etcd
- Download Binaries
curl -L https://아무튼 etcd 다운로드 링크/ -o etcd-v3.x.xx
- 이 방법은 인트라넷에서는 사용이 불가능하기 때문에, 사전에 해당 링크에서 직접 다운로드 후 패키지를 옮겨야한다
- Extract
tar xzvf etcd-v3.x.xx-linux-amd64.tar.gz
- 리눅스 버전을 잘 확인하고 파일을 가져와서 풀어야한다
- Run etcd service
./etcd
- 기본적으로 port 2379에서 수신 대기
- 그러면 해당 서버는 etcd server가 된다
- 시스템 서비스 또는 K8s 클러스터 pod로 실행하는 것이 이상적이다
- etcd client(etcd 명령줄 클라이언트)를 통해 ket-value 저장 및 검색 가능
./etcdctl put key1 value1
./etcdctl get key1
## 명령어 확인
./etcdctl
- etcd version에 따라 성능 향상 및 명령어 변경이 있었음
- 이후 CNCF의 졸업 프로젝트가 됨
etcd version 또는 ./etcdctl로 확인 가능
K8s에서의 etcd
관리 목록
Nodes, Pods, Configs, Secrets, Accounts, Roles, Bindings, Others
- kubectl get 명령어의 경우 etcd server에서 가져온다
- 추가 노드 추가, 파드 배포 등 클러스터에 대한 모든 변경 사항은 etcd 서버 업데이트 후 확인 가능
- 클러스터 설정 방법에 따라 etcd가 다르게 배포됨
- 처음부터 배포하는 방법
- kube ADM 도구를 사용하여 배포하는 방법(모의고사 환경은 kube ADM 도구를 사용한다고 함)
- 두 방법의 차이를 알고 숙지하면 좋음
etcd를 kube ADM 도구를 사용하여 배포
wget -q --https-only \
"https://github.com/coreos/etcd/releases/download/v3.x.x/etcd-v3.x.x-linux-amd64.tar.gz"
etcd.service
- 대부분의 옵션들은 인증서와 관련됨
--advertise-client-urls https://${INTERNAL_IP}:2379: etcd가 수신하는 주소, etcd 서버 접속 시 kube API 서버에서 구성
kubectl get pods -n kube-system
- kube ADM을 사용하여 클러스터 설정하는 경우 kube ADM은 atcd 서버를 kube 시스템 네임스페이스에 파드로 배포
- etcd 제어 유틸리티를 사용하여 etcd 데이터베이스 탐색 가능
kubectl exec etcd-master -n kube-system etcdctl get / --prefix -keys-only
- 쿠버네티스가 저장한 모든 키 나열을 위해 etcd 컨트롤 시행

- 쿠버네티스는 특정 디렉토리 구조에 데이터 저장
- 루트 디렉터리는 Registry, 그 아래에 minions 등 존재

--initial-cluster controller-0=https://${CONTROLLER0_IP}:2380,controller-1=https://{CONTROLLER1_IP}:2380
- 고가용성 환경에서는 클러스터에 여러 개의 마스터 존재 가능
- 그러면 마스터 노드에 여러 개의 etcd 인스턴스가 분산됨
- etcd 서비스 구성에서 올바른 매개변수를 설정하여 etcd 인스턴스끼리 알 수 있게 해야함