KlusterKit: Kubernetes ๋ฐฐํฌ๋ฅผ ๋จ์ํํ๊ณ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฒฉ๋ฆฌ๋ ์จํ๋ ๋ฏธ์ค ํ๊ฒฝ์์ ์คํํ๊ธฐ ์ํ ์คํ ์์ค ํดํท
์ค๋ ์ฐ๋ฆฌ๋ Platform9์ด GitHub์ Apache v2.0 ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ์ธ ๊ฐ์ง ๋๊ตฌ ๋ชจ์์ธ Klusterkit์ ์คํ ์์คํํ๋ค๋ ์์์ ๋ฐํํ๊ฒ ๋์ด ๊ธฐ์๊ฒ ์๊ฐํฉ๋๋ค.
์ฐ๋ฆฌ ๊ณ ๊ฐ์ ๋ณด์์ด๋ ๊ธฐํ ์ด์ ๋ก ์ธํฐ๋ท์ ์ฐ๊ฒฐ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฐ์ธ ๋ฐ์ดํฐ ์ผํฐ์ ์ํํธ์จ์ด๋ฅผ ์ถ์ํฉ๋๋ค. ์ด๋ฌํ ๋๊ธฐ์ ์ Kubernetes๋ฅผ ํ์ฉํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ํํ๋ ๋์์ ์ธ๋ถ ์ธ๊ณ์ ์ฐ๊ฒฐ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๋ค์ํ ๋ฐ์ดํฐ ์ผํฐ์ ์ด๋ฅผ ์ถ์ํ๊ธฐ๋ฅผ ์ํฉ๋๋ค. Klusterkit์ด ๋ฑ์ฅํ์ฌ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ K8s ํด๋ฌ์คํฐ๋ฅผ ์ฝ๊ฒ ํ๋ก๋น์ ๋ํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
Klusterkit์๋ Kubernetes ํ๋ก๋์ ํด๋ฌ์คํฐ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ํจ๊ป ๋๋ ๋ณ๋๋ก ์ฌ์ฉํ ์ ์๋ ์ธ ๊ฐ์ง ๋ ๋ฆฝ์ ์ธ ๋๊ตฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
etcdadm , ๋จ์ํ๋ etcd ํด๋ฌ์คํฐ ๊ด๋ฆฌ๋ฅผ ์ํ CLI.nodeadm , kubeadm์ ํ์ฅํ๊ณ kubeadm์ ํ์ํ ์ข ์์ฑ์ ๋ฐฐํฌํ๋ ๋ ธ๋ ๊ด๋ฆฌ์ฉ CLI์ ๋๋ค.CCTL ๋ Kubernetes ์ปค๋ฎค๋ํฐ์ Cluster API๋ฅผ ์ฑํํ๊ณ nodeadm ๋ฐ etcdadm์ ์ฌ์ฉํ์ฌ ์จํ๋ ๋ฏธ์ค ํ๊ฒฝ์ ๋ฌผ๋ก ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์๋ ๊ฐ์ฉ์ฑ์ด ๋์ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ์ํํ๊ฒ ์ ๊ณตํ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ํด๋ฌ์คํฐ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ ๋๊ตฌ์ ๋๋ค.
์ด ์ธ ๊ฐ์ง ๋๊ตฌ๋ ํจ๊ป ๋ค์ ์์ ์ ์ํํฉ๋๋ค.
- Cluster API๋ฅผ ํตํด ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฒฉ๋ฆฌ๋ ์จํ๋ ๋ฏธ์ค ํ๊ฒฝ์์ ๊ณ ๊ฐ์ฉ์ฑ etcd ํด๋ฌ์คํฐ์ Kubernetes ๋์๋ณด๋๋ฅผ ์ฝ๊ฒ ํ๋ก๋น์ ๋ํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- etcd ๋ฐฑ์ ์ ์ฌ์ฉํ์ฌ ์คํจ ํ ํด๋ฌ์คํฐ ์ ์ดํ์ ๋ณต์ํฉ๋๋ค.
- Kubernetes๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์ ์ ๊ณตํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ์ํฐํฉํธ๋ฅผ ํจํค์งํฉ๋๋ค.
ํด๋ฌ์คํฐํท ๊ธฐ๋ฅ
- ๋ค์ค ๋ง์คํฐ ์ง์(HA ํด๋ฌ์คํฐ K8s)
- ์์ ํ etcd ํด๋ฌ์คํฐ ์ ๊ณต ๋ฐ ๊ด๋ฆฌ.
- ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ์์ ํฉ๋๋ค.
- ๋กค๋ง ์ ๊ทธ๋ ์ด๋ ๋ฐ ๋กค๋ฐฑ์ ์ง์ํฉ๋๋ค.
- ๋ฐฑ์๋์ฉ CNI์ธ ํ๋๋ฌ(vxlan) ๋ค๋ฅธ CNI๋ฅผ ์ง์ํ ๊ณํ์ด ์์ต๋๋ค.
- ์ฟผ๋ผ ์์ค ํ etcd ํด๋ฌ์คํฐ์ ๋ฐฑ์ ๋ฐ ๋ณต์.
- ์ ์ดํ์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU ์๊ฐ ๋ถ์กฑ์ ๋ฐฉ์งํฉ๋๋ค.
Klusterkit ์๋ฃจ์ ์ํคํ ์ฒ
๋ด๊ฒฐํจ์ฑ๊ณผ ๋จ์์ฑ์ ์ํด Klusterkit์ ๋จ์ผ cctl-state.yaml ํ์ผ์ ์ฌ์ฉํ์ฌ Kubernetes ํด๋ฌ์คํฐ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. cctl CLI๋ฅผ ํตํด ์ด ์ํ ํ์ผ์ด ์๋ ๋ชจ๋ ์์คํ ์์ Kubernetes ํด๋ฌ์คํฐ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ ์ด์์์ ๋ฉํ์ผ ์๋ ์๊ณ Kubernetes ํด๋ฌ์คํฐ์ ์ผ๋ถ์ธ ๋ค๋ฅธ ์ปดํจํฐ์ผ ์๋ ์์ต๋๋ค.
Cctl์ ํด๋ฌ์คํฐ์ CRUD ์์
์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์
์คํธ๋ฆผ์์ Cluster-api ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ํธ์ถํฉ๋๋ค. ๊ทธ๋ ์ฌ์ฉํ๋ค
Klusterkit ๋ฐ ํด๋น ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ:
1 โ go get ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ธ ๊ฐ์ง ๋๊ตฌ ์ค ํ๋๋ฅผ ์ฝ๊ฒ ์์งํ ์ ์์ต๋๋ค.
go get -u github.com/platform9/cctl
go get -u github.com/platform9/nodeadm
go get -u github.com/kubernetes-sigs/etcdadm
2 โ ๊ทธ๋ฐ ๋ค์ ์ด๋ฌํ ์คํ ํ์ผ์ ํจํค์งํ์ฌ ๊ณ ๊ฐ์ฉ์ฑ Kubernetes ํด๋ฌ์คํฐ๊ฐ ์คํ๋์ด์ผ ํ๋ ๋์ ์ปดํจํฐ์ ๋ณต์ฌํ ์ ์์ต๋๋ค. nodeadm ๋ฐ etcdadm ํ์ผ์ ๋ฒ์ ๋๋ ํฐ๋ฆฌ์ ๋ฐฐ์นํฉ๋๋ค.
cp $GOPATH/bin/nodeadm /var/cache/ssh-provider/nodeadm//
cp $GOPATH/bin/etcdadm /var/cache/ssh-provider/etcdadm//
3 โ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ๋ก์ปฌ๋ก ์กฐ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ nodeadm ๋ฐ etcdadm download ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ธํฐ๋ท ์ก์ธ์ค๊ฐ ๊ฐ๋ฅํ ์ปดํจํฐ์ ํ์ํ ์ข
์์ฑ์ ๋ฏธ๋ฆฌ ์ฝ๊ฒ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ค์ด๋ก๋ํ ํญ๋ชฉ(์: systemd์ฉ kubelet ๋ฐ kubelet ๋จ์ ํ์ผ, CNI ์คํ ํ์ผ, kubeadm ํ์ผ, Kubernetes๋ฅผ ํฌํจํ ๋ชจ๋ ์ปจํ
์ด๋ ์ด๋ฏธ์ง, keepalived ์ด๋ฏธ์ง ๋ฐ systemd ํ์ผ, etcd ์ปจํ
์ด๋ ์ด๋ฏธ์ง ๋ฐ ํด๋น ๊ตฌ์ฑ ํ์ผ)์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฒฉ๋ฆฌ๋ ํธ์คํธ์ ์ฝ๊ฒ ๋ณต์ฌํ ์ ์์ต๋๋ค. cctl, nodeadm ๋ฐ etcdadm์ ์ฌ์ฉํฉ๋๋ค. (์์ธํ ๋ด์ฉ์
4 โ ๋ชจ๋ ๊ฒ์ด ์ค๋น๋๋ฉด ๋ช ๊ฐ์ง ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ฒซ ๋ฒ์งธ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
โ ๋จผ์ ํด๋ฌ์คํฐ์ ๋ํ ์๊ฒฉ ์ฆ๋ช ์ ์์ฑํฉ๋๋ค.
$GOPATH/bin/cctl create credential --user root --private-key ~/.ssh/id_rsa
โ ๊ทธ๋ฐ ๋ค์ ํด๋ฌ์คํฐ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. โhelp๋ ์ง์๋๋ ์ต์ ๋ชฉ๋ก์ ํ์ํฉ๋๋ค.
$GOPATH/bin/cctl create cluster --pod-network 192.168.0.0/16 --service-network 192.169.0.0/24
โ ๋ง์ง๋ง์ผ๋ก ํด๋ฌ์คํฐ์ ์ฒซ ๋ฒ์งธ ๋จธ์ ์ ์์ฑํฉ๋๋ค.
$GOPATH/bin/cctl create machine --ip $MACHINE_IP --role master
๋ ๋ง์ ๋ฌธ์๋ฅผ ์ฝ์ด๋ณด์ธ์.
์ถ์ฒ : habr.com