๋ชฉ์ฐจ
ย Version Compatibility
๊ทธ๋ ๋ค๊ณ 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๋ก ๊ฐ๋ ๋งํฌ(๋๋ฒ์งธ ๋งํฌ)๊ฐ ๋ณด์ด์ง ์๋๋ค. ์ด ์ ๋ง ์ฃผ์ํด์ ์
๊ทธ๋ ์ด๋ ๋ฌธ์๋ฅผ ํ์ธํ์.