Cluster Maintenance

hahic·2023년 1월 9일
0

Kubernetes/CKA

목록 보기
6/13
post-thumbnail

OS Upgrade

Develpmenet나 Replica Set, Replica Controller로 생성되지 않은 Pod를 가지고 있는 node는 drain 명령어 적용되지 않는다

drain VS cordon VS Uncordon

drain: Kubernetes에 해당 노드를 비우도록 지시하는 명령어
cordon: 해당 노드를 스케줄 불가능하게 지시하는 명령어
uncordon: drain, cordon 실행 취소 명령어

핵심 명령어

  • k drain node01
  • k drain node01 --ignore-daemonsets
  • k uncordon node01
  • k cordon node01

Reference

https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/ -> drain

Cluster Upgrade Process

Cluster Updgrade를 하기 전, Node에 Taint가 설정되어 있는지 확인해야 한다


Node에 있는 리소스를 비울 때, 다른 Node로 자동 스케줄링되는데 해당 Node에 Taint가 설정되어 있어 배치하지 못하는 경우 Pending 상태로 머물기 때문에 사용자에게 영향을 끼칠 수 있기 때문이다

Kubectl get nodes 명령어에서 Cluster의 버전을 확인할 수 있다

kubeadm upgrade plan에 나타난 버전보다 더 높은 버전으로 Node를 업그레이드하기 위해서는 Kubeadm 버전을 업그레이드 해야 한다

cat /etc/*release*

Controlplane Node에서 Work Node로 접속하는 방법

  1. 첫번째 방법

  2. 두번째 방법

핵심 명령어

  • k get nodes | grep Taints
  • kubeadm upgrade plan
  • cat /etc/*release*

Reference

https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/ -> Kubeadm을 이용한 Cluster Upgrade

Backup and Restore Methods

ETCD 구성 파일 - 주요 부분

export ETCDCTL_API=XX을 이용하자


export ETCDCTL_API=XX을 한번만 입력하면 etcdctl 명령어를 사용할 때마다 맨 앞에 ETCDCTL_API=XX을 타이핑하지 않아도 된다

핵심 명령어

  • cat /etc/kubernetes/manifests/etcd.yaml
  • cat /var/lib/kubelet/config.yaml
  • exprot ETCDCTL_API=3
  • etcdctl snapshot restore --data-dir /var/lib/etcd-from-backup /opt/snapshot-pre-boot.db
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

Reference

https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster -> etcd 백업 방법

Backup and Restore Methods 2

Eternal ETCD 서버 접속 방법

https://kodekloud.com/
cluster들을 구성하고 있는 높은 버전의 서버에서 진행해야 한다

Eternal ETCD 서버에 구성하고 있는 Node 확인하는 방법

ETCDCTL_API=3 etcdctl --endpoints https://10.17.46.3:2379 \
--cert=/etc/etcd/pki/etcd.pem \
--key=/etc/etcd/pki/etcd-key.pem \
--cacert=/etc/etcd/pki/ca.pem \
member list
  1. etcd-server로 스냅샷 파일을 복사합니다.
student-node ~  scp /opt/cluster2.db etcd-server:/root
cluster2.db                                                                                                        100% 1108KB 178.5MB/s   00:00    

student-node ~ ➜  
  1. 스냅샷을 복원합니다. etcd-server에서 직접 복원 중이므로 엔드포인트 https:/127.0.0.1을 사용할 수 있습니다. 이전에 식별된 동일한 인증서를 사용합니다. data-dir을 /var/lib/etcd-data-new로 사용해야 합니다.
etcd-server ~ ➜  ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/etcd/pki/ca.pem --cert=/etc/etcd/pki/etcd.pem --key=/etc/etcd/pki/etcd-key.pem snapshot restore /root/cluster2.db --data-dir /var/lib/etcd-data-new
{"level":"info","ts":1662004927.2399247,"caller":"snapshot/v3_snapshot.go:296","msg":"restoring snapshot","path":"/root/cluster2.db","wal-dir":"/var/lib/etcd-data-new/member/wal","data-dir":"/var/lib/etcd-data-new","snap-dir":"/var/lib/etcd-data-new/member/snap"}
{"level":"info","ts":1662004927.2584803,"caller":"membership/cluster.go:392","msg":"added member","cluster-id":"cdf818194e3a8c32","local-member-id":"0","added-peer-id":"8e9e05c52164694d","added-peer-peer-urls":["http://localhost:2380"]}
{"level":"info","ts":1662004927.264258,"caller":"snapshot/v3_snapshot.go:309","msg":"restored snapshot","path":"/root/cluster2.db","wal-dir":"/var/lib/etcd-data-new/member/wal","data-dir":"/var/lib/etcd-data-new","snap-dir":"/var/lib/etcd-data-new/member/snap"}

etcd-server ~ ➜  
  1. vi /etc/systemd/system/etcd.service를 실행하여 etcd에 대한 systemd 서비스 단위 파일을 업데이트하고 data-dir에 새 값을 추가합니다

4.새 디렉토리에 대한 권한이 올바른지 확인해야 한다 (etcd 사용자가 소유해야 함)

etcd-server /var/lib ➜  chown -R etcd:etcd /var/lib/etcd-data-new

etcd-server /var/lib ➜ 


etcd-server /var/lib ➜  ls -ld /var/lib/etcd-data-new/
drwx------ 3 etcd etcd 4096 Sep  1 02:41 /var/lib/etcd-data-new/
etcd-server /var/lib ➜ 
  1. 마지막으로 etcd 서비스를 다시 로드하고 다시 시작합니다.
etcd-server ~/default.etcd ➜  systemctl daemon-reload 
etcd-server ~ ➜  systemctl restart etcd
etcd-server ~ ➜  

Eternal ETCD 서버에 snapshot 적용하는 방법

다른 Node에 백업을 복사하는 방법

핵심 명령어

  • k config view
  • k config use-context cluster1
  • k config use-context cluster2
  • ps -ef | grep etcd

https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/ -> 명령어 tip
https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/ -> cluster etcd 운영 방법

profile
👩‍💻 Junior Backend Developer

0개의 댓글