OS Upgrades


Security Patch ๋‚˜ Software Upgrade ๋“ฑ์˜ ์œ ์ง€๋ณด์ˆ˜ ์‚ฌ์œ ๋กœ Node ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น Node ์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” Pod ์„ ๋‹ค๋ฅธ Node ์— ์˜ฎ๊ฒจ๋‘๋Š” ๋ฐฉ๋ฒ•์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

kube-controller-manager --pod-eviction-timeout=5m0s

ReplicaSet ์œผ๋กœ ๋ฐฐํฌ๋œ Pod ์˜ ๊ฒฝ์šฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ 5๋ถ„ ๋’ค ๋‹ค๋ฅธ Node ์— ์žฌ๋ฐฐํฌ๋œ๋‹ค.

kubectl drain node-1

Node ๋‚ด Pod ๋ฅผ ๋‹ค๋ฅธ Node ๋กœ ์˜ฎ๊ธฐ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ drain ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Pod ๋ฅผ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ReplicaSet ์œผ๋กœ ๋ฐฐํฌ๋˜์ง€ ์•Š์€ Pod ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด Error ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

kubectl uncordon node-1

Node ๊ฐ€ ์žฌ์‹œ์ž‘ ๋œ ์ดํ›„ Pod ๊ฐ€ ํ•ด๋‹น Node ์— Scheduling ๋  ์ˆ˜ ์žˆ๋„๋ก uncordon ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ ,

kubectl cordon node-2

๋ฐ˜๋Œ€๋กœ cordon ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Node ์— Pod ๊ฐ€ Scheduling ๋˜๋Š” ๊ฒƒ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

Kubernetes Software Versions


K8s ๋Š” ์ผ๋ฐ˜์ ์ธ Software ์ฒ˜๋Ÿผ Release Version ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ๊ทผ 3๊ฐœ์˜ ๋งˆ์ด๋„ˆ ๋ฒ„์ „์„ ์ง€์›ํ•œ๋‹ค. kube-apiserver, controller-manager, kube-scheduler, kubelet, kube-proxy, kubectl ์€ ๋ชจ๋‘ ๋™์ผํ•œ ๋ฒ„์ „์œผ๋กœ ์ถœ์‹œ๋˜๋ฉฐ, etcd ์™€ core-dns ๋Š” ๊ฐ๊ฐ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์ด๊ธฐ์— ๋…๋ฆฝ์ ์ธ ๋ฒ„์ „์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

kube-apiserver ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค๋ฅธ Component ๋“ค์˜ ๋ฒ„์ „์ด ํ˜ธํ™˜๋  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด kube-apiserver ๊ฐ€ v1.10 ์ผ ๊ฒฝ์šฐ,
  • controller-manager ์™€ kube-scheduler ๋Š” v1.9 ์™€ v1.10 ์ด ํ˜ธํ™˜๋˜๊ณ ,
  • kubelet ๊ณผ kube-proxy ๋Š” v1.8 ๊ณผ v1.9 ์™€ v1.10 ์ด ํ˜ธํ™˜๋˜๊ณ ,
  • kubectl ์€ v1.9 ์™€ v1.10 ๊ณผ v1.11 ์ด ํ˜ธํ™˜๋œ๋‹ค.

Cluster Upgrade Process

K8s Cluster ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ EKS ๋‚˜ AKS ๊ฐ™์€ Managed-Service ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ช‡ ๋ฒˆ์˜ ํด๋ฆญ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—” kubeadm ํˆด์„ ํ™œ์šฉํ•ด Cluster ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.

# k8s apt repository ๋ฆฌ์ŠคํŠธ ํŒŒ์ผ์—์„œ
vim /etc/apt/sources.list.d/kubernetes.list

# ์•„๋ž˜๋กœ ๋ณ€๊ฒฝ
deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /

# apt ์—…๋ฐ์ดํŠธ ํ›„ kubeadm ์ตœ์‹  ๋ฒ„์ „ ํ™•์ธ
apt update
apt-cache madison kubeadm

apt-get install kubeadm=1.32.0-1.1

kubeadm upgrade plan v1.32.0
kubeadm upgrade apply v1.32.0
kubectl get nodes

apt-get install kubelet=1.32.0-1.1
systemctl restart kubelet
kubectl get nodes

๋จผ์ € Master Node ๋ฅผ ์œ„ ๋ช…๋ น์–ด๋“ค์„ ํ†ตํ•ด ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์ž. kubeadm ํˆด ์—ญ์‹œ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฒ„์ „์œผ๋กœ ์ƒˆ๋กœ ์„ค์น˜ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค. ๋˜ํ•œ, kubectl get nodes ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ kubelet ์˜ ๋ฒ„์ „์„ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— kubelet ์—ญ์‹œ ์ƒˆ๋กœ์šด ๋ฒ„์ „์œผ๋กœ ์„ค์น˜ํ•ด์ค€ ๋’ค ํ™•์ธํ•ด๋ณด์ž.

# ๋จผ์ € node01 ์— ์‹คํ–‰์ค‘์ธ Pod ์„ drain ํ•˜๊ณ 
kubectl drain node01

# node01 ์œผ๋กœ ์ ‘์†ํ•œ ๋’ค
ssh node01

# k8s apt repository ๋ฆฌ์ŠคํŠธ ํŒŒ์ผ์—์„œ
vim /etc/apt/sources.list.d/kubernetes.list

# ์•„๋ž˜๋กœ ๋ณ€๊ฒฝ
deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /

# apt ์—…๋ฐ์ดํŠธ ํ›„ kubeadm ์ตœ์‹  ๋ฒ„์ „ ํ™•์ธ
apt update
apt-cache madison kubeadm

apt-get install kubeadm=1.32.0-1.1
kubeadm upgrade node config --kubelet-version v1.32.0

apt-get install kubelet=1.32.0-1.1
systemctl restart kubelet

exit

kubectl uncordon node-1

์ด์ œ Worker Node ๋กœ ๋„˜์–ด๊ฐ„ ๋’ค ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

Backup and Restore Methods


kubectl get all --all-namespaces -o yaml > all-deploy-services.yaml

Resource Configuration ์ž์ฒด๋ฅผ yaml ํŒŒ์ผ๋กœ ์ €์žฅํ•˜์—ฌ ๋ฐฑ์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ ,

# etcd ์Šค๋ƒ…์ƒท ์ƒ์„ฑ
export ETCDCTL_API=3
etcdctl snapshot save /tmp/snapshot.db \
  --endpoints=https://[127.0.0.1]:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/etcd-server.crt \
  --key=/etc/kubernetes/pki/etcd/etcd-server.key
etcdctl snapshot status snapshot.db

# etcd ๋ณต์›
etcdctl snapshot restore /opt/snapshot-pre-boot.db \
  --data-dir /var/lib/etcd-from-backup

# kube-apiserver ์ •์ง€
service kube-apiserver stop

# etcd ์žฌ์‹œ์ž‘
systemctl daemon-reload
service etcd restart

# kube-apiserver ์žฌ์‹œ์ž‘
service kube-apiserver start

๋˜๋Š” etcd ์Šค๋ƒ…์ƒท์„ ์ด์šฉํ•ด ๋ฐฑ์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

vi /etc/kubernetes/manifests/etcd.yaml

# ๋ณต์› ์ดํ›„ volume path ์ˆ˜์ •
  volumes:
  - hostPath:
      path: /var/lib/etcd-from-backup
      type: DirectoryOrCreate
    name: etcd-data

๋ณต์› ์ดํ›„ etcd volume path ๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ์ž.

References