etcd
etcd는 분산 키-값 저장소(distributed key-value store) 로, 특히 Kubernetes에서 클러스터 상태를 저장하고 관리하기 위한 중앙 데이터 저장소로 사용되어 왔다.
CoreOS에서 처음 개발되었으며, Raft 합의 알고리즘을 기반으로 하여 고가용성과 데이터 일관성을 보장하고 있다.
Kubernetes 외에도 서비스 디스커버리, 구성 관리(Configuration Management), 분산 락 시스템 등 다양한 인프라 구성에 사용되어 왔다.
주요 특징
- 분산 합의 알고리즘(Raft)을 기반으로 구성원 간의 일관된 데이터 복제를 제공함
- 모든 Kubernetes 리소스 객체의 메타데이터가 저장되는 핵심 저장소로 사용됨
- Watch 기능을 통해 값의 변화에 실시간 반응할 수 있음
- gRPC 및 HTTP API 기반 인터페이스를 제공하여 프로그램에서 쉽게 접근 가능함
- 보안 기능으로는 인증, 권한 제어(RBAC), TLS 기반 암호화가 포함됨
장점
- 데이터 일관성 보장: 리더-팔로워 구조를 통해 데이터 정합성이 유지된다.
- 고가용성 구성 가능: 3개 이상 노드 구성 시 장애 허용 범위를 가짐
- 빠른 읽기/쓰기 처리 성능: 메모리 기반의 빠른 응답 성능 제공
- Kubernetes 필수 구성 요소로 사실상 표준으로 자리잡음
- 오픈소스 기반으로 자유로운 커스터마이징 및 확장이 가능함
관련 용어
- Raft: etcd에서 사용하는 분산 합의 알고리즘으로, 리더 선출과 로그 복제를 관리함
- Kubernetes Control Plane: etcd는 control plane의 상태 데이터를 저장하는 핵심 요소임
- Watch: 특정 키나 경로의 변경을 구독(subscribe)하여 실시간 반응 가능
- Snapshot: etcd 데이터 전체를 백업하거나 복구하기 위한 스냅샷 기능
- Compaction: 오래된 히스토리 데이터를 제거해 저장 공간을 최적화하는 기능
주요 솔루션 및 사용 사례
- 주요 솔루션
- Kubernetes: etcd는 모든 리소스 정보(Pod, Node, Config 등)를 저장하는 역할을 담당
- CoreDNS 구성 정보 저장소: 서비스 디스커버리를 위한 서비스-주소 매핑 관리
- OpenShift: Red Hat의 Kubernetes 배포판에서도 etcd는 핵심 컴포넌트로 포함됨
- etcdctl: etcd 관리를 위한 공식 CLI 도구
- 사용 사례
- Kubernetes 클러스터 상태 저장: 모든 API 서버 요청이 etcd와 통신하여 상태를 반영
- 설정 동기화: 여러 애플리케이션 간의 구성 데이터를 공유 및 동기화
- 장애 복구: etcd 스냅샷을 통해 클러스터 상태를 복구
- 서비스 디스커버리: 분산 시스템에서 동적으로 변경되는 서비스 목록을 관리
- 보안 인증 정보 저장소: TLS 인증서, 시크릿 등의 민감 정보 관리에 활용