etcd backend quota 초과와 NOSPACE alarm 때문에 API 변경이 실패한다.
etcd는 논리적 MVCC 이력 축소와 물리적 파일 조각 모음이 별도다. 멤버별 defrag는 해당 멤버 요청을 일시 차단하므로 quorum을 유지한다.
snapshot 백업 후 MVCC compaction, 멤버별 defrag, 용량 확인, alarm disarm 순서로 복구하고 자동 compaction을 설정한다.
확인 수준: 추가 조사 해법 · 해당 케이스 적용 결과 미확인
적용 조건: <...>와 예시 DB·테이블·경로·수치는 실제 확인값으로 바꾼다. 명령과 메뉴는 참고 문서를 바탕으로 보강한 예시이며 대상 시스템에서 실행하지 않았다. 버전·원인에 따른 분기와 남은 확인 사항은 아래에 명시한다.
export ETCDCTL_API=3
export ETCDCTL_ENDPOINTS='https://<etcd-endpoint>:2379'
export ETCDCTL_CACERT='<etcd-ca.pem>'
export ETCDCTL_CERT='<etcd-client.pem>'
export ETCDCTL_KEY='<etcd-client-key.pem>'
etcdctl endpoint status --cluster -w table
etcdctl alarm list
etcdctl snapshot save '<여유-공간의-백업>/etcd-before.db'
etcdctl compact '<확인한-revision>'
# 멤버 하나씩 실행하고 health를 확인한다. 전체를 동시에 defrag하지 않는다.
etcdctl --endpoints='https://<member-1>:2379' defrag
etcdctl endpoint health --cluster
etcdctl alarm disarm을 실행한다. quota를 무한 증설하는 것으로 끝내지 않는다.NOSPACE alarm 제거, 모든 멤버 health 정상, Kubernetes의 간단한 리소스 생성·삭제 성공을 확인한다.