Kubernetes - (6) Cluster Maintenance

임쿠쿠·2022년 5월 3일
0

kubernetes

목록 보기
6/8
post-thumbnail

1. Operating System Upgrade

  • 첫번째 워커노드가 다운 시, kubernetes는 기본적으로 종료까지 5분의 대기시간을 가진다.
  • 이때 해당 워커노드의 POD 서비스를 이용할 수 없게 되고 또한 5분내로 노드가 복귀할지 판단하기 힘들다.

drain

  • 해당 Node의 POD을 삭제 후, 다른 워커노드에 재생성하며 또한 해당 노드는 unschedualable 됨
kubectl drain node명 --ignore-daemonsets 
kubectl uncordon node명 // unschedualable에서 해제되며, 오직 새로운 POD이 만들어질 때 스케쥴링 작동

cordon

  • 해당 Node의 POD을 삭제하지 않으며, 단순히 Node를 unschedualable하게 함.
kubectl cordon node명
kubectl uncordon node명 // unschedualable에서 해제되며, 오직 새로운 POD이 만들어질 때 스케쥴링 작동

2. Kubernetes Software Version

  • 쿠버네티스 버전은 ETCD, DNS를 제외하고 모두 동일한 버전으로 배포

3. Cluster Upgrade Process

1) Upgrade Process

1단계

  • 마스터 노드 업그레이드 후 워커노드 업그레이드 진행
  • api server와 같은 마스터노드가 업그레이드 동안 잠깐 다운되도 워커로드에 영향을 끼치지 않지만, 새로운 어플리케이션을 생성, 삭제 수정할 수 없다.

2단계

  • (1) 워커노드들을 모두 한번에 업그레이드 할 수 있지만 해당 시간동안 downtime을 갖게됨
  • (2) 워커노드 한개 씩 업그레이드 시, 해당 워커노드의 POD을 다른 워커노드에서 실행한 후 워커노드 업그레이드가 완료되면 해당 워커노드에 다시 POD 적용
  • (3) 새로운 버전의 워커노드를 만들고, 해당 워커노드의 POD을 새로운 버전의 워커노드에서 실행

kubeadm 링크 : https://v1-19.docs.kubernetes.io/ko/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

2) Practice

(1) 버전 확인

kubectl get nodes

(2) 각 노드 별 taint 유무 확인

kubectl describe nodes 노드명 | grep -i taint

(3) kubeadm을 통한 stable upgrade 버전 확인

kubeadm upgrade plan

(4) 마스터노드 Upgrade

kubectl drain controlplane --ignore-daemonsets
apt update
apt install kubeadm=1.20.0-00
kubeadm version  // kubeadm 버전 확인
kubeadm upgrade apply v1.20.0
apt install kubelet=1.20.0-00
systemctl restart kubelet
kubectl uncordon controlplane

(5) 워커노드 Upgrade

ssh 워커노드명 // 해당 노드 접속 후 진행
kubectl drain 워커노드명 --ignore-daemonsets
apt update
apt install kubeadm=1.20.0-00
kubeadm version  // kubeadm 버전 확인
kubeadm upgrade apply v1.20.0
apt install kubelet=1.20.0-00
systemctl restart kubelet
kubectl uncordon 워커노드명

4. Backup and Restore Methods

1) deploy, pod 등의 defenition file을 git repo로 백업 및 복원
2) ETCD 서버는 클러스터 내 모든 정보를 저장하므로 이를 백업 및 복구

etcd 버전확인

kubectl -n kube-system logs etcd-controlplane | grep -i 'etcd-version'

etcd listen url 확인

kubectl -n kube-system describe pod etcd-controlplane | grep '\--listen-client-urls'

ETCD server certification file path 확인

kubectl -n kube-system describe pod etcd-controlplane | grep '\--cert-file'

ETCD CA certification file path 확인

kubectl -n kube-system describe pod etcd-controlplane | grep '\--trusted-ca-file'

ETCD 스냅샷

ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /opt/snapshot-pre-boot.db

스냅샷 복원

ETCDCTL_API=3 etcdctl  --data-dir /var/lib/etcd-from-backup \
snapshot restore /opt/snapshot-pre-boot.db
  • 그러나 etcd가 해당 복원 파일 path를 인식하지 못하기 때문에 이를 수정해야한다.

cd /etc/kubernetes/manifests/
vim etcd.yaml
profile
Pay it forward

0개의 댓글