KlusterKit: Алатник со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ Π·Π° ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ°Ρ‚Π° Π½Π° Kubernetes ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ Ρ„ΠΈΠ·ΠΈΡ‡ΠΊΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ срСдини Π²ΠΎ просториитС

KlusterKit

ДСнСс смС Π²ΠΎΠ·Π±ΡƒΠ΄Π΅Π½ΠΈ Π΄Π° објавимС Π΄Π΅ΠΊΠ° ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 9 Π΅ со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΈ ΠΈΠ·Π²ΠΎΡ€ΠΈ Klusterkit, ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΠ΄ Ρ‚Ρ€ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ, ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Ρ†Π°Ρ‚Π° Apache v2.0 Π½Π° GitHub.

ΠΠ°ΡˆΠΈΡ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ ΠΏΡƒΡˆΡ‚Π°Π°Ρ‚ софтвСр Π²ΠΎ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΈ Ρ†Π΅Π½Ρ‚Ρ€ΠΈ Π·Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΊΠΎΠΈ чСсто Π½Π΅ сС ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ Π½Π° Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ (ΠΎΠ΄ бСзбСдносни ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ). ОвиС Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ сакаат Π΄Π° Π³ΠΈ искористат прСдноститС Π½Π° Kubernetes ΠΈ Π΄Π° Π³ΠΈ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€Π°Π°Ρ‚ Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π²ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π³ΠΈ ΠΏΡƒΡˆΡ‚Π°Ρ‚ Π²ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ†Π΅Π½Ρ‚Ρ€ΠΈ Π·Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, ΠΊΠΎΠΈ чСсто Π½Π΅ сС ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ со Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ½ΠΈΠΎΡ‚ свСт. Ова Π΅ мСстото ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ Π΄ΠΎΠ°Ρ“Π° Klusterkit, ΡˆΡ‚ΠΎ Π³ΠΎ олСснува ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΈ ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ со кластСритС Π½Π° K8 Π²ΠΎ Ρ„ΠΈΠ·ΠΈΡ‡ΠΊΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ срСдини.

Klusterkit Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° Ρ‚Ρ€ΠΈ нСзависни Π°Π»Π°Ρ‚ΠΊΠΈ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС користат Π·Π°Π΅Π΄Π½ΠΎ ΠΈΠ»ΠΈ ΠΎΠ΄Π΄Π΅Π»Π½ΠΎ Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΈΠΎΡ‚ циклус Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈΠΎΡ‚ кластСр Kubernetes:

  1. ΠΈΡ‚Π½Π΄Π°Π΄ΠΌ, CLI Π·Π° поСдноставСно ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со кластСри etcd.
  2. nodeadm, CLI Π·Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° јазли ΡˆΡ‚ΠΎ Π³ΠΎ ΠΏΡ€ΠΎΡˆΠΈΡ€ΡƒΠ²Π° kubeadm ΠΈ Π³ΠΈ распорСдува зависноститС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π·Π° kubeadm.
  3. cctl, Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΈΠΎΡ‚ циклус Π½Π° кластСрот ΡˆΡ‚ΠΎ Π³ΠΎ ΡƒΡΠ²ΠΎΡ˜ΡƒΠ²Π° Cluster API ΠΎΠ΄ Π·Π°Π΅Π΄Π½ΠΈΡ†Π°Ρ‚Π° Kubernetes ΠΈ користи nodeadm ΠΈ etcdadm Π·Π° бСспрСкорно ΠΈΡΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°ΡšΠ΅ ΠΈ ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° високо достапни Kubernetes кластСри Π²ΠΎ простории, ΠΏΠ° Π΄ΡƒΡ€ΠΈ ΠΈ Ρ„ΠΈΠ·ΠΈΡ‡ΠΊΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ срСдини.

Π—Π°Π΅Π΄Π½ΠΎ, ΠΎΠ²ΠΈΠ΅ Ρ‚Ρ€ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ Π³ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°Π°Ρ‚ слСднитС Π·Π°Π΄Π°Ρ‡ΠΈ:

  • ЛСсно ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Ρ‚Π΅ ΠΈ ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°Ρ˜Ρ‚Π΅ со високо достапниот etcd кластСр ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»Π° Π½Π° Kubernetes Π²ΠΎ Ρ„ΠΈΠ·ΠΈΡ‡ΠΊΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ срСдини Π²ΠΎ просториитС ΠΏΡ€Π΅ΠΊΡƒ Cluster API.
  • Π’Ρ€Π°ΡœΠ°ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»Π° Π½Π° кластСрот ΠΏΠΎ Π΄Π΅Ρ„Π΅ΠΊΡ‚ со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½Π° копија ΠΎΠ΄ etcd.
  • ΠŸΠ°ΠΊΡƒΠ²Π°ΡšΠ΅ Π½Π° ситС Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π·Π° испорака Π½Π° Kubernetes Π²ΠΎ Ρ„ΠΈΠ·ΠΈΡ‡ΠΊΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ срСдини.

ΠšΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΡΡ‚ΠΈΠΊΠΈ Π½Π° Klusterkit

  • ΠœΡƒΠ»Ρ‚ΠΈ-мастСр ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° (HA кластСр K8s).
  • Π˜ΡΠΏΠΎΡ€Π°ΠΊΠ° ΠΈ ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со Π±Π΅Π·Π±Π΅Π΄Π½ΠΈ etcd кластСри.
  • Π Π°Π±ΠΎΡ‚Π° Π²ΠΎ Ρ„ΠΈΠ·ΠΈΡ‡ΠΊΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ срСдини.
  • ΠŸΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° ΠΏΡ€Π΅Π²Ρ€Ρ‚Π»ΠΈΠ²ΠΈ Π½Π°Π΄Π³Ρ€Π°Π΄Π±ΠΈ ΠΈ Π²Ρ€Π°ΡœΠ°ΡšΠ΅ Π½Π°Π·Π°Π΄.
  • Π€Π»Π°Π½Π΅Π» (vxlan) ΠΊΠ°ΠΊΠΎ CNI Π·Π° Π·Π°Π΄Π½ΠΈΠΎΡ‚ Π΄Π΅Π»; ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ ΠΏΠ»Π°Π½ΠΎΠ²ΠΈ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ ЦНИ.
  • Π Π΅Π·Π΅Ρ€Π²Π½Π° копија ΠΈ Ρ€Π΅ΡΡ‚Π°Π²Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° кластСри etcd ΠΏΠΎ Π³ΡƒΠ±Π΅ΡšΠ΅ Π½Π° ΠΊΠ²ΠΎΡ€ΡƒΠΌΠΎΡ‚.
  • Ја ΡˆΡ‚ΠΈΡ‚ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»Π° ΠΎΠ΄ ΡΠ½Π΅ΠΌΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° процСсорот.

Klusterkit Solution Architecture

KlusterKit

Π—Π° Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ†ΠΈΡ˜Π° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ Сдноставност, Klusterkit користи Π΅Π΄Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° cctl-state.yaml Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ΅Ρ‚Π°ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ кластСрот Kubernetes. ΠŸΡ€Π΅ΠΊΡƒ cctl CLI, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°Ρ‚Π΅ со ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΈΠΎΡ‚ циклус Π½Π° кластСрот Kubernetes Π½Π° која Π±ΠΈΠ»ΠΎ машина ΡˆΡ‚ΠΎ ја ΠΈΠΌΠ° ΠΎΠ²Π°Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°. Ова ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ Π»Π°ΠΏΡ‚ΠΎΠΏ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ кој Π±ΠΈΠ»ΠΎ Π΄Ρ€ΡƒΠ³ ΠΊΠΎΠΌΠΏΡ˜ΡƒΡ‚Π΅Ρ€ ΡˆΡ‚ΠΎ Π΅ Π΄Π΅Π» ΠΎΠ΄ кластСрот Kubernetes.

Cctl ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° ΠΈ ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° кластСр-Π°ΠΏΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ ΠΎΠ΄ Π³ΠΎΡ€Π΅ ΠΊΠ°ΠΊΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° CRUD ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° кластСри. Вој користи ssh-ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€, ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€ со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ Π·Π° Π³ΠΎΠ»ΠΈ ΠΌΠ΅Ρ‚Π°Π»Π½ΠΈ кластСри-api ΠΎΠ΄ Platform9, кој ΠΏΠ°ΠΊ Π³ΠΈ ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° etcdadm ΠΈ nodeadm Π·Π° Π΄Π° Π²Ρ€ΡˆΠ°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° кластСрот.

Како Π΄Π° сС користи 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 – Ако Ρ‚Ρ€Π΅Π±Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ Π΄Π° оркСстриратС кластСр ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ, Π²ΠΎ Ρ„ΠΈΠ·ΠΈΡ‡ΠΊΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½Π° срСдина, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΡ‚Π΅ зависности ΠΌΠΎΠΆΠ΅ лСсно Π΄Π° сС ΠΏΡ€Π΅Π·Π΅ΠΌΠ°Ρ‚ ΠΎΠ΄Π½Π°ΠΏΡ€Π΅Π΄ Π½Π° ΠΊΠΎΠΌΠΏΡ˜ΡƒΡ‚Π΅Ρ€ со пристап Π΄ΠΎ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ со помош Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π° ΠΏΡ€Π΅Π·Π΅ΠΌΠ°ΡšΠ΅ nodeadm ΠΈ etcdadm. ΠŸΠΎΡ‚ΠΎΠ° ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Π½ΠΈΡ‚Π΅ ставки (Ρ‚.Π΅. kubelet ΠΈ kubelet Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π·Π° systemd, CNI ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, kubeadm Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, ситС слики ΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ Π³ΠΈ Kubernetes, keepalived слика ΠΈ systemd Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, ΠΈΡ‚Π½. со cctl, nodeadm ΠΈ etcdadm. (Π’ΠΈΠ΄Π΅Ρ‚Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ Π²ΠΎ Π²ΠΈΠΊΠΈ).

4 – ΠžΡ‚ΠΊΠ°ΠΊΠΎ сè Π΅ Π½Π° мСсто, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€Π²ΠΈΠΎΡ‚ кластСр Kubernetes со Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:

– ΠŸΡ€Π²ΠΎ ΠΊΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π°ΠΊΡ€Π΅Π΄ΠΈΡ‚ΠΈΠ²ΠΈ Π·Π° кластСрот.

$GOPATH/bin/cctl create credential --user root --private-key ~/.ssh/id_rsa

– ΠŸΠΎΡ‚ΠΎΠ° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ кластСр ΠΎΠ±Ρ˜Π΅ΠΊΡ‚. β€“ΠΏΠΎΠΌΠΎΡˆ ΠΏΡ€ΠΈΠΊΠ°ΠΆΡƒΠ²Π° листа Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΠΆΠ°Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ.

$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

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ˜Ρ‚Π΅ повСќС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° GitHub.

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€