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 ΠΈ ΡŽΠ½ΠΈΡ‚-Ρ„Π°ΠΉΠ» kubelet для systemd, исполняСмыС Ρ„Π°ΠΉΠ» Ρ„Π°ΠΉΠ»Ρ‹ CNI, Ρ„Π°ΠΉΠ» kubeadm, всС ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Kubernetes, ΠΎΠ±Ρ€Π°Π· 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