Search

[CKA] 35. Cluster Upgrade Process

Date
2025/01/03
Category
Devops
Tag
Kubernetes
CKA
Cluster
๋ชฉ์ฐจ

ย Version Compatibility

[CKA] 34. Kubernetes Releases ์—์„œ control plane์˜ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์€ ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ํ†ตํ•ด ๊ตฌ์„ฑ๋  ๋•Œ ETCD Cluster, CoreDNS ๊ฐ™์€ ์™ธ๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋‘ ๊ฐ™์€ ๋ฒ„์ „์„ ๊ฐ–๋Š”๋‹ค๊ณ  ํ–ˆ๋‹ค. ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋™์ผํ•œ ๋ฒ„์ „์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š๋ƒ๋ฅผ ๋”ฐ์ง€๋ฉด ๊ทธ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, kube-apiserver๋Š” ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์ด ํ†ต์‹ ํ•˜๋Š” ์š”์†Œ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์–ด๋–ค ๊ตฌ์„ฑ ์š”์†Œ๋„ kube-apiserver๋ณด๋‹ค ๋ฒ„์ „์ด ๋†’์•„์„œ๋Š” ์•ˆ๋œ๋‹ค.
๊ทธ๋ ‡๋‹ค๊ณ  kube-apiserver๋งŒ ๊ณ„์† ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๊ตฌ์„ฑ์š”์†Œ์˜ ๋ฒ„์ „์„ ์œ ์ง€์‹œํ‚ฌ ์ˆ˜๋Š” ์—†๋‹ค. controller-manager์™€ kube-scheduler๋Š” kube-apiserver๋ณด๋‹ค ํ•œ ๋‹จ๊ณ„ ๋‚ฎ์€ ๋ฒ„์ „๊นŒ์ง€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ , kubelet๊ณผ kube-proxy๋Š” kube-apiserver ๋ณด๋‹ค ๋‘ ๋‹จ๊ณ„ ๋‚ฎ์€ ๋ฒ„์ „๊นŒ์ง€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‚ฎ์€ ๋ฒ„์ „์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์€ ๋งˆ์ด๋„ˆ(Minor) ๋ฒ„์ „์ด๋‹ค.
Component
Version
Example
kube-apiserver
X
v1.10
Controller-manager
X-1
v1.9 or v1.10
kube-scheduler
X-1
v1.9 or v1.10
kebelet
X-2
v1.8 or v1.9 or v1.10
kube-proxy
X-2
v1.8 or v1.9 or v1.10
kubectl
X-1 ~ X+1
v1.8 ~ v1.11
kube-apiserver๋ณด๋‹ค ๋†’์€ ๋ฒ„์ „์„ ๊ฐ–๋Š” ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์—†์–ด์•ผํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ ์œ„ ํ‘œ์—์„œ kube-apiserver๋ณด๋‹ค ๋†’์€ ๋ฒ„์ „์„ ๊ฐ–๋Š” ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํ•œ๊ฐ€์ง€ ์กด์žฌํ•œ๋‹ค. ๋ฐ”๋กœ kubectl์ด๋‹ค.
์ด๋Ÿฌํ•œ ํŽธ์ฐจ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ๋ฒ„์ „์œผ๋กœ ์‹ค์‹œ๊ฐ„ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•„์š”์— ๋”ฐ๋ผ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.

ย Upgrade

ย When

Kubernetes๋Š” 3๊ฐœ์˜ ์ตœ์‹  ๋ฒ„์ „๋งŒ ์ง€์›ํ•œ๋‹ค. v1.12๊ฐ€ ๊ฐ€์žฅ ์ตœ์‹  ๋ฆด๋ฆฌ์ฆˆ๋ผ๋ฉด v1.12, v1.11, v1.10๋งŒ ์ •์‹ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ ๋ฆด๋ฆฌ์ฆˆ๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „ v1.10์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹ค์Œ ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค.

ย How

Kubernetes๋Š” ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ ํ•œ ๋ฒˆ์— ๋งˆ์ด๋„ˆ ๋ฒ„์ „ ํ•˜๋‚˜์”ฉ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. v1.10 ๋ฒ„์ „์„ ์‚ฌ์šฉ ์ค‘์ด๋ผ๊ณ  ํ•  ๋•Œ v1.13์ด ๋ฆด๋ฆฌ์ฆˆ ๋œ๋‹ค๋ฉด v1.13์œผ๋กœ ๋ฐ”๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ v1.11๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ย Process

์—…๊ทธ๋ ˆ์ด๋“œ ํ”„๋กœ์„ธ์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.
โ€ข
CSP: AWS, GCP ๊ฐ™์€ CSP์— ๋ฐฐํฌ๋˜๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ผ๋ฉด ํ•ด๋‹น CSP ์„œ๋น„์Šค์—์„œ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ฒŒ ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
โ€ข
kubeadm: kubeadm ๊ฐ™์€ ํˆด์„ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ฐฐํฌํ–ˆ๋‹ค๋ฉด ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋“ค์„ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ณ„ํšํ•˜๊ณ  ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ—ฆ
kubeadm upgrade plan
โ—ฆ
kubeadm upgrade apply
โ€ข
From Scratch: ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐฐํฌํ–ˆ๋‹ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ์˜ค์†Œ๋ฅผ ์ง์ ‘ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผํ•œ๋‹ค.

ย Upgrade Strategies

ย Upgrade Master Nodes

๋จผ์ € ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ๋‹ค. ์ด ๊ณผ์ •์—์„œ API ์„œ๋ฒ„, ์Šค์ผ€์ค„๋Ÿฌ, ์ปจํŠธ๋กค๋Ÿฌ ๋งค๋‹ˆ์ € ๋“ฑ control plane์˜ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์ด ์ž ์‹œ ์ค‘๋‹จ๋˜์ง€๋งŒ, ์›Œ์ปค ๋…ธ๋“œ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์ด ์ค‘๋‹จ๋˜๊ธฐ ๋•Œ๋ฌธ์— kubectl์„ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ณ , ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค. ๋˜ํ•œ Pod๊ฐ€ ์ค‘๋‹จ๋˜์–ด๋„ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค.

ย Upgrade Worker Nodes

๋งˆ์Šคํ„ฐ ๋…ธ๋“œ ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์›Œ์ปค ๋…ธ๋“œ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ๋‹ค. ์›Œ์ปค ๋…ธ๋“œ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ์—๋Š” ๋‹ค์–‘ํ•œ ์ „๋žต์ด ์‚ฌ์šฉ๋œ๋‹ค.
1.
Upgrade All Nodes at Once
ํ•œ ๋ฒˆ์— ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ์ „๋žต์œผ๋กœ, ์ด ๋•Œ๋Š” ๋‹ค์šดํƒ€์ž„์ด ๋ฐœ์ƒํ•˜๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ‘์†ํ•  ์ˆ˜ ์—†๋‹ค.
2.
Upgrade One Node at a time
ํ•œ ๋ฒˆ์— ๋…ธ๋“œ ํ•˜๋‚˜์”ฉ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ์ „๋žต์ด๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œ์‹œํ‚ฌ ๋•Œ, ํ•ด๋‹น ๋…ธ๋“œ์˜ ์›Œํฌ๋กœ๋“œ๋ฅผ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™์‹œํ‚จ๋‹ค. ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ ๋…ธ๋“œ๋„ ๋ฐฉ๊ธˆ ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๋ฉฐ ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด ๋ฐ˜๋ณตํ•œ๋‹ค.
3.
Add New Nodes
์—…๊ทธ๋ ˆ์ด๋“œ ๋œ ๋ฒ„์ „์„ ๊ฐ€์ง„ ๋…ธ๋“œ๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ์ „๋žต์ด๋‹ค. ์ƒˆ ๋…ธ๋“œ๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜์—ฌ ์›Œํฌ๋กœ๋“œ๋ฅผ ์ƒˆ ๋…ธ๋“œ๋กœ ์˜ฎ๊ธฐ๊ณ  ๊ตฌ ๋ฒ„์ „ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ํŠนํžˆ ํŽธ๋ฆฌํ•˜๋‹ค.

ย Upgrade with kubeadm

Control plane

kubeadm์€ ํด๋Ÿฌ์Šคํ„ฐ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๋•๋Š” ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋‹ค. kubeadm upgrade plan ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ˜„์žฌ ํด๋Ÿฌ์Šคํ„ฐ ๋ฒ„์ „, kubeadm tool ๋ฒ„์ „, ์ตœ์‹  ์•ˆ์ • ๋ฒ„์ „ ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ control plane์˜ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์— ๋Œ€ํ•œ ํ˜„์žฌ ๋ฒ„์ „๊ณผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฒ„์ „์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ถ”๊ฐ€๋กœ kubelet ๋ฒ„์ „์„ ๊ฐ ๋…ธ๋“œ์—์„œ ์ˆ˜๋™์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ตฌ๋ฌธ์ด ๋‚˜์˜ค๋Š”๋ฐ, kubeadm์€ kublet ์„ค์น˜๋‚˜ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์ดํ›„ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ธฐ ์œ„ํ•ด kubeadm tool์„ ๋จผ์ € ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  kubeadm upgrade apply ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.
apt-get upgrade -y kubeadm=<version> # kubeadm=1.12.0-00 kubeadm upgrade apply <version> # v1.12.0
Bash
๋ณต์‚ฌ
์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ kubectl get nodes ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด๋„ VERSION ์—ด์—๋Š” ์—…๊ทธ๋ ˆ์ด๋“œ๋œ ๋ฒ„์ „์œผ๋กœ ๋ณด์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ถœ๋ ฅ๋˜๋Š” ํ•ด๋‹น ๋ฒ„์ „์€ ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•œ kubelet์˜ ๋ฒ„์ „์ด๊ธฐ ๋•Œ๋ฌธ์— kubelet์„ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•ด์•ผํ•œ๋‹ค.

Kubelet

์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, kubelet์˜ ๋ฒ„์ „์„ ๊ฐ ๋…ธ๋“œ๋งˆ๋‹ค ์ˆ˜๋™์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผํ•œ๋‹ค. ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ kubelet์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„, ์›Œ์ปค ๋…ธ๋“œ๋„ ํ•˜๋‚˜์”ฉ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ๋‹ค. ์›Œ์ปค ๋…ธ๋“œ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ๋Š” drain ๋ช…๋ น์„ ํ†ตํ•ด cordon ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฉฐ, ์™„๋ฃŒ ํ›„ uncordon ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.
[master node]
apt-get upgrade -y kubelet=<version> # kubelet=1.12.0-00 systemctl restart kubelet
Bash
๋ณต์‚ฌ
[worker node]
kubectl drain <node-name> # master์—์„œ ์‹คํ–‰ apt-get upgrade -y kubeadm=<version> # kubeadm=1.12.0-00 apt-get upgrade -y kubelet=<version> # kubelet=1.12.0-00 kubeadm upgrade node config --kubelet-version <version> # v1.12.0 systemctl restart kubelet kubectl uncordon <node-name> # master์—์„œ ์‹คํ–‰
Bash
๋ณต์‚ฌ

ย Documents

์ฒซ๋ฒˆ์งธ ๋งํฌ์—์„œ ํ•œ๊ตญ์–ด๋กœ ํŽ˜์ด์ง€ ์„ค์ •์„ ํ•˜๋ฉด package repository๋กœ ๊ฐ€๋Š” ๋งํฌ(๋‘๋ฒˆ์งธ ๋งํฌ)๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค. ์ด ์ ๋งŒ ์ฃผ์˜ํ•ด์„œ ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์ž.