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 ๋ฅผ ์์ ํด์ฃผ์.