KlusterKit: Π½Π°Π±ΠΎΡ€ инструмСнтов с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ Π·Π° ΠΎΠΏΡ€ΠΎΡΡ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуциитС Π½Π° Kubernetes ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° Π²ΠΎ Ρ„ΠΈΠ·ΠΈΡ‡ΠΊΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΈ срСдини

KlusterKit

ДСнСс с радост ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° Platform9 Π³ΠΈ ΠΎΡ‚Π²ΠΎΡ€Π° ΠΈΠ·Π²ΠΎΡ€Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Π½Π° Klusterkit, ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΠ΄ Ρ‚Ρ€ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ, ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Ρ†Π° Apache v2.0 Π½Π° GitHub.

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

Π’ΠΎ Klusterkit Π²Π»Π΅Π³ΡƒΠ²Π°Π°Ρ‚ Ρ‚Ρ€ΠΈ нСзависни Π°Π»Π°Ρ‚ΠΊΠΈ, ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° сС користат Π·Π°Π΅Π΄Π½ΠΎ ΠΈΠ»ΠΈ ΠΎΠ΄Π΄Π΅Π»Π½ΠΎ Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΈΠΎΡ‚ циклус Π½Π° production-кластСрот Π½Π° 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

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

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

KlusterKit

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

Cctl Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΎΡ‚ upstream интСрфСйса cluster-api ΠΊΠ°Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° CRUD ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²ΡŠΡ€Ρ…Ρƒ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ. Π’ΠΎΠΉ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ssh-provider, доставчик Π½Π° cluster-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 ΠΈ unit Ρ„Π°ΠΉΠ» kubelet Π·Π° systemd, изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ CNI, kubeadm Ρ„Π°ΠΉΠ», всички ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΈ изобраТСния, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Kubernetes, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ for keepalived ΠΈ Ρ„Π°ΠΉΠ» systemd, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° etcd ΠΈ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈΡ‚Π΅ с тях ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅) ΠΌΠΎΠ³Π°Ρ‚ лСсно Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΊΠΎΠΏΠΈΡ€Π°Π½ΠΈ Π½Π° физичСски ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ хостовС Π·Π°Π΅Π΄Π½ΠΎ с cctl, nodeadm ΠΈ etcdadm. (ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Π²ΠΈΠΆΡ‚Π΅ Π² wiki).

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.

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster