ΠŸΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ Kubernetes ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π° Π½Π° Raspberry Pi

ΠŸΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ Kubernetes ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π° Π½Π° Raspberry Pi

БъвсСм скоро извСстна компания обяви, Ρ‡Π΅ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Ρ сСрията си Π½ΠΎΡƒΡ‚Π±ΡƒΡ†ΠΈ Π½Π° ARM Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°. Π§ΡƒΠ²Π°ΠΉΠΊΠΈ Ρ‚Π°Π·ΠΈ Π½ΠΎΠ²ΠΈΠ½Π°, си спомних: ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π°ΠΉΠΊΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Ρ†Π΅Π½ΠΈΡ‚Π΅ Π½Π° EC2 Π² AWS, ΠΌΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅ Graviton с ΠΌΠ½ΠΎΠ³ΠΎ Π°Ρ‚Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π° Ρ†Π΅Π½Π°. ΠŸΠΎΠ΄Π²ΠΎΠ΄Π½ΠΈΡΡ‚ камък, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, бСшС, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ ARM. Π’ΠΎΠ³Π°Π²Π° ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ ΠΌΠΈ бСшС Ρ…Ρ€ΡƒΠΌΠ½Π°Π»ΠΎ, Ρ‡Π΅ ARM Π΅ доста сСриозно...

Π—Π° ΠΌΠ΅Π½ Ρ‚Π°Π·ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π²ΠΈΠ½Π°Π³ΠΈ Π΅ Π±ΠΈΠ»Π° ΡΠ²ΡŠΡ€Π·Π°Π½Π° с ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ устройства ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ IoT Π½Π΅Ρ‰Π°. β€žΠ˜ΡΡ‚ΠΈΠ½ΡΠΊΠΈΡ‚Π΅β€œ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ Π½Π° ARM β€” ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ ΠΏΠΎ-Π½Π΅ΠΎΠ±ΠΈΡ‡Π°ΠΉΠ½ΠΎ, Π΄ΠΎΡ€ΠΈ донякъдС СксцСнтрично... ΠžΠ±Π°Ρ‡Π΅ Π½ΠΎΠ²Π°Ρ‚Π° идСя ΠΌΠΈ Π·Π°Π΅ ΡƒΠΌΠ°, Π·Π°Ρ‚ΠΎΠ²Π° Π² Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΡƒΠΈΠΊΠ΅Π½Π΄ΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠΈΡ… Π΄Π° провСря ΠΊΠ°ΠΊΠ²ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° сС стартира Π½Π° ARM. И Π·Π° Ρ‚ΠΎΠ²Π° Ρ€Π΅ΡˆΠΈΡ… Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π° с Π±Π»ΠΈΠ·ΠΊΠΎΡ‚ΠΎ ΠΈ ΠΏΠΎΠ·Π½Π°Ρ‚ΠΎ β€” кластСр Kubernetes. И Π½Π΅ просто някакъв условСн β€žΠΊΠ»Π°ΡΡ‚Π΅Ρ€β€œ, Π° всичко Π΄Π° Π΅ β€žΠΏΠΎ-Π²ΡŠΠ·Ρ€Π°ΡΡ‚Π½ΠΎβ€œ, Π·Π° Π΄Π° бъдС максимално ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ съм свикнал Π΄Π° Π²ΠΈΠΆΠ΄Π°ΠΌ Π² продукция.

Π‘ΠΏΠΎΡ€Π΅Π΄ моята идСя, ΠΊΠ»Π°ΡΡ‚Π΅Ρ€ΡŠΡ‚ трябва Π΄Π° Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚, Π΄Π° ΠΈΠΌΠ° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‰ΠΎ сС ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ½Π΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³. Π—Π° рСализацията Π½Π° Ρ‚Π°Π·ΠΈ идСя Ρ‰Π΅ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π΄Π²Π° (ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅) Raspberry Pi Π½Π΅ ΠΏΠΎ-ниски ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π» 3B+. ΠŸΠ»ΠΎΡ‰Π°Π΄ΠΊΠ°Ρ‚Π° Π·Π° СкспСримСнтитС ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΈ AWS, Π½ΠΎ ΠΌΠ΅Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ β€žΠΌΠ°Π»ΠΈΠ½ΠΈΡ‚Π΅β€œ ΠΌΠ΅ интСрСсуваха (ΠΊΠΎΠΈΡ‚ΠΎ Ρ‚Π°ΠΊΠ° ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ стояха Π±Π΅Π· Ρ€Π°Π±ΠΎΡ‚Π°). И Ρ‚Π°ΠΊΠ°, Ρ‰Π΅ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Π½Π° тях кластСр Kubernetes с Ingress, Prometheus ΠΈ Grafana.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° β€žΠΌΠ°Π»ΠΈΠ½ΠΈβ€œ

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° ОБ ΠΈ SSH

Π‘ ΠΈΠ·Π±ΠΎΡ€Π° Π½Π° ОБ Π·Π° инсталиранС Π½Π΅ сС ΠΌΡŠΡ‡ΠΈΡ… ΠΌΠ½ΠΎΠ³ΠΎ: просто Π²Π·Π΅Ρ… Π½Π°ΠΉ-Π½ΠΎΠ²ΠΎΡ‚ΠΎ Raspberry Pi OS Lite с официалния сайт. Π’Π°ΠΌ ΡΡŠΡ‰ΠΎ Π΅ Π½Π°Π»ΠΈΡ‡Π½Π° докумСнтация Π·Π° инсталация, всички дСйствия ΠΎΡ‚ която трябва Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΡ‚ Π½Π° всСки възСл ΠΎΡ‚ Π±ΡŠΠ΄Π΅Ρ‰ΠΈΡ кластСр. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ°Ρ‚ слСднитС ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ†ΠΈΠΈ (ΡΡŠΡ‰ΠΎ Π½Π° всички възли).

Π‘Π²ΡŠΡ€Π·Π²Π°ΠΉΠΊΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° сС настрои ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΈ SSH:

  1. Π—Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° кластСра Π½Π° мастСра Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° ΠΈΠΌΠ° статичСн IP адрСс, Π° Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ възли β€” ΠΏΠΎ усмотрСниС. Аз ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΡ… статични адрСси навсякъдС ΠΎΡ‚ удобство Π·Π° настройка.
  2. Бтатичният адрСс ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° Π² ОБ (Π² Ρ„Π°ΠΉΠ»Π° /etc/dhcpcd.conf ΠΈΠΌΠ° подходящ ΠΏΡ€ΠΈΠΌΠ΅Ρ€) ΠΈΠ»ΠΈ Ρ‡Ρ€Π΅Π· фиксиранС Π½Π° lease Π² DHCP ΡΡŠΡ€Π²ΡŠΡ€Π° Π½Π° използвания (Π² моя случай β€” домашСн) Ρ€ΡƒΡ‚Π΅Ρ€.
  3. ssh-server просто сС Π²ΠΊΠ»ΡŽΡ‡Π²Π° Π² raspi-config (interfacing options β†’ ssh).

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²Π»Π΅Π·Π΅Ρ‚Π΅ ΠΏΠΎ SSH (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ потрСбитСлят Π΅ pi, Π° ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° Π΅ raspberry ΠΈΠ»ΠΈ Ρ‚Π°Π·ΠΈ, Π½Π° която я смСнихтС) ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅ настройкитС.

Π”Ρ€ΡƒΠ³ΠΈ настройки

  1. Π©Π΅ Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΈΠΌΠ΅ Π½Π° хоста. Π’ моя ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ pi-control ΠΈ pi-worker.
  2. НСка ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма Π΅ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π° Π½Π° цСлия диск (df -h /). ΠŸΡ€ΠΈ нСобходимост ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π° с raspi-config.
  3. Π©Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° Π½Π° потрСбитСля ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π² raspi-config.
  4. Π©Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅ swap Ρ„Π°ΠΉΠ»Π° (Ρ‚ΠΎΠ²Π° Π΅ изискванСто Π½Π° Kubernetes; Π°ΠΊΠΎ Π²ΠΈ интСрСсуват подробности ΠΏΠΎ Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ°, Π²ΠΈΠΆΡ‚Π΅ issue #53533):
    dphys-swapfile swapoff
    systemctl disable dphys-swapfile
  5. Π©Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ Π΄ΠΎ послСднитС вСрсии:
    apt-get update && apt-get dist-upgrade -y
  6. Π©Π΅ инсталирамС Docker ΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ:
    apt-get install -y docker docker.io apt-transport-https curl bridge-utils iptables-persistent

    ΠŸΡ€ΠΈ инсталиранС iptables-persistent Ρ‰Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡ‚Π΅ настройкитС Π½Π° iptables Π·Π° ipv4, Π° във Ρ„Π°ΠΉΠ»Π° /etc/iptables/rules.v4 β€” Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π² Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π° FORWARD, ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

    # Generated by xtables-save v1.8.2 on Sun Jul 19 00:27:43 2020
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A FORWARD -s 10.1.0.0/16  -j ACCEPT
    -A FORWARD -d 10.1.0.0/16  -j ACCEPT
    COMMIT
  7. ΠžΡΡ‚Π°Π²Π° само Π΄Π° сС рСстартирамС.

Π‘Π΅Π³Π° всичко Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ Π·Π° инсталация Π½Π° кластСра Kubernetes.

Π˜Π½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ Π½Π° Kubernetes

На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ ΡƒΠΌΠΈΡˆΠ»Π΅Π½ΠΎ ΠΎΡ‚Π»ΠΎΠΆΠΈΡ… всичкитС си ΠΈ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π·Π° автоматизация Π½Π° инсталацията ΠΈ конфигурацията Π½Π° кластСра K8s. ВмСсто Ρ‚ΠΎΠ²Π°, Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π°Ρ‚Π° докумСнтация с kubernetes.io (Π»Π΅ΠΊΠΎ допълнСна с ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ ΠΈ ΡΡŠΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΡ).

Π©Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ рСпозитория Π½Π° Kubernetes:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update

Π‘Π»Π΅Π΄Π²Π° Π² докумСнтацията Π΄Π° сС инсталира CRI (container runtime interface). Въй ΠΊΠ°Ρ‚ΠΎ Docker Π²Π΅Ρ‡Π΅ Π΅ инсталиран, ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ Π½Π°ΠΏΡ€Π΅Π΄ ΠΈ инсталирамС основнитС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ:

sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni

На ΡΡ‚ΡŠΠΏΠΊΠ°Ρ‚Π° Π·Π° инсталиранС Π½Π° основнитС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π²Π΅Π΄Π½Π°Π³Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ… kubernetes-cni, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°. И Ρ‚ΡƒΠΊ ΠΈΠΌΠ° Π²Π°ΠΆΠ΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚: ΠΏΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ kubernetes-cni ΠΏΠΎ някаква ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π½Π΅ създава дирСктория ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π° настройкитС Π½Π° CNI интСрфСйситС, Π·Π°Ρ‚ΠΎΠ²Π° ΠΌΠΈ сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° я създам Ρ€ΡŠΡ‡Π½ΠΎ:

mkdir -p /etc/cni/net.d

Π—Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° мрСТовия Π±Π΅ΠΊΠ΅Π½Π΄, Π·Π° ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° инсталиратС плъгина Π·Π° CNI. Π˜Π·Π±Ρ€Π°Ρ… разбираСмия ΠΈ ΠΏΠΎΠ·Π½Π°Ρ‚ ΠΌΠΈ плъгин portmap (ΠΏΡŠΠ»Π½ΠΈΡΡ‚ ΠΈΠΌ списък Π²ΠΈΠΆΡ‚Π΅ Π² докумСнтацията):

curl -sL https://github.com/containernetworking/plugins/releases/download/v0.7.5/cni-plugins-arm-v0.7.5.tgz | tar zxvf - -C /opt/cni/bin ./portmap

Настройка Π½Π° Kubernetes

Π£Π·Π΅Π» с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ»Π°Π½Π°

Π˜Π½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡΡ‚Π° Π½Π° самия ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ става доста лСсно. А Π·Π° ускоряванС Π½Π° Ρ‚ΠΎΠ·ΠΈ процСс ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄Π°Π»ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ Π½Π° Kubernetes са Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅:

kubeadm config images pull

Π‘Π΅Π³Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΠΌΠ΅ самата инсталация β€” ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° управляващия ΠΏΠ»Π°Π½ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°:

kubeadm init --pod-network-cidr=10.1.0.0/16 --service-cidr=10.2.0.0/16 --upload-certs

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ подсСтитС Π·Π° услугитС ΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅Ρ‚Π΅ Π½Π΅ трябва Π΄Π° сС прСсичат ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си ΠΈ с Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ ΠΌΡ€Π΅ΠΆΠΈ.

Π’ края Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, Ρ‡Π΅ всичко Π΅ Π½Π°Ρ€Π΅Π΄, ΠΈ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‰Π΅ Π½ΠΈ посочат ΠΊΠ°ΠΊ Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ възли към контролния ΠΏΠ»Π°Π½:

Π’Π°ΡˆΠΈΡΡ‚ Kubernetes ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Π½ ΠΏΠ»Π°Π½ Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ! Π—Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° си, трябва Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ слСдното ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»:
 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config
Π‘Π΅Π³Π° трябва Π΄Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Ρ‚Π΅ ΠΏΠΎΠ΄ΠΎΠ²Π° ΠΌΡ€Π΅ΠΆΠ° Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°.
Π˜Π·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ "kubectl apply -f [podnetwork].yaml" с Π΅Π΄Π½Π° ΠΎΡ‚ ΠΎΠΏΡ†ΠΈΠΈΡ‚Π΅, ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ Π½Π°:
 https://kubernetes.io/docs/concepts/cluster-administration/addons/
Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π±Ρ€ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈ възли, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π° всСки ΠΎΡ‚ тях ΠΊΠ°Ρ‚ΠΎ root:
 kubeadm join 192.168.88.30:6443 --token a485vl.xjgvzzr2g0xbtbs4 
   --discovery-token-ca-cert-hash sha256:9da6b05aaa5364a9ec59adcc67b3988b9c1b94c15e81300560220acb1779b050 
   --contrl-plane --certificate-key 72a3c0a14c627d6d7fdade1f4c8d7a41b0fac31b1faf0d8fdf9678d74d7d2403
ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ certificate-key Π΄Π°Π²Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ чувствитСлни Π΄Π°Π½Π½ΠΈ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, ΠΏΠ°Π·Π΅Ρ‚Π΅ Π³ΠΎ Π² Ρ‚Π°ΠΉΠ½Π°!
ΠšΠ°Ρ‚ΠΎ мярка Π·Π° бСзопасност, ΠΊΠ°Ρ‡Π΅Π½ΠΈΡ‚Π΅ сСртификати Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΈ слСд Π΄Π²Π° часа; ΠŸΡ€ΠΈ нСобходимост ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅
"kubeadm init phase upload-certs --upload-certs" Π·Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° сСртификатитС слСд Ρ‚ΠΎΠ²Π°.
Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π±Ρ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ възли, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ слСдното Π½Π° всСки ΠΎΡ‚ тях ΠΊΠ°Ρ‚ΠΎ root:
kubeadm join 192.168.88.30:6443 --token a485vl.xjgvzzr2g0xbtbs4 
   --discovery-token-ca-cert-hash sha256:9da6b05aaa5364a9ec59adcc67b3988b9c1b94c15e81300560220acb1779b050

Π©Π΅ изпълним ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠΈΡ‚Π΅ Π·Π° добавянС Π½Π° конфигурацията Π·Π° потрСбитСля. А ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ допълванС Π·Π° kubectl:

 kubectl completion bash > $HOME/.kube/completion.bash.inc
 printf "
 # Kubectl shell completion
 source '$HOME/.kube/completion.bash.inc'
 " >> $HOME/.bash_profile
 source $HOME/.bash_profile

На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΏΡŠΡ€Π²ΠΈΡ възСл Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° (Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ‚ΠΎΠΉ всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ Π³ΠΎΡ‚ΠΎΠ²):

root@pi-control:~# kubectl get no
Π˜ΠœΠ•         БВАВУБ     Π ΠžΠ›Π˜    Π’ΠͺЗРАБВ   Π’Π•Π Π‘Π˜Π―
pi-control   NotReady   master   29s   v1.18.6

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π°, ΠΊΠ°ΠΊΡ‚ΠΎ бСшС посочСно Π² ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ слСд инсталацията, Ρ‰Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС инсталира ΠΌΡ€Π΅ΠΆΠ° Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°. Π’ докумСнтацията ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ ΠΈΠ·Π±ΠΎΡ€ ΠΎΡ‚ Calico, Cilium, contiv-vpp, Kube-router ΠΈ Weave Net… Π’ΡƒΠΊ сС ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ… ΠΎΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π°Ρ‚Π° инструкция ΠΈ ΠΈΠ·Π±Ρ€Π°Ρ… ΠΏΠΎ-ΠΏΠΎΠ·Π½Π°Ρ‚ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ Π·Π° ΠΌΠ΅Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: flannel Π² Ρ€Π΅ΠΆΠΈΠΌ host-gw (ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Π½Π°Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Π±Π΅ΠΊΠ΅Π½Π΄ΠΈ Π²ΠΈΠΆΡ‚Π΅ Π² докумСнтацията Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°).

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π΅ доста просто. ΠŸΡŠΡ€Π²ΠΎ β€” свалямС манифСститС:

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° промСнямС Π² настройкитС Ρ‚ΠΈΠΏΠ° ΠΎΡ‚ vxlan Π½Π° host-gw:

sed -i 's/vxlan/host-gw/' kube-flannel.yml

… ΠΈ подсСтитС Π½Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅Ρ‚Π΅ β€” ΠΎΡ‚ стойността ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Π°Π·ΠΈ, която Π΅ посочСна ΠΏΡ€ΠΈ инициализацията Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°:

sed -i 's#10.244.0.0/16#10.1.0.0/16#' kube-flannel.yml

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° създавамС рСсурситС:

kubectl create -f kube-flannel.yml

Π“ΠΎΡ‚ΠΎΠ²ΠΎ! Π‘Π»Π΅Π΄ извСстно Π²Ρ€Π΅ΠΌΠ΅ ΠΏΡŠΡ€Π²ΠΈΡΡ‚ възСл K8s Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ Π² статус Π“ΠΎΡ‚ΠΎΠ²ΠΎ:

Π˜ΠœΠ•         БВАВУБ   Π ΠžΠ›Π˜    Π’ΠͺЗРАБВ   Π’Π•Π Π‘Π˜Π―
pi-control   Ready    master   2m    v1.18.6

ДобавянС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅Π½ възСл

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ worker. Π—Π° Ρ†Π΅Π»Ρ‚Π° Π½Π° Π½Π΅Π³ΠΎ β€” слСд инсталиранСто Π½Π° самия Kubernetes ΠΏΠΎ описания ΠΏΠΎ-Π³ΠΎΡ€Π΅ сцСнарий β€” просто трябва Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°:

kubeadm join 192.168.88.30:6443 --token a485vl.xjgvzzr2g0xbtbs4 
    --discovery-token-ca-cert-hash sha256:9da6b05aaa5364a9ec59adcc67b3988b9c1b94c15e81300560220acb1779b050

Π‘ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° считамС, Ρ‡Π΅ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΡŠΡ‚ Π΅ Π³ΠΎΡ‚ΠΎΠ²:

root@pi-control:~# kubectl get no
Π˜ΠœΠ•            БВАВУБ   Π ΠžΠ›Π˜    Π’ΠͺЗРАБВ    Π’Π•Π Π‘Π˜Π―
pi-control      Π“ΠΎΡ‚ΠΎΠ²    майстор   28ΠΌ     v1.18.6
pi-worker       Π“ΠΎΡ‚ΠΎΠ²        2ΠΌ8с   v1.18.6

Π˜ΠΌΠ°Ρ… ΠΏΠΎΠ΄ Ρ€ΡŠΠΊΠ° само Π΄Π²Π° Raspberry Pi, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ ΠΌΠΈ сС искашС Π΄Π° Π΄Π°Π²Π°ΠΌ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ тях само ΠΏΠΎΠ΄ control plane. Π—Π°Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ… Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ инсталирания taint ΠΎΡ‚ ΡƒΠ·Π»Π° pi-control, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ…:

root@pi-control:~# kubectl edit node pi-control

… ΠΈ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ… Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅:

 - effect: NoSchedule
   key: node-role.kubernetes.io/master

Π—Π°ΠΏΡŠΠ»Π²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° с нСобходимия ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ

ΠŸΡŠΡ€Π²ΠΎ, Ρ‰Π΅ Π½ΠΈ Π΅ Π½ΡƒΠΆΠ½Π° Helm. Π Π°Π·Π±ΠΈΡ€Π° сС, всичко ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ, Π½ΠΎ Helm позволява Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ Π±Π΅Π· рСдакция Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ някои ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ ΠΏΠΎ вашС ΠΆΠ΅Π»Π°Π½ΠΈΠ΅. И Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Ρ‚ΠΎΠ²Π° Π΅ просто Π±ΠΈΠ½Π°Ρ€Π΅Π½ Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ β€žΠ½Π΅ иска Ρ…Π»ΡΠ±β€œ.

И Ρ‚Π°ΠΊΠ°, Π²Π»ΠΈΠ·Π°ΠΌΠ΅ Π² helm.sh Π² сСкция docs/installation ΠΈ изпълнявамС ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΎΡ‚Ρ‚Π°ΠΌ:

curl -s https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° добавямС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° Ρ‡Π°Ρ€Ρ‚ΠΎΠ²Π΅:

helm repo add stable https://kubernetes-charts.storage.googleapis.com/

Π‘Π΅Π³Π° Ρ‰Π΅ инсталирамС инфраструктурнитС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с замисъла:

  • Ingress controller;
  • Prometheus;
  • Grafana;
  • cert-manager.

Ingress controller

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ β€” Ingress controller β€” сС инсталира доста лСсно ΠΈ Π΅ Π³ΠΎΡ‚ΠΎΠ² Π·Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° β€žΠΎΡ‚ ΠΊΡƒΡ‚ΠΈΡΡ‚Π°β€œ. Π—Π° Ρ†Π΅Π»Ρ‚Π° Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΄Π° Π²Π»Π΅Π·Π΅Ρ‚Π΅ Π² сСкция bare-metal Π½Π° сайта ΠΈ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π° инсталация ΠΎΡ‚Ρ‚Π°ΠΌ:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.34.1/deploy/static/provider/baremetal/deploy.yaml

ΠžΠ±Π°Ρ‡Π΅ Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€žΠΌΠ°Π»ΠΈΠ½Π°β€œ Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° сС напряга ΠΈ Π΄Π° удря Π² дисковия IOPS. Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π΅ Ρ‚Π°ΠΌ, Ρ‡Π΅ Π·Π°Π΅Π΄Π½ΠΎ с Ingress ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€Π° сС инсталира голямо количСство рСсурси, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ сС ΠΌΠ½ΠΎΠ³ΠΎ запитвания към API ΠΈ, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½ΠΈ сС записват Π² etcd. Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка, ΠΈΠ»ΠΈ ΠΊΠ°Ρ€Ρ‚Π°Ρ‚Π° с ΠΏΠ°ΠΌΠ΅Ρ‚ клас 10 Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½Π°, ΠΈΠ»ΠΈ SD ΠΊΠ°Ρ€Ρ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ½ΠΎ Π½Π΅ стигат Π·Π° Ρ‚Π°ΠΊΠ°Π²Π° натоварСност. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, слСд ΠΎΠΊΠΎΠ»ΠΎ 5 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ всичко сС стартира.

БъздадСн Π΅ namespace ΠΈ Π² Π½Π΅Π³ΠΎ сС появи ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΡŠΡ‚ ΠΈ всичко Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ:

root@pi-control:~# kubectl -n ingress-nginx get pod
NAME                                        READY   STATUS    RESTARTS   AGE
 ingress-nginx-admission-create-2hwdx        0/1     Π—Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΎ   0          31s
 ingress-nginx-admission-patch-cp55c         0/1     Π—Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΎ   0          31s
 ingress-nginx-controller-7fd7d8df56-68qp5   1/1     Π Π°Π±ΠΎΡ‚ΠΈ     0          48s

Prometheus

Π‘Π»Π΅Π΄Π½ΠΈΡ‚Π΅ Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° сС инсталират доста лСсно Ρ‡Ρ€Π΅Π· Helm ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° Ρ‡Π°Ρ€Ρ‚.

НамирамС Prometheus, създавамС namespace ΠΈ Π³ΠΎ инсталирамС Π² Π½Π΅Π³ΠΎ:

helm search repo stable | grep prometheus
kubectl create ns monitoring
helm install prometheus --namespace monitoring stable/prometheus --set server.ingress.enabled=True --set server.ingress.hosts={"prometheus.home.pi"}

По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Prometheus изисква 2 диска: Π·Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ самия Prometheus ΠΈ Π·Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ AlertManager. Въй ΠΊΠ°Ρ‚ΠΎ Π² ΠΊΠ»Π°ΡΡ‚Π΅Ρ€ΡŠΡ‚ Π½Π΅ Π΅ създадСн storage class, дисковСтС няма Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ заявСни ΠΈ pod-ΠΎΠ²Π΅Ρ‚Π΅ няма Π΄Π° стартират. Π—Π° bare metal инсталации Π½Π° Kubernetes ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ceph rbd, Π½ΠΎ Π² случая с Raspberry Pi, Ρ‚ΠΎΠ²Π° Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅.

Π—Π°Ρ‚ΠΎΠ²Π° Ρ‰Π΅ създадСм прост local storage Π½Π° hostpath. ΠœΠ°Π½ΠΈΡ„Π΅ΡΡ‚ΠΈΡ‚Π΅ PV (persistent volume) Π·Π° prometheus-server ΠΈ prometheus-alertmanager са ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈ Π² Ρ„Π°ΠΉΠ»Π° prometheus-pv.yaml Π² Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈΡ‚Π΅ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° статията. ДирСкторията Π·Π° PV трябва Π΄Π° бъдС създадСна ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π° диска Π½Π° ΡƒΠ·Π΅Π»Π°, към ΠΊΠΎΠΉΡ‚ΠΎ искамС Π΄Π° ΠΏΡ€ΠΈΠ²ΡŠΡ€ΠΆΠ΅ΠΌ Prometheus: Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ nodeAffinity ΠΏΠΎ hostname pi-worker ΠΈ Π½Π° Π½Π΅Π³ΠΎ са създадСни Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ /data/localstorage/prometheus-server ΠΈ /data/localstorage/prometheus-alertmanager.

БвалямС (ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°ΠΌΠ΅) манифСста ΠΈ добавямС Π² Kubernetes:

kubectl create -f prometheus-pv.yaml

На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚ сС ΡΠ±Π»ΡŠΡΠΊΠ°Ρ… с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ARM Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π°. Kube-state-metrics, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ сС инсталира Π² Ρ‡Π°Ρ€Ρ‚a Prometheus, ΠΎΡ‚ΠΊΠ°Π·Π° Π΄Π° стартира. Π’ΠΎΠΉ давашС Π³Ρ€Π΅ΡˆΠΊΠ°:

root@pi-control:~# kubectl -n monitoring logs prometheus-kube-state-metrics-c65b87574-l66d8
standard_init_linux.go:207: exec user process caused "exec format error"

Π‘Ρ‚Π°Π²Π° Π²ΡŠΠΏΡ€ΠΎΡ Π·Π° Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ Π·Π° kube-state-metrics сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠ±Ρ€Π°Π· ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° CoreOS, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π·Π° ARM:

kubectl -n monitoring get deployments.apps prometheus-kube-state-metrics -o=jsonpath={.spec.template.spec.containers[].image}
quay.io/coreos/kube-state-metrics:v1.9.7

Π’Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° ΠΏΠΎΡ‚ΡŠΡ€ΡΡ ΠΌΠ°Π»ΠΊΠΎ ΠΈ Π΄Π° намСря, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Ρ€Π°Π·. Π—Π° Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅, Ρ‰Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Ρ€Π΅Π»ΠΈΠ·Π°, ΡƒΠΊΠ°Π·Π²Π°ΠΉΠΊΠΈ ΠΊΠΎΠΉ ΠΎΠ±Ρ€Π°Π· Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° kube-state-metrics:

helm upgrade prometheus --namespace monitoring stable/prometheus --set server.ingress.enabled=True --set server.ingress.hosts={"prometheus.home.pi"} --set kube-state-metrics.image.repository=carlosedp/kube-state-metrics --set kube-state-metrics.image.tag=v1.9.6

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ всичко Π΅ стартирало:

root@pi-control:~# kubectl -n monitoring get po
NAME                                             READY   STATUS              RESTARTS   AGE
prometheus-alertmanager-df65d99d4-6d27g          2/2     Running             0          5m56s
prometheus-kube-state-metrics-5dc5fd89c6-ztmqr   1/1     Running             0          5m56s
prometheus-node-exporter-49zll                   1/1     Running             0          5m51s
prometheus-node-exporter-vwl44                   1/1     Running             0          4m20s
prometheus-pushgateway-c547cfc87-k28qx           1/1     Running             0          5m56s
prometheus-server-85666fd794-z9qnc               2/2     Running             0          4m52s

Grafana ΠΈ cert-manager

Π—Π° Π³Ρ€Π°Ρ„ΠΈΡ†ΠΈΡ‚Π΅ ΠΈ dashboard-ΠΎΠ²Π΅Ρ‚Π΅ инсталирамС Grafana:

helm install grafana --namespace monitoring stable/grafana --set ingress.enabled=true --set ingress.hosts={"grafana.home.pi"}

Накрая Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° Ρ‰Π΅ Π½ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ°Ρ‚ ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ:

kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

Π—Π° Π΄Π° ΠΏΠΎΡ€ΡŠΡ‡Π°ΠΌΠ΅ сСртификати, Ρ‰Π΅ инсталирамС cert-manager. Π—Π° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° инсталация Ρ‰Π΅ сС ΠΎΠ±ΡŠΡ€Π½Π΅ΠΌ към докумСнтацията, която ΠΏΡ€Π΅Π΄Π»Π°Π³Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° Helm:

helm repo add jetstack https://charts.jetstack.io

helm install 
  cert-manager jetstack/cert-manager 
  --namespace cert-manager 
  --version v0.16.0 
  --set installCRDs=true

Π—Π° само-подписанитС сСртификати Π·Π° домашна ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Ρ‚ΠΎΠ²Π° Π΅ напълно Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ. Ако ΠΎΠ±Π°Ρ‡Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΡŠΡ‰ΠΈΡ Let’s Encrypt, трябва Π΄Π° настроим ΠΈ cluster issuer. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Π·Π° Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² Π½Π°ΡˆΠ°Ρ‚Π° статия β€žSSL сСртификати ΠΎΡ‚ Let’s Encrypt с cert-manager Π² KubernetesΒ».

Аз самият ΠΈΠ·Π±Ρ€Π°Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² докумСнтацията, Ρ€Π΅ΡˆΠ°Π²Π°ΠΉΠΊΠΈ, Ρ‡Π΅ staging Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π½Π° LE Ρ‰Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½. ΠŸΡ€ΠΎΠΌΠ΅Π½ΡΠΌΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠΌΠ΅ΠΉΠ»Π°, Π·Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅ Π² Ρ„Π°ΠΉΠ» ΠΈ Π³ΠΎ добавямС Π² кластСра (cert-manager-cluster-issuer.yaml):

kubectl create -f cert-manager-cluster-issuer.yaml

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΡ€ΡŠΡ‡Π°ΠΌΠ΅ сСртификат, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° Grafana. Π—Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π½ΠΈ Π΅ Π½ΡƒΠΆΠ΅Π½ Π΄ΠΎΠΌΠ΅ΠΉΠ½ ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ кластСра ΠΎΡ‚ вън. Имам Π΄ΠΎΠΌΠ΅ΠΉΠ½, Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΡŠΡ‚ съм настроил с прСнасочванС Π½Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅ 80 ΠΈ 443 Π½Π° домашния Ρ€ΡƒΡ‚Π΅Ρ€ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с създадСния сСрвис Π½Π° ingress-controller’a:

kubectl -n ingress-nginx get svc
NAME                                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.2.206.61            80:31303/TCP,443:30498/TCP   23d

80-Ρ‚ΠΈ ΠΏΠΎΡ€Ρ‚ сС ΠΏΡ€Π΅Π΄Π°Π²Π° Π² 31303, Π° 443 β€” Π² 30498. (ΠŸΠΎΡ€Ρ‚ΠΎΠ²Π΅Ρ‚Π΅ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ случайно, слСдоватСлно Π²Π°ΡˆΠΈΡ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ.)

Π•Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° сСртификат (cert-manager-grafana-certificate.yaml):

apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
  name: grafana
  namespace: monitoring
spec:
  dnsNames:
    - grafana.home.pi
  secretName: grafana-tls
  issuerRef:
    kind: ClusterIssuer
    name: letsencrypt-staging

ДобавямС Π³ΠΎ Π² кластСра:

kubectl create -f cert-manager-grafana-certificate.yaml

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ сС появи рСсурс Ingress, Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ валидацията ΠΎΡ‚ Let’s Encrypt:

root@pi-control:~# kubectl -n monitoring get ing
NAME                        CLASS    HOSTS                        ADDRESS         PORTS   AGE
cm-acme-http-solver-rkf8l      grafana.home.pi      192.168.88.31   80      72s
grafana                        grafana.home.pi      192.168.88.31   80      6d17h
prometheus-server              prometheus.home.pi   192.168.88.31   80      8d

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ валидацията ΠΌΠΈΠ½Π΅, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Π΅ Ρ€Π΅ΡΡƒΡ€ΡΡŠΡ‚ certificate Π΅ Π³ΠΎΡ‚ΠΎΠ², Π° Π² указанния ΠΏΠΎ-Π³ΠΎΡ€Π΅ сСкрСт grafana-tls Π΅ ΡΠ΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΡŠΡ‚ ΠΈ ΠΊΠ»ΡŽΡ‡ΡŠΡ‚. МоТСм Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, ΠΊΠΎΠΉ Π΅ ΠΈΠ·Π΄Π°Π» сСртификата:

root@pi-control:~# kubectl -n monitoring get certificate
NAME      READY   SECRET        AGE
grafana   True    grafana-tls   13m

root@pi-control:~# kubectl -n monitoring get secrets grafana-tls -ojsonpath="{.data['tls.crt']}" | base64 -d | openssl x509 -issuer -noout
issuer=CN = Fake LE Intermediate X1

НСка сС Π²ΡŠΡ€Π½Π΅ΠΌ към Grafana. Π©Π΅ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈ Π² нСйния Helm Ρ€Π΅Π»ΠΈΠ·, промСняйки настройкитС Π·Π° TLS Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ със създадСния сСртификат.

Π—Π° Ρ‚ΠΎΠ²Π° изтСглямС Ρ‡Π°Ρ€Ρ‚Π°, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΈ обновявамС ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° дирСктория:

helm pull --untar stable/grafana

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°ΠΌΠ΅ Π² Ρ„Π°ΠΉΠ»Π° grafana/values.yaml настройкитС Π·Π° TLS:

  tls:
    - secretName: grafana-tls
      hosts:
        - grafana.home.pi

Π’ΡƒΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° настроим инсталирания Prometheus ΠΊΠ°Ρ‚ΠΎ datasource:

datasources:
  datasources.yaml:
    apiVersion: 1
    datasources:
    - name: Prometheus
      type: prometheus
      url: http://prometheus-server:80
      access: proxy
      isDefault: true

Π‘Π΅Π³Π° ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° дирСктория обновявамС Ρ‡Π°Ρ€Ρ‚ Grafana:

helm upgrade grafana --namespace monitoring ./grafana --set ingress.enabled=true --set ingress.hosts={"grafana.home.pi"}

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π°ΠΌΠ΅, Ρ‡Π΅ Π² Ingress grafana Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ 443 ΠΏΠΎΡ€Ρ‚ ΠΈ ΠΈΠΌΠ° Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΏΠΎ HTTPS:

root@pi-control:~# kubectl -n monitoring get ing grafana
NAME CLASS HOSTS ADDRESS PORTS AGE
grafana  grafana.home.pi 192.168.88.31 80, 443 63m

root@pi-control:~# curl -kI https://grafana.home.pi
HTTP/2 302
server: nginx/1.19.1
date: Tue, 28 Jul 2020 19:01:31 GMT
content-type: text/html; charset=utf-8
cache-control: no-cache
expires: -1
location: /login
pragma: no-cache
set-cookie: redirect_to=; Path=/; HttpOnly; SameSite=Lax
x-frame-options: deny
strict-transport-security: max-age=15724800; includeSubDomains

Π—Π° дСмонстрация Π½Π° Grafana Π² дСйствиС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ dashboard Π·Π° kube-state-metrics. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°:

ΠŸΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ Kubernetes ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π° Π½Π° Raspberry Pi

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ dashboard Π·Π° node exporter: Ρ‚ΠΎΠΉ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ сС случва с "ΠΌΠ°Π»ΠΈΠ½Π°" (Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° CPU, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, ΠΌΡ€Π΅ΠΆΠ°, диск ΠΈ Ρ‚.Π½.).

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° считам, Ρ‡Π΅ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π΅ Π³ΠΎΡ‚ΠΎΠ² Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΈ стартира прилоТСния!

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ° относно сборката

Π—Π° сборка Π½Π° прилоТСния Π·Π° ARM Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈΠΌΠ° ΠΏΠΎΠ½Π΅ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°. ΠŸΡŠΡ€Π²ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сглобяватС Π½Π° ARM устройство. ΠžΠ±Π°Ρ‡Π΅, Π²ΠΈΠΆΠ΄Π°ΠΉΠΊΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° натоварСност Π½Π° Π΄Π²Π°Ρ‚Π° Raspberry Pi, ΠΎΡΡŠΠ·Π½Π°Ρ…, Ρ‡Π΅ Π΄ΠΎΡ€ΠΈ ΠΈ Π·Π° сборката Ρ‚Π΅ Π½Π΅ са Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ силни. Π—Π°Ρ‚ΠΎΠ²Π° ΠΏΠΎΡ€ΡŠΡ‡Π°Ρ… Π½ΠΎΠ² Raspberry Pi 4 (Ρ‚ΠΎΠ·ΠΈ Π΅ ΠΏΠΎ-ΠΌΠΎΡ‰Π΅Π½ ΠΈ ΠΈΠΌΠ° Ρ†Π΅Π»ΠΈ 4 GB ΠΏΠ°ΠΌΠ΅Ρ‚) β€” ΠΏΠ»Π°Π½ΠΈΡ€Π°ΠΌ Π΄Π° сглобявам Π½Π° Π½Π΅Π³ΠΎ.

Вторият Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΅ - сборка Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠ°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅Π½ Docker ΠΎΠ±Ρ€Π°Π· Π½Π° ΠΏΠΎ-ΠΌΠΎΡ‰Π½Π° машина. Π—Π° Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ docker buildx. Ако ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ Π΅Π·ΠΈΠΊ, Ρ‰Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° крос-компилация Π·Π° ARM. Няма Π΄Π° описвам всички настройки Π·Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ изисква ΠΎΡ‚Π΄Π΅Π»Π½Π° статия. ΠŸΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС постигнат "унивСрсални" ΠΎΠ±Ρ€Π°Π·ΠΈ: Docker, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ Π½Π° ARM машина, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Ρ‰Π΅ изтСгля ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ ΠΎΠ±Ρ€Π°Π· Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π°.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈ СкспСримСнти Π½Π°Π΄ΠΌΠΈΠ½Π°Ρ…Π° всички ΠΌΠΎΠΈ очаквания: [Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎ] "Π²Π°Π½ΠΈΠ»ΠΎΠ²" Kubernetes с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°Ρ‚Π° Π±Π°Π·Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ доста Π΄ΠΎΠ±Ρ€Π΅ Π½Π° ARM, Π° само ΠΏΡ€ΠΈ конфигурацията ΠΌΡƒ Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ…Π° някои нюанси.

Π‘Π°ΠΌΠΈ Raspberry Pi 3B+ ΠΈΠ·Π΄ΡŠΡ€ΠΆΠ°Ρ‚ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° CPU, Π½ΠΎ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ SD ΠΊΠ°Ρ€Ρ‚ΠΈ са ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ тСсСн Π±ΡƒΡ‚ΠΈΠ»Π΅Π½ Π³ΡŠΡ€Π»ΠΎ. КолСги спомСнаха, Ρ‡Π΅ Π² някои вСрсии ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ ΠΎΡ‚ USB, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅ SSD: Ρ‚ΠΎΠ³Π°Π²Π° ситуацията вСроятно Ρ‰Π΅ сС ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ.

Π•Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° CPU ΠΏΡ€ΠΈ инсталиранС Π½Π° Grafana:

ΠŸΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ Kubernetes ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π° Π½Π° Raspberry Pi

Π—Π° СкспСримСнти ΠΈ "Π·Π° ΠΏΡ€ΠΎΠ±Π°", спорСд ΠΌΠ΅Π½, Kubernetes кластСр Π½Π° "ΠΌΠ°Π»ΠΈΠ½ΠΈ" ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ ΠΏΡ€Π΅Π΄Π°Π²Π° усСщанията ΠΎΡ‚ Сксплоатацията, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΡΡŠΡ‰ΠΈΡΡ‚ Minikube, Π·Π°Ρ‰ΠΎΡ‚ΠΎ всички ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π½Π° кластСра са ΠΊΠ°ΠΊΡ‚ΠΎ инсталирани, Ρ‚Π°ΠΊΠ° ΠΈ работят "ΠΏΠΎ-Π²ΡŠΠ·Ρ€Π°ΡΡ‚Π΅Π½".

Π’ пСрспСктива ΠΈΠΌΠ°ΠΌ идСя Π΄Π° добавя към кластСра цСлия Ρ†ΠΈΠΊΡŠΠ» CI/CD, Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ изцяло Π½Π° Raspberry Pi. Π©Π΅ бъда щастлив, Π°ΠΊΠΎ някой сподСли своя ΠΎΠΏΠΈΡ‚ ΠΏΠΎ настройка Π½Π° K8s Π½Π° AWS Graviton-ΠΈ.

P.S. Π”Π°, "продукцията" ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΏΠΎ-Π±Π»ΠΈΠ·ΠΎ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ си мислСх:

ΠŸΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ Kubernetes ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π° Π½Π° Raspberry Pi

P.P.S.

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π² нашия Π±Π»ΠΎΠ³:

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

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