ETCD구성정보
![]() |
perplexity에서 생성한 AI이미지 |
시작하는말
안녕하세요, 고니입니다.
kubernetes의 분산 저장소인 ETCD에 대해 설명하고자 합니다. ETCD는 메모리에 들어갈 수 있는 소량의 데이터를 보관하도록 설계된 저장소로 클러스터환경에서 사용합니다.
ETCD는 'ɛtsiːdiː' 발음 한다고 합니다.
기본적으로 2G의 용량이 필요하며, 최대 8G까지 사용가능하고 클러스터 멤버 구성은 이론상 제한은 없으나, Google을 참조하면 최대 7대까지 허용하되 5대 노드 구성을 권장한다고 합니다. (짝수로 구성된 노드는 Failover시 leader선출이 불가능합니다)
운영
ETCD의 Disk I/O가 증가하는 경우 Leader에서 제외될 수 있습니다. (Disk fsync의 업데이트 시간이 heartBeat Interval보다 커지면 발생할 수 있는 Case)
HeartBeat 패킷의 주기는 100ms이며, Leader전환하기 전 HeartBeat의 유예기간인 election timeout인 1000ms(1초) 이후에도 응답이 없으면 leaer가 변경되기 때문에 network의 지연이 빈번하게 발생할 경우 적절한 튜닝이 필요합니다.
ETCD 운영시 수행되는 작업들은
튜닝
- heartbeart / election
- heartbeat interval : 멤버간 평균 왕복시간의 최대값 근처로 조정. (예를 들어 ping을 통해 응답시간을 체크)
- election timeout : heartbeat interval을 기준으로 최소 10배 설정 추천. 다만 최대값을 50000ms(50초)이며, 성한값 적용응 contry region을 넘어서는 경우에만 사용하고 5000ms(5초)을 넘지 않는 값이 안정적인 운영
- Compaction
- ETCD의 용량을 관리하지 않을 경우 성능저하, 용량 부족으로 인해 maintenance모드로 변경하기 때문에 서비스 운영상 문제가 발생할 수 있습니다. 때문에 주기적인 Compation 수행이 필요합니다.
- etcdctl compact 수행은 수동으로 수행하거나 자동으로 압축할 수 있는 방법이 있습니다.
- 자동으로 압축을 수행하는 경우 Minor버전에 따라 작동하는 로직이 다르지만, auto-compaction이 설정되어 있는 경우 시간단위로 수행합니다.
- 수동으로 Compaction 수행 설정 (특정치에 대해서 압축작업도 가능합니다)
$> cd /usr/local/bin $> ./etcdctl.sh compact 3
- 자동으로 Compaction 수행
$> vi /etc/kubernetes/manifests/etcd.yaml ... apiVersion: v1 kind: Pod ... spec: containers: - command: - etcd - --auto-compaction-retention=8 ...
- 수동으로 Compaction 수행 설정 (특정치에 대해서 압축작업도 가능합니다)
- snapshot
- snapshot-count는 메모리에 보관할 항목수를 구성합니다. 해당 설정값에 도덜하게 되면 스냅샷 데이터를 디스크에 저장한 후 count 이후에 젖아된 값을 삭제합니다. (3.4버전 부터는 기본값이 10,000 -> 100,000으로 변경되었습니다)
- 성능이 느린 멤버에서 데이터 요청시 leader는 snapshot 데이터를 전송하여 해당 snpashot데이터를 강제로 voerwrite하여 데이터를 참조할 수 있습니다
- 100,000이상 보관하게 되면 GC가 느려질 수 있으며, 이로인해 즉각적인 메모리 회수가 불가능하기 때문에 할당도 느려집니다. 이로인해 클러스터 가용성과 더불어 쓰기 성능이 저하되는 문제를 가지고 있습니다.
- snapshot-count 설정값
$> vi /etc/kubernetes/manifests/etcd.yaml ... apiVersion: v1 kind: Pod ... spec: containers: - command: - etcd - --snapshot-count=10000 ...
- quota-backend-bytes
- etcd의 데이터 공간은 quota-backend-bytes에 설정된 용량을 참고로 사용하며 기본값은 2Gi로 할당되어 있습니다.
- 용량변경이 필요한 경우 manifest에 정의하면 해당 POD가 재기동하면서 용량변경 작업이 이루어 집니다.다중 master노드에서 용량 변경시 etcd POD 재기동이 수행되기 때문에 노드별로 1~2분 간격으로 1대씩 순차 작업이 필요합니다. (1~2분 간격은 절대적인 수치는 아니고 경험상 확인된 수치)
- 설정 변경 방법
$> vi /etc/kubernetes/manifests/etcd.yaml ... apiVersion: v1 kind: Pod ... spec: containers: - command: - etcd - --quota-backend-bytes=8589934592 ...
Reference
Documentation versions
Welcome to the docs for etcd! The following doc versions are available:
etcd.io
http://igoni.kr/books/3-containerkubernetes/page/etcd-8k0
ETCD구성정보 | 이곤아이
perplexity에서 생성한 AI이미지 시작하는말 안녕하세요, 고니입니다. kubernete...
igoni.kr