KlusterKit: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡƒΠΌ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ Π·Π° опростяванС Π½Π° внСдряванСто Π½Π° Kubernetes ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° във физичСски ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΈ срСди

KlusterKit

ДнСс смС Ρ€Π°Π·Π²ΡŠΠ»Π½ΡƒΠ²Π°Π½ΠΈ Π΄Π° обявим, Ρ‡Π΅ Platform9 Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ Klusterkit, ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΡ‚ Ρ‚Ρ€ΠΈ инструмСнта, ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·Π° Apache v2.0 Π½Π° GitHub.

ΠΠ°ΡˆΠΈΡ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ внСдряват софтуСр Π² частни Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²Π΅ Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ чСсто Π½Π΅ са ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ (ΠΏΠΎΡ€Π°Π΄ΠΈ сигурност ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ). Π’Π΅Π·ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ искат Π΄Π° сС Π²ΡŠΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΎΡ‚ прСдимствата Π½Π° Kubernetes ΠΈ Π΄Π° ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚ своитС прилоТСния ΠΈ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π³ΠΈ внСдрят Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²Π΅ Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ чСсто Π½Π΅ са ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с външния свят. Π’ΠΎΠ²Π° Π΅ мястото, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ сС намСсва Klusterkit, ΠΊΠΎΠ΅Ρ‚ΠΎ улСснява осигуряванСто ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° K8s ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ във физичСски ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ срСди.

Klusterkit Π²ΠΊΠ»ΡŽΡ‡Π²Π° Ρ‚Ρ€ΠΈ нСзависими инструмСнта, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π°Π΅Π΄Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠΎΡ‚Π΄Π΅Π»Π½ΠΎ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ТизнСния Ρ†ΠΈΠΊΡŠΠ» Π½Π° производствСн ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ Π½Π° Kubernetes:

  1. etcdadm, CLI Π·Π° опростСно ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° etcd ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ.
  2. nodeadm, CLI Π·Π° администриранС Π½Π° възСл, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π° kubeadm ΠΈ внСдрява зависимоститС, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π½Π° kubeadm.
  3. cctl, инструмСнт Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ТизнСния Ρ†ΠΈΠΊΡŠΠ» Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ° Cluster API ΠΎΡ‚ общността Π½Π° Kubernetes ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° nodeadm ΠΈ etcdadm Π·Π° Π±Π΅Π·ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎ доставянС ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° високо Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Kubernetes ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ Π² Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΈ Π΄ΠΎΡ€ΠΈ физичСски ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ срСди.

Π—Π°Π΅Π΄Π½ΠΎ Ρ‚Π΅Π·ΠΈ Ρ‚Ρ€ΠΈ инструмСнта ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ слСднитС Π·Π°Π΄Π°Ρ‡ΠΈ:

  • ЛСсно осигуряванС ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π²ΠΈΡΠΎΠΊΠΎΠ΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ etcd ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ ΠΈ Ρ‚Π°Π±Π»ΠΎ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Kubernetes във физичСски ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΈ срСди Ρ‡Ρ€Π΅Π· Cluster API.
  • Π’ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° контролния ΠΏΠ°Π½Π΅Π» Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° слСд ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Ρ‡Ρ€Π΅Π· Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° etcd.
  • ОпакованС Π½Π° всички Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° доставянС Π½Π° Kubernetes във физичСски ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ срСди.

Π₯арактСристики Π½Π° Klusterkit

  • Multi-master ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° (HA ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ K8s).
  • Доставка ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ΠΈ etcd ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ.
  • Π Π°Π±ΠΎΡ‚Π° във физичСски ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ срСди.
  • ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΈ надстройки ΠΈ Π²Ρ€ΡŠΡ‰Π°Π½ΠΈΡ Π½Π°Π·Π°Π΄.
  • Flannel (vxlan) ΠΊΠ°Ρ‚ΠΎ CNI Π·Π° Π±Π΅ΠΊΠ΅Π½Π΄Π°; Има ΠΏΠ»Π°Π½ΠΎΠ²Π΅ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ CNI.
  • АрхивиранС ΠΈ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° etcd ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ слСд Π·Π°Π³ΡƒΠ±Π° Π½Π° ΠΊΠ²ΠΎΡ€ΡƒΠΌ.
  • ΠŸΡ€Π΅Π΄ΠΏΠ°Π·Π²Π° контролния ΠΏΠ°Π½Π΅Π» ΠΎΡ‚ ΠΈΠ·Ρ‡Π΅Ρ€ΠΏΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ процСсорното Π²Ρ€Π΅ΠΌΠ΅.

АрхитСктура Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Klusterkit

KlusterKit

Π—Π° толСрантност към Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ простота, Klusterkit ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΅Π΄ΠΈΠ½ Ρ„Π°ΠΉΠ» cctl-state.yaml Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π½Π° Kubernetes. Π§Ρ€Π΅Π· cctl CLI ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° управляватС ТизнСния Ρ†ΠΈΠΊΡŠΠ» Π½Π° Kubernetes ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ Π½Π° всяка машина, която ΠΈΠΌΠ° Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ» Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π»Π°ΠΏΡ‚ΠΎΠΏ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ всСки Π΄Ρ€ΡƒΠ³ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ част ΠΎΡ‚ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Kubernetes.

Cctl внСдрява ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π° cluster-api интСрфСйса ΠΎΡ‚Π³ΠΎΡ€Π΅ ΠΊΠ°Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° 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 – Ако трябва Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ Π½Π° Kubernetes Π»ΠΎΠΊΠ°Π»Π½ΠΎ, във физичСски ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½Π° срСда, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ зависимости ΠΌΠΎΠ³Π°Ρ‚ лСсно Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€ с Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π° изтСглянС nodeadm ΠΈ etcdadm. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ΠΈΡ‚Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ (Ρ‚.Π΅. kubelet ΠΈ kubelet unit Ρ„Π°ΠΉΠ» Π·Π° systemd, CNI изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, kubeadm Ρ„Π°ΠΉΠ», всички ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΈ изобраТСния, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Kubernetes, keepalived image ΠΈ 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

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ докумСнтация Π½Π° GitHub.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€