일반 환경 변수
# etcd v3.4.13 환경 변수 파일
ETCD_DATA_DIR=/var/lib/etcd
ETCD_ADVERTISE_CLIENT_URLS=https://192.168.1.190:2379 # 서버 IP 및 포트
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.1.190:2380 # 서버 IP 및 포트
ETCD_INITIAL_CLUSTER_STATE=existing
ETCD_METRICS=basic
ETCD_LISTEN_CLIENT_URLS=https://192.168.1.190:2379,https://127.0.0.1:2379 # 서버 IP 및 포트와 127
ETCD_INITIAL_CLUSTER_TOKEN=k8s_etcd
ETCD_LISTEN_PEER_URLS=https://192.168.1.190:2380 # 서버 IP 및 포트
ETCD_NAME=etcd-master
ETCD_PROXY=off
ETCD_ENABLE_V2=true
ETCD_INITIAL_CLUSTER=etcd-master=https://192.168.1.190:2380 # 클러스터 모든 노드 정보, 형식: 노드1이름=https://노드1 IP:2380,노드2이름=https://노드2 IP:2380,노드3이름=https://노드3 IP:2380" .....
ETCD_ELECTION_TIMEOUT=5000
ETCD_HEARTBEAT_INTERVAL=250
ETCD_AUTO_COMPACTION_RETENTION=8
ETCD_SNAPSHOT_COUNT=10000
# TLS 설정
ETCD_TRUSTED_CA_FILE=/etc/ssl/etcd/ssl/ca.pem
ETCD_CERT_FILE=/etc/ssl/etcd/ssl/member-master.pem
ETCD_KEY_FILE=/etc/ssl/etcd/ssl/member-master-key.pem
ETCD_CLIENT_CERT_AUTH=true
ETCD_PEER_TRUSTED_CA_FILE=/etc/ssl/etcd/ssl/ca.pem
ETCD_PEER_CERT_FILE=/etc/ssl/etcd/ssl/member-master.pem
ETCD_PEER_KEY_FILE=/etc/ssl/etcd/ssl/member-master-key.pem
ETCD_PEER_CLIENT_CERT_AUTH=True
# CLI 설정
ETCDCTL_ENDPOINTS=https://127.0.0.1:2379 # etcd 서버 주소 및 포트, 여러 개 지정 가능: https://노드1 IP:2379,https://노드2 IP:2379,https://노드3 IP:2379"
ETCDCTL_CA_FILE=/etc/ssl/etcd/ssl/ca.pem
ETCDCTL_KEY_FILE=/etc/ssl/etcd/ssl/admin-master-key.pem
ETCDCTL_CERT_FILE=/etc/ssl/etcd/ssl/admin-master.pem
이. etcd 일반 작업
1. 환경 변수 설정(매번 명령 실행 시 옵션 지정하지 않도록)
# 인증서 경로는 etcd 및 api-server 프로세스 관련 인증서 설정에서 확인 가능
export ETCDCTL_API=3
export ETCDCTL_CACERT=/etc/ssl/etcd/ssl/ca.pem
export ETCDCTL_CERT=/etc/ssl/etcd/ssl/admin-master.pem
export ETCDCTL_KEY=/etc/ssl/etcd/ssl/admin-master-key.pem
export ETCDCTL_ENDPOINTS=https://127.0.0.1:2379 # 실제 환경에 맞게 설정, 클러스터인 경우 다른 서버 주소 포함
2. 로그 확인(systemd 방식으로 배포된 경우)
# 서비스 상태 확인
systemctl status etcd
# 상세 로그 확인
journalctl -u etcd
3. 데이터 조작(생성, 조회, 수정, 삭제)
1. 조회
# 모든 key 조회
etcdctl get / --prefix --keys-only
# 특정 key 값 조회 (default 네임스페이스의 myapp-deploy-675cfc4c45-f6k6c pod)
etcdctl get /registry/pods/default/myapp-deploy-675cfc4c45-f6k6c
2. 삭제
# 데이터 삭제, pod 삭제 시 watch에서 삭제 단계를 확인할 수 없으며, etcd로 삭제하는 것이 kubectl보다 빠름
[root@master ~]# etcdctl del /registry/pods/default/myapp-deploy-675cfc4c45-f6k6c
1
# 다른 터미널에서
[root@master ~]# kubectl get pods -w
NAME READY STATUS RESTARTS AGE
myapp-deploy-675cfc4c45-f6k6c 1/1 Running 0 25d
myapp-deploy-675cfc4c45-fnctb 1/1 Running 0 25d
myapp-deploy-675cfc4c45-lpf6q 1/1 Running 0 25d
myapp-deploy-675cfc4c45-lv27s 1/1 Running 0 25d
myapp-deploy-675cfc4c45-s7nl4 1/1 Running 0 25d
myapp-deploy-675cfc4c45-f6k6c 1/1 Running 0 25d
myapp-deploy-675cfc4c45-hfht7 0/1 Pending 0 0s
myapp-deploy-675cfc4c45-hfht7 0/1 Pending 0 0s
myapp-deploy-675cfc4c45-hfht7 0/1 ContainerCreating 0 0s
myapp-deploy-675cfc4c45-hfht7 0/1 ContainerCreating 0 2s
myapp-deploy-675cfc4c45-hfht7 1/1 Running 0 3s
생성(수정)
# 데이터 작성, 기존 key에 작성 시 수정됨
etcdctl put /test helloWorld
4. 클러스터 노드 상태 확인
# 클러스터 노드 상태 확인
etcdctl --write-out=table endpoint health
# 클러스터 노드 현재 상태 확인
etcdctl --write-out=table endpoint status
삼. etcd 백업 및 복구
1. 백업
etcdctl snapshot save /data/etcd_backup/etcd-backup-$(date +%F).db
2. 복구
모든 서버에서 작업 수행
# apiserver 서비스 중단, systemd 사용 시 systemd 명령, 바이너리 방식은 실제 환경에 맞게, 여기서는 kubeadmin 배포로 정적 pod
cd /etc/kubernetes/manifests/ mv kube-apiserver.yaml kube-apiserver.yaml-bak
# etcd 서비스 중단
systemctl stop etcd
mv /var/lib/etcd /var/lib/etcd-bak # 필수, 복구 시 데이터 디렉토리가 존재하면 안됨
# 데이터 복구 --data-dir가 가리키는 디렉토리는 미리 존재하지 않아야 함 etcd-master 현재 노드 etcd 이름, 각 노드마다 다름 데이터는 동일한 파일 사용, 클러스터인 경우
# 여러 etcd 노드가 있는 경우 --initial-cluster 매개변수에 모든 노드 정보가 포함되어야 하며 각 노드의 --name, --initial-advertise-peer-urls 및 기타 관련 매개변수가 올바르게 구성되어 있는지 확인해야 합니다.
# etcd-master-https://192.168.1.190:2380 현재 노드 etcd 이름 및 주소, 클러스터인 경우 모든 노드를 작성해야 함
# --initial-advertise-peer-urls 현재 노드 주소
# --initial-cluster-token 클러스터 인증 토큰
# 단일 노드 명령어
ETCDCTL_API=3 etcdctl --initial-cluster etcd-master=https://192.168.1.190:2380 --initial-advertise-peer-urls https://192.168.1.190:2380 --initial-cluster-token="k8s_etcd" snapshot restore backup.db --data-dir=/var/lib/etcd/ --name etcd-master
# 다중 노드 명령어
etcdctl snapshot restore backup.db --data-dir=/var/lib/etcd/ --initial-cluster-token="k8s_etcd" --initial-advertise-peer-urls=https://192.168.1.190:2380 --initial-cluster="node1=https://192.168.1.190:2380 ,node2=https://192.168.1.191:2380 ,node3=https://192.168.1.192:2380 "
# etcd 서비스 재시작
systemctl start etcd
# apiserver 서비스 재시작
mv kube-apiserver.yaml-bak kube-apiserver.yaml