[k8s] Control Plane๊ณผ ๊ฐ์ฉ์ฑ
control plane์ ์ฟ ๋ฒ๋คํฐ์ค์ ์ฌ์ฅ์ด๋ผ๊ณ ํ ์ ์๋ ์กด์ฌ๋ค.
๊ฐ ๋
ธ๋์ ์๋ฒ๋ฅผ ํ๋ก๋น์ ๋ํ๊ณ , ๊ทธ ์๋ฒ๋ค์ ์ํ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฅ ์ค์ํ ์ํ ์ ์ฅ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ control plane์ด ๋ค์ด๋๋ค๋ฉด ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ์ ์ฒด์ ์ ๋ขฐ๋๊ฐ ์ฌ๋ผ์ง๊ฒ ๋๋ค.
์ฌ๊ธฐ์๋ control plane์ ๊ตฌ์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ๋ค, ์ ํ์ง๋ค์ ๋ํด์ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณธ๋ค.
Basic ์ํคํ ์ณ
๋๋ถ๋ถ์ k8s ๋ฐฐํฌํ์์๋ ์ ํ์ ์ธ master-slave ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ์ ํด์ค๋ค.
master ๋
ธ๋์ control plane ์๋ฒ์ etcd ์ ์ฅ์๋ฅผ ์ธํ
ํ๊ณ , control plane ์๋ฒ๊ฐ etcd์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉด์ ์์ปค ๋
ธ๋๋ค์ ํต์ ํ๋ ๊ฒ์ด๋ค.
๊ฐ์ฉ์ฑ์ด ๋งค์ฐ ์ค์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ์ด ์ ๋๋ก๋ ์ถฉ๋ถํ๋ค.
ํ์ง๋ง ์๊ธฐํ๋ฏ์ด ์ด๊ฑด ๋ฆฌ์คํฌ๊ฐ ์ ๋ฒ ํฌ๋ค.
control plane์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด Pod์ ๋ํ ์ค์ผ์ค๋ง์ด ์ผ๋จ ์ค๋จ๋๋ค. ๊ฐ๋ณ Pod๋ค์ ๊ฐ๋ณ Node์ ์ปจํ
์ด๋ ๋ฐํ์์ด ๊ด๋ฆฌํ๋๊น ๊ธฐ์กด Pod๋ค๋ ์ฃฝ์ง ์์ง๋ง, ์ง์์ ์ธ ์์ ์ฑ์ ๋ด๋ณดํ ์ ์๋ ๊ฒ์ด๋ค. ์ฅ์ ๊ฐ ๋ฐ์ํ Pod์ ์ฌ์คํ์ด๋ผ๋ ์ง, ์ ๊ท ๋ฆฌ์์ค์ ์ฌํ ๋น ๋ฑ์ด ๋ง๊ฐ์ง๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์คํฐ ๋
ธ๋์ ๋์คํฌ์ ๋ฌธ์ ๊ฐ ์๊ธด๋ค๋ฉด ์ฟ ๋ฒ๋คํฐ์ค์ ์ํ ์์ฒด๊ฐ ์๊ตฌ์ ์ผ๋ก ๋ง๊ฐ์ง ์๋ ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ผ๊ณ ๋ญ ๋ง๋ฒ์ฒ๋ผ ์ ์ ์ฅํด์ฃผ๋๊ฒ ์๋๋ผ, etcd๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ทธ๋ฅ API ์๋ฒ๋ค์ฒ๋ผ ์๋ฒ๋ค์ ์ํ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๊ฒ ์์ค๋๋ฉด ๊ทธ๋ฅ ์๋ฒ ์ ์ฒด ์ ๋ณด๊ฐ ์ ๋ถ ์ฆ๋ฐํ๋ ๊ฒ์ด๋ค.
์ฐธ๊ณ : ์ฌ๊ธฐ์๋ etcd๋ฅผ ๊ณ์ ์ธ๊ธํ์ง๋ง, ํ๋์ ์์์ผ ๋ฟ์ด๋ค. etcd ๋ง๊ณ ๋ค๋ฅธ DB๋ฅผ ์ธ ์๋ ์๋ค.
๊ณ ๊ฐ์ฉ์ฑ ๊ตฌ์กฐ
์๋ฌดํผ ๊ทธ๋์ ์ ๋ง ๊ฐ์ฉ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ์๋ Control Plane์ ๋ค์ค์ผ๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
์ด๋ก ์ ์ธ ๊ณ ๊ฐ์ฉ์ฑ์ ๋ฌ์ฑํ๋ ค๋ฉด ์ต์ 3๊ฐ์ Control Plain ๋
ธ๋๊ฐ ํ์ํ๋ค.
๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ๋์ถฉ ์ด๋ฐ ์์ด ๋ ๊ฒ์ด๋ค.
๊ทผ๋ฐ ์ฌ๊ธฐ์๋ ๊ฐ๋ฆผ๊ธธ์ด ์๊ธด๋ค. ์ฌ์ค Control Plane ์์ฒด๋ฅผ ๋ค์คํํ๋ ๊ฒ์ ๊ทธ๋ ๊ฒ ์ด๋ ค์ด ๋ฌธ์ ๋ ์๋๋ค.
Control Plane ์์ฒด๋ ์ํ ์ ์ฅ์๊ฐ ์๋๋ผ API ์๋ฒ์ด๊ธฐ ๋๋ฌธ์ ์ํ์ ๋ํ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฒฐ๊ตญ ์ค์ํ ๊ฒ์ ์ํ๋ฅผ ์ด๋ ์ ์ฅํ๋์ง๋ค. ๊ทธ๋ฌ๋ฉด ์ด ์ํฉ์์ ๋ฐ์ดํฐ๋ฅผ ์ด๋์ ์ ์ฅํด์ผ ํ ๊น?
2๊ฐ์ง ์ ํ์ง๊ฐ ์๋ค.
๊ณ ๊ฐ์ฉ์ฑ - ์ธ๋ถ DB
๊ฐ์ฅ ๋จ์ํ๊ณ ์ง๊ด์ ์ธ ์ ํ์ง๋, ๊ทธ๋ฅ etcd ํด๋ฌ์คํฐ๋ฅผ ๋ณ๋๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด๋ค.
์ผ๋ฐ์ ์ธ DB ํด๋ฌ์คํฐ ๊ตฌ์ฑํ๋ฏ์ด ์ ์ ํ ๋ฉํฐ๋
ธ๋ ๊ตฌ์ฑํ๊ณ , ๊ทธ DB ํด๋ฌ์คํฐ๋ฅผ Control Plane๋ค์ด ์ฐธ์กฐํ๊ฒ ํ๋ค. ์ฐ๋ฆฌ๊ฐ ํํ ์๊ฐํ๋ API ์๋ฒ์ DB์ ๊ด๊ณ๋ค.
์ด๋ฌ๋ฉด control plane์ด ํ๋ ์ฃฝ๊ฑฐ๋, etcd ๋ ธ๋๊ฐ ํ๋ ๋ป๋๋ผ๋ ์ ์ฒด ๊ฐ์ฉ์ฑ์ ์ ํดํ์ง ์๊ณ ์๋น์ค ์ด์์ด ๊ฐ๋ฅํด์ง๋ค. ๋๋จธ์ง ๋ ธ๋๋ค์ด ๋์ ์ฒ๋ฆฌํด์ค ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๊ฒฝ์ฐ ETCD ํด๋ฌ์คํฐ๊ฐ ์ค์น๋ ๋ ธ๋๋ค์ ๋ ๋ฆฝ์ ์ธ ๋ณ๋ ์ฅ๋น๋ฅผ ์ฌ์ฉํ๋ ํธ์ด๋ค.๊ทธ๋์ ๋์ฒด๋ก ํ๋์จ์ด๊ฐ ์ข ๋ ๋ง์ด ํ์ํ๋ค.
kubeadm์ผ๋ก ์ธ๋ถ etcd๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด, init/joinํ ๋ ๋ค์๊ณผ ๊ฐ์ด ์ธ๋ถ etcd ์ ์์ ๋ณด๋ง ์ ์ ํ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: stable
controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" # change this (see below)
etcd:
external:
endpoints:
- https://ETCD_0_IP:2379 # change ETCD_0_IP appropriately
- https://ETCD_1_IP:2379 # change ETCD_1_IP appropriately
- https://ETCD_2_IP:2379 # change ETCD_2_IP appropriately
caFile: /etc/kubernetes/pki/etcd/ca.crt
certFile: /etc/kubernetes/pki/apiserver-etcd-client.crt
keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key๊ณ ๊ฐ์ฉ์ฑ - ๋ด๋ถ DB
๋ ํ๋์ ๋ฐฉ๋ฒ์, ๊ฐ๋ณ Control Plane ๋
ธ๋์ etcd๋ฅผ ๊ฐ์ ๊ตฌ์ฑํ๊ฒ ํ๋ ๊ฒ์ด๋ค.
stacked etcd๋ผ๊ณ ๋ ๋ถ๋ฅด๊ณ , ๋น๊ต์ ๋ ์ผ๋ฐ์ ์ธ ์ ํ์ง๋ค.
Control Plane์ etcd ํ ์์ด ํ๋์ ๋
๋ฆฝ์ ์ธ DB๊ฐ ๋๊ณ , Control Plane ๊ทธ๋ฃน์ด ํ๋์ ๋ถ์ฐ DB๊ฐ ๋๋ ๊ฒ์ด๋ค.
kubeadm์ HA ๊ตฌ์ฑ์์๋ ์ค์ ๋ก Raft ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐํ๊ณ ๊ณต์ ํ๋ค. Leader๋ ์ ์ถํ๊ณ ๊ทธ๋ฐ๋ค. ๊ทธ๋์ ์ต์ ์ฟผ๋ผ ์ถฉ์กฑ์ ์ํด 3๊ฐ ์ด์์ ๋
ธ๋๊ฐ ํ์์ ์ด๋ค.
์ธ๋ถ etcd ๋ฐฉ์์ ๋นํด ํ๋์จ์ด ์์์ด ๋ ํ์ํ๋ค๋ ์ฅ์ ์ด ์๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ฉ์ฑ ์์ค์ ๊ด์ฐฎ๋ค.
ํ๋์ ๋
ธ๋๊ฐ ๋ป๋๋ผ๋ ๋๋จธ์ง ๋
ธ๋๋ค๋ก ์ Leader๋ฅผ ์ ์ถํ๋ ์ง ํด์ ์์ ์ฑ์ ์ ์งํ ์ ์๋ค.
๋ง์ฝ ๋
ธ๋๋ฅผ control plain ๋
ธ๋๋ก ๋ฑ๋กํ๋ ค๋ฉด, joinํ ๋ ์ ์ฉ ํ๋๊ทธ๋ฅผ ๋ฃ์ผ๋ฉด ๋๋ค.
kubeadm ๋ฐฐํฌํ์ ๊ฒฝ์ฐ์๋ --control-plane ํ๋๊ทธ๋ฅผ ๋ฃ์ผ๋ฉด, node๋ก ์ฐธ์ฌํจ๊ณผ ๋์์ control plane์ผ๋ก ์ค์ ๋๋ค.
kubeadm join --control-plane ...์ฐธ์กฐ
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/ha-topology/
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/