ΠΠ°ΡˆΠΈΡΡ‚ ΠΎΠΏΠΈΡ‚ с Π΄Π°Π½Π½ΠΈ Π² etcd Kubernetes ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ (Π±Π΅Π· K8s API)

ВсС ΠΏΠΎ-чСсто ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ сС ΠΎΠ±Ρ€ΡŠΡ‰Π°Ρ‚ към нас с исканС Π΄Π° осигурим Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Kubernetes ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, Π·Π° Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚ със сСрвиситС Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°: Π·Π° Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ°Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ сСрвис, Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с прилоТСнията Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°β€¦

ΠΠ°ΡˆΠΈΡΡ‚ ΠΎΠΏΠΈΡ‚ с Π΄Π°Π½Π½ΠΈ Π² etcd Kubernetes ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ (Π±Π΅Π· K8s API)

НапримСр, възниква нСобходимост Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅Ρˆ ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° си машина със сСрвиса memcached.staging.svc.cluster.local. НиС прСдоставямС Ρ‚Π°ΠΊΠ°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Ρ‡Ρ€Π΅Π· VPN Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, към ΠΊΠΎΠΉΡ‚ΠΎ сС ΡΠ²ΡŠΡ€Π·Π²Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚. Π—Π° Ρ†Π΅Π»Ρ‚Π° анонсирамС подсСтитС Π½Π° pod'ΠΎΠ²Π΅Ρ‚Π΅, сСрвиситС ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π°ΠΌΠ΅ кластСрнитС DNS Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’Π°ΠΊΠ°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅ със сСрвиса memcached.staging.svc.cluster.local, заявката ΠΎΡ‚ΠΈΠ²Π° Π² DNS Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° ΠΈ Π² ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° адрСса Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ сСрвис ΠΎΡ‚ сСрвисната ΠΌΡ€Π΅ΠΆΠ° Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° ΠΈΠ»ΠΈ адрСса Π½Π° pod'Π°.

K8s ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° kubeadm, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ сСрвисната подсСт Π΅ 192.168.0.0/16, Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π½Π° pod'ΠΎΠ²Π΅Ρ‚Π΅ Π΅ 10.244.0.0/16. ОбикновСно всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΠ±Ρ€Π΅, Π½ΠΎ ΠΈΠΌΠ° няколко ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°:

  • ΠŸΠΎΠ΄ΡΠ΅Ρ‚ΠΈΡ‚Π΅ 192.168.*.* чСсто сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² офиснитС ΠΌΡ€Π΅ΠΆΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅, Π° ΠΎΡ‰Π΅ ΠΏΠΎ-чСсто β€” Π² Π΄ΠΎΠΌΠ°ΡˆΠ½ΠΈΡ‚Π΅ ΠΌΡ€Π΅ΠΆΠΈ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅. И Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ: Π΄ΠΎΠΌΠ°ΡˆΠ½ΠΈΡ‚Π΅ Ρ€ΡƒΡ‚Π΅Ρ€ΠΈ работят Π² Ρ‚Π°Π·ΠΈ подсСт ΠΈ VPN ΠΏΡ€Π΅Π΄Π°Π²Π° Ρ‚Π΅Π·ΠΈ подсСти ΠΎΡ‚ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.
  • ИмамС няколко ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° (ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²ΠΈ, Π΅Ρ‚Π°ΠΏΠ½ΠΈ ΠΈ/ΠΈΠ»ΠΈ няколко dev ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°). Π’ΠΎΠ³Π°Π²Π° във всички тях ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ‰Π΅ ΠΈΠΌΠ° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ подсСти Π·Π° pod'ΠΎΠ²Π΅ ΠΈ ΡΡŠΡ€Π²ΠΈΡΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ създава Π³ΠΎΠ»Π΅ΠΌΠΈ трудности ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° със ΡΡŠΡ€Π²ΠΈΡΠΈ Π² няколко ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Π’Π΅Ρ‡Π΅ ΠΎΡ‚ доста Π²Ρ€Π΅ΠΌΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ подсСти Π·Π° сСрвиситС ΠΈ pod'ΠΎΠ²Π΅Ρ‚Π΅ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ β€” ΠΎΠ±Ρ‰ΠΎ Π²Π·Π΅Ρ‚ΠΎ, Π·Π° Π΄Π° са всички ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΡ€Π΅ΠΆΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΈΠΌΠ° голям Π±Ρ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ искамС Π΄Π° прСинсталирамС ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π² тях Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡŠΡ€Π²ΠΈΡΠΈ, stateful прилоТСния ΠΈ Ρ‚.Π½.

И Ρ‚ΠΎΠ³Π°Π²Π° си Π·Π°Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ Π²ΡŠΠΏΡ€ΠΎΡΠ°: ΠΊΠ°ΠΊ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ подсСта Π² ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€?

Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Най-разпространСната ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π΅ Π΄Π° сС ΠΏΡ€Π΅ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ всичко ΡΡŠΡ€Π²ΠΈΡΠΈ с Ρ‚ΠΈΠΏ ClusterIP. ΠšΠ°Ρ‚ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π°Ρ‚ ΠΈ Ρ‚Π°ΠΊΠΎΠ²Π°:

БлСдният процСс ΠΈΠΌΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ: слСд ΠΊΠ°Ρ‚ΠΎ всичко Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΎ, pod'ΠΎΠ²Π΅Ρ‚Π΅ ΠΈΠ΄Π²Π°Ρ‚ с стария IP ΠΊΠ°Ρ‚ΠΎ DNS nameserver Π² /etc/resolv.conf.
Въй ΠΊΠ°Ρ‚ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° Π½ΡƒΠ»ΠΈΡ€Π°ΠΌ цСлия ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ с kubeadm reset ΠΈ Π΄Π° Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌ ΠΎΡ‚Π½ΠΎΠ²ΠΎ.

Но Π½Π΅ Π½Π° всички Ρ‚ΠΎΠ²Π° ΠΈΠΌ подхоТда… Π•Ρ‚ΠΎ ΠΈ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π° информация Π·Π° нашия случай:

  • Използва сС Flannel;
  • Има ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ Π² ΠΎΠ±Π»Π°ΠΊΠ°, Ρ‚Π°ΠΊΠ° ΠΈ Π½Π° физичСски ΡΡŠΡ€Π²ΡŠΡ€ΠΈ;
  • ИскашС ΠΌΠΈ сС Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π° повторния Π΄Π΅ΠΏΠ»ΠΎΠΉ Π½Π° всички услуги Π² кластСра;
  • Има Π½ΡƒΠΆΠ΄Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ всичко с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ количСство ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ;
  • ВСрсията Π½Π° Kubernetes Π΅ 1.16.6 (Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, слСдващитС дСйствия Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΈ ΠΈ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ вСрсии);
  • ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° Π΅ Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΠΌ сСрвисната ΠΏΠΎΠ΄ΡΠ΅Ρ‚ΡŒ Π² кластСра, Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° kubeadm 192.168.0.0/16, с 172.24.0.0/16.

И Ρ‚Π°ΠΊΠ° сС случи, Ρ‡Π΅ ΠΎΡ‚Π΄Π°Π²Π½Π° Π½ΠΈ бСшС интСрСсно Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π΄Π°Π½Π½ΠΈ Π² Kubernetes Π² etcd ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ с това… ΠŸΠΎΠΌΠΈΡΠ»ΠΈΡ…ΠΌΠ΅ си: Β«Π—Π°Ρ‰ΠΎ просто Π΄Π° Π½Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² etcd, замСняйки старитС IP адрСси (ΠΏΠΎΠ΄ΡΠ΅Ρ‚ΡŒ) с Π½ΠΎΠ²ΠΈ??Β»

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΡŠΡ€ΡΠΈΡ…ΠΌΠ΅ Π³ΠΎΡ‚ΠΎΠ²ΠΈ инструмСнти Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½ΠΈ Π² etcd, Π½Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ…ΠΌΠ΅ Π½ΠΈΡ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ напълно Π΄Π° Ρ€Π΅ΡˆΠ°Π²Π° поставСната Π·Π°Π΄Π°Ρ‡Π°. (ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Π°ΠΊΠΎ Π·Π½Π°Π΅Ρ‚Π΅ Π·Π° някакви ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² etcd – Ρ‰Π΅ смС Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΈ Π·Π° Π»ΠΈΠ½ΠΊΠΎΠ²Π΅.) Но Π΄ΠΎΠ±Ρ€Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° бСшС etcdhelper ΠΎΡ‚ OpenShift (Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΠΌ Π½Π° Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ Π°Π²Ρ‚ΠΎΡ€ΠΈ!).

Π’Π°Π·ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΠ²ΡŠΡ€Π·Π²Π° с etcd Ρ‡Ρ€Π΅Π· сСртификати ΠΈ Π΄Π° Ρ‡Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚Ρ‚Π°ΠΌ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ ls, get, dump.

ДобавямС etcdhelper

Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° мисъл Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½Π°: «Какво ΠΏΡ€Π΅Ρ‡ΠΈ Π΄Π° допишСм Ρ‚Π°Π·ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°, добавяйки Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° запис Π½Π° Π΄Π°Π½Π½ΠΈ Π² etcd?Β»

Π’ΠΎΠ²Π° сС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° Π² ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π° вСрсия Π½Π° etcdhelper с Π΄Π²Π΅ Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ changeServiceCIDR ΠΈ changePodCIDR. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° нСя ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΠΈΠ΄ΠΈ Какво правят Π½ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ? ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΡŠΡ‚ Ρ‚ΡƒΠΊ.

създава дСсСриализатор; changeServiceCIDR:

  • ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° рСгулярна ΠΈΠ·Ρ€Π°Π· Π·Π° замяна Π½Π° CIDR;
  • ΠΎΠ±Ρ…ΠΎΠΆΠ΄Π° всички услуги с Ρ‚ΠΈΠΏ ClusterIP Π² кластСра:
  • Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π° стойността ΠΎΡ‚ etcd Π² Go-ΠΎΠ±Π΅ΠΊΡ‚;
    • с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° рСгулярния ΠΈΠ·Ρ€Π°Π· замСня ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° Π½Π° адрСса;
    • присвоява Π½Π° услугата IP адрСс ΠΎΡ‚ Π½ΠΎΠ²Π°Ρ‚Π° ΠΏΠΎΠ΄ΡΠ΅Ρ‚ΡŒ;
    • създава сСриализатор, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° Go-ΠΎΠ±Π΅ΠΊΡ‚Π° Π² protobuf, записва Π½ΠΎΠ²ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Π² etcd.
    • ΠΏΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ

Ѐункция changePodCIDR β€” само вмСсто Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° спСцификациитС Π½Π° услугитС, ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π° Π·Π° възСла ΠΈ промСнямС changeServiceCIDR .spec.PodCIDR Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° ΠΏΠΎΠ΄ΡΠ΅Ρ‚ΡŒ. Бмяна Π½Π° serviceCIDR

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

ΠŸΠ»Π°Π½ΡŠΡ‚ Π·Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° поставСната Π·Π°Π΄Π°Ρ‡Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ прост, Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π° Π΄Π°ΡƒΠ½Ρ‚Π°ΠΉΠΌ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΏΡ€Π΅ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° всички podΠΎΠ²Π΅ Π² кластСра. Π‘Π»Π΅Π΄ описаниС Π½Π° основнитС ΡΡ‚ΡŠΠΏΠΊΠΈ, Ρ‰Π΅ сподСлим ΠΈ мисли ΠΊΠ°ΠΊ Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π° Ρ‚ΠΎΠ·ΠΈ просто.

ΠŸΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈΡ‚Π΅Π»Π½ΠΈ дСйствия:

инсталиранС Π½Π° нСобходимия софтуСр ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° пропатчСния etcdhelper;

  • бСкъп Π½Π° etcd ΠΈ
  • ΠšΡ€Π°Ρ‚ΡŠΠΊ ΠΏΠ»Π°Π½ Π·Π° дСйствия ΠΏΠΎ смяна Π½Π° serviceCIDR: /etc/kubernetes.

ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π° манифСститС Π½Π° apiserver-a ΠΈ controller-manager-a;

  • ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ манифСстов apiserver’а ΠΈ controller-manager’а;
  • ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ сСртификати;
  • промяна Π½Π° ClusterIP услуги Π² etcd;
  • рСстартиранС Π½Π° всички pod-ΠΎΠ²Π΅ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°.

По-Π΄ΠΎΠ»Ρƒ Π΅ прСдставСна ΠΏΡŠΠ»Π½Π°Ρ‚Π° послСдоватСлност ΠΎΡ‚ дСйствия Π² Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ.

1. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΌΠ΅ etcd-client Π·Π° Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ:

apt install etcd-client

2. БъздавамС etcdhelper:

  • Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΌΠ΅ golang:
    GOPATH=\/root\/golang
    mkdir -p $GOPATH\/local
    curl -sSL https:\/\/dl.google.com\/go\/go1.14.1.linux-amd64.tar.gz | tar -xzvC $GOPATH\/local
    echo "export GOPATH="$GOPATH"" >> ~\/\.bashrc
    echo 'export GOROOT="$GOPATH\/local\/go"' >> ~\/\.bashrc
    echo 'export PATH="$PATH:$GOPATH\/local\/go\/bin"' >> ~\/\.bashrc
  • Π—Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅ си etcdhelper.go, изтСглямС зависимости, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΠΌΠ΅:
    wget https:\/\/raw.githubusercontent.com\/flant\/examples\/master\/2020\/04-etcdhelper\/etcdhelper.go
    go get go.etcd.io\/etcd\/clientv3 k8s.io\/kubectl\/pkg\/scheme k8s.io\/apimachinery\/pkg\/runtime
    go build -o etcdhelper etcdhelper.go

3. ΠŸΡ€Π°Π²ΠΈΠΌ Π°Ρ€Ρ…ΠΈΠ² Π½Π° etcd:

backup_dir=\/root\/backup
mkdir ${backup_dir}
cp -rL \/etc\/kubernetes ${backup_dir}
ETCDCTL_API=3 etcdctl --cacert=\/etc\/kubernetes\/pki\/etcd\/ca.crt --key=\/etc\/kubernetes\/pki\/etcd\/server.key --cert=\/etc\/kubernetes\/pki\/etcd\/server.crt --endpoints https:\/\/192.168.199.100:2379 snapshot save ${backup_dir}\/etcd.snapshot

4. ΠŸΡ€ΠΎΠΌΠ΅Π½ΡΠΌΠ΅ ΠΌΡ€Π΅ΠΆΠΎΠ²Π°Ρ‚Π° подсСтка Π² манифСститС Π½Π° Kubernetes control plane. Π’ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ /etc/kubernetes/manifests/kube-apiserver.yaml ΠΈ /etc/kubernetes/manifests/kube-controller-manager.yaml промСнямС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° --service-cluster-ip-range Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° подсСтка: 172.24.0.0/16 вмСсто 192.168.0.0/16.

5. Въй ΠΊΠ°Ρ‚ΠΎ промСнямС ΠΌΡ€Π΅ΠΆΠΎΠ²Π°Ρ‚Π° подсСтка, Π·Π° която kubeadm ΠΈΠ·Π΄Π°Π²Π° сСртификати Π·Π° apiserver-Π° (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° Π³ΠΈ ΠΏΡ€Π΅ΠΈΠ·Π΄Π°Π΄Π΅ΠΌ:

  1. НСка Π²ΠΈΠ΄ΠΈΠΌ Π·Π° ΠΊΠΎΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ ΠΈ IP адрСси Π΅ ΠΈΠ·Π΄Π°Π΄Π΅Π½ тСкущият сСртификат:
    openssl x509 -noout -ext subjectAltName <\/etc\/kubernetes\/pki\/apiserver.crt
    X509v3 Subject Alternative Name:
        DNS:dev-1-master, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:apiserver, IP Address:192.168.0.1, IP Address:10.0.0.163, IP Address:192.168.199.100
  2. ΠŸΠΎΠ΄Π³ΠΎΡ‚Π²ΡΠΌΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ ΠΊΠΎΠ½Ρ„ΠΈΠ³ Π·Π° kubeadm:
    cat kubeadm-config.yaml
    apiVersion: kubeadm.k8s.io\/v1beta1
    kind: ClusterConfiguration
    networking:
      podSubnet: "10.244.0.0\/16"
      serviceSubnet: "172.24.0.0\/16"
    apiServer:
      certSANs:
      - "192.168.199.100" # IP адрСс Π½Π° майсторския възСл
  3. Π˜Π·Ρ‚Ρ€ΠΈΠ²Π°ΠΌΠ΅ старитС crt ΠΈ key, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π±Π΅Π· Ρ‚ΠΎΠ²Π° новият сСртификат няма Π΄Π° бъдС ΠΈΠ·Π΄Π°Π΄Π΅Π½:
    rm \/etc\/kubernetes\/pki\/apiserver.{key,crt}
  4. ΠŸΡ€Π΅ΠΈΠ·Π΄Π°Π²Π°ΠΌΠ΅ сСртификатитС Π·Π° API ΡΡŠΡ€Π²ΡŠΡ€Π°:
    kubeadm init phase certs apiserver --config=kubeadm-config.yaml
  5. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π°ΠΌΠ΅, Ρ‡Π΅ ΡΠ΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΡŠΡ‚ Π΅ ΠΈΠ·Π΄Π°Π΄Π΅Π½ Π·Π° Π½ΠΎΠ²Π°Ρ‚Π° подсСтка:
    openssl x509 -noout -ext subjectAltName <\/etc\/kubernetes\/pki\/apiserver.crt
    X509v3 Subject Alternative Name:
        DNS:kube-2-master, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP Address:172.24.0.1, IP Address:10.0.0.163, IP Address:192.168.199.100
  6. Π‘Π»Π΅Π΄ ΠΏΡ€Π΅ΠΈΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° сСртификата Π½Π° API ΡΡŠΡ€Π²ΡŠΡ€Π°, рСстартирамС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΌΡƒ:
    docker ps | grep k8s_kube-apiserver | awk '{print $1}' | xargs docker restart
  7. ΠŸΡ€Π΅ΠΎΠ³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΠΌΠ΅ конфигурацията Π·Π° admin.conf:
    kubeadm alpha certs renew admin.conf
  8. Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² etcd:
    .\/etcdhelper -cacert \/etc\/kubernetes\/pki\/etcd\/ca.crt -cert \/etc\/kubernetes\/pki\/etcd\/server.crt -key \/etc\/kubernetes\/pki\/etcd\/server.key -endpoint https:\/\/127.0.0.1:2379 change-service-cidr 172.24.0.0\/16 

    Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π’ Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° спира Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Ρ€Π΅Π·ΠΎΠ»Π²ΠΈΠ½Π³ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π² Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ pod’овС Π΅ /etc/resolv.conf записан старият адрСс CoreDNS (kube-dns), Π° kube-proxy Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ» ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π½Π° iptables ΠΎΡ‚ старата подсСт Π½Π° Π½ΠΎΠ²Π°Ρ‚Π°. По-Π΄ΠΎΠ»Ρƒ Π² статията са описани Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΈΡ‚Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° прСстоя.

  9. Π©Π΅ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ ConfigMap-ΠΈΡ‚Π΅ Π² пространството Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° kube-system:
    kubectl -n kube-system edit cm kubelet-config-1.16

    β€” Ρ‚ΡƒΠΊ Ρ‰Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ clusterDNS с новия IP адрСс Π½Π° услугата kube-dns: kubectl -n kube-system get svc kube-dns.

    kubectl -n kube-system edit cm kubeadm-config

    β€” Ρ‰Π΅ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ data.ClusterConfiguration.networking.serviceSubnet Бмяна Π½Π° serviceCIDR

  10. Въй ΠΊΠ°Ρ‚ΠΎ Π°Π΄Ρ€Π΅ΡΡŠΡ‚ Π½Π° kube-dns сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ», Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° конфигурацията Π½Π° kubelet Π½Π° всички възли:
    kubeadm upgrade node phase kubelet-config && systemctl restart kubelet
  11. ΠžΡΡ‚Π°Π½Π° Π΄Π° рСстартирамС всички pod’овС Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°:
    kubectl get pods --no-headers=true --all-namespaces |sed -r 's\/(S+)s+(S+).*\/kubectl --namespace 1 delete pod 2\/e'

ΠœΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° прСстоя

Размисли, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π°εœη•™:

  1. Π‘Π»Π΅Π΄ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π° манифСститС Π½Π° control plane, ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Π° услуга kube-dns, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΈΠΌΠ΅Ρ‚ΠΎ kube-dns-tmp ΠΈ Π½ΠΎΠ² адрСс 172.24.0.10.
  2. НаправСтС if Π² etcdhelper, ΠΊΠΎΠΉΡ‚ΠΎ няма Π΄Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π° услугата kube-dns.
  3. Π—Π°ΠΌΠ΅Π½Π΅Ρ‚Π΅ адрСса Π½Π° всички kubelet-Ρ‹ ClusterDNS с новия, ΠΏΡ€ΠΈ ΠΊΠΎΠ΅Ρ‚ΠΎ старата услуга Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ с Π½ΠΎΠ²Π°Ρ‚Π°.
  4. Π˜Π·Ρ‡Π°ΠΊΠ°ΠΉΡ‚Π΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ pod’овСтС с прилоТСнията сС прСзарСдят, ΠΈΠ»ΠΈ сами ΠΏΠΎ СстСствСни ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ, ΠΈΠ»ΠΈ Π² ΡƒΠ³ΠΎΠ²ΠΎΡ€Π΅Π½ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅.
  5. ΠŸΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ услугата kube-dns-tmp ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ serviceSubnetCIDR Π·Π° услугата kube-dns.

Π’ΠΎΠ·ΠΈ ΠΏΠ»Π°Π½ Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° сС ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π°εœη•™ Π΄ΠΎ ~ΠΌΠΈΠ½ΡƒΡ‚ΠΈ β€” Π·Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° услугата kube-dns-tmp ΠΈ замяна Π½Π° подсСтитС Π·Π° услугата kube-dns.

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ Π½Π° podNetwork

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅ podNetwork с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎΡ‚ΠΎ etcdhelper. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° дСйствията Π΅ слСдната:

  • ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π² kube-system;
  • ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ манифСста kube-controller-manager’а;
  • промСнямС podCIDR Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² etcd;
  • рСстартирамС всички възли Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°.

Π‘Π΅Π³Π° ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π·Π° Ρ‚Π΅Π·ΠΈ дСйствия:

1. ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅ ConfigMap-ΠΈΡ‚Π΅ Π² пространството Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° kube-system:

kubectl -n kube-system edit cm kubeadm-config

β€” ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ data.ClusterConfiguration.networking.podSubnet Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° подсСтка 10.55.0.0/16.

kubectl -n kube-system edit cm kube-proxy

β€” ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ data.config.conf.clusterCIDR: 10.55.0.0/16.

2. ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅ манифСста Π½Π° controller-manager’а:

vim /etc/kubernetes/manifests/kube-controller-manager.yaml

β€” ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ --cluster-cidr=10.55.0.0/16.

3. НаблюдавамС Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ‚Π΅ стойности .spec.podCIDR, .spec.podCIDRs, .InternalIP, .status.addresses Π·Π° всички възли Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°:

kubectl get no -o json | jq '[.items[] | {"name": .metadata.name, "podCIDR": .spec.podCIDR, "podCIDRs": .spec.podCIDRs, "InternalIP": (.status.addresses[] | select(.type == "InternalIP") | .address)}]'

[
  {
    "name": "kube-2-master",
    "podCIDR": "10.244.0.0/24",
    "podCIDRs": [
      "10.244.0.0/24"
    ],
    "InternalIP": "192.168.199.2"
  },
  {
    "name": "kube-2-master",
    "podCIDR": "10.244.0.0/24",
    "podCIDRs": [
      "10.244.0.0/24"
    ],
    "InternalIP": "10.0.1.239"
  },
  {
    "name": "kube-2-worker-01f438cf-579f9fd987-5l657",
    "podCIDR": "10.244.1.0/24",
    "podCIDRs": [
      "10.244.1.0/24"
    ],
    "InternalIP": "192.168.199.222"
  },
  {
    "name": "kube-2-worker-01f438cf-579f9fd987-5l657",
    "podCIDR": "10.244.1.0/24",
    "podCIDRs": [
      "10.244.1.0/24"
    ],
    "InternalIP": "10.0.4.73"
  }
]

4. Π©Π΅ смСним podCIDR, ΠΏΡ€Π°Π²Π΅ΠΉΠΊΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² etcd:

.\/etcdhelper -cacert \/etc\/kubernetes\/pki\/etcd\/ca.crt -cert \/etc\/kubernetes\/pki\/etcd\/server.crt -key \/etc\/kubernetes\/pki\/etcd\/server.key -endpoint https:\/\/127.0.0.1:2379 change-pod-cidr 10.55.0.0\/16

5. Π©Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ podCIDR наистина Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½:

kubectl get no -o json | jq '[.items[] | {"name": .metadata.name, "podCIDR": .spec.podCIDR, "podCIDRs": .spec.podCIDRs, "InternalIP": (.status.addresses[] | select(.type == "InternalIP") | .address)}]'

[
  {
    "name": "kube-2-master",
    "podCIDR": "10.55.0.0/24",
    "podCIDRs": [
      "10.55.0.0/24"
    ],
    "InternalIP": "192.168.199.2"
  },
  {
    "name": "kube-2-master",
    "podCIDR": "10.55.0.0/24",
    "podCIDRs": [
      "10.55.0.0/24"
    ],
    "InternalIP": "10.0.1.239"
  },
  {
    "name": "kube-2-worker-01f438cf-579f9fd987-5l657",
    "podCIDR": "10.55.1.0/24",
    "podCIDRs": [
      "10.55.1.0/24"
    ],
    "InternalIP": "192.168.199.222"
  },
  {
    "name": "kube-2-worker-01f438cf-579f9fd987-5l657",
    "podCIDR": "10.55.1.0/24",
    "podCIDRs": [
      "10.55.1.0/24"
    ],
    "InternalIP": "10.0.4.73"
  }
]

6. По Ρ€Π΅Π΄Π°, Ρ‰Π΅ рСстартирамС всички възли Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°.

7. Ако ΠΏΠΎΠ½Π΅ Π½Π° Π΅Π΄ΠΈΠ½ възСл оставим стария podCIDR, kube-controller-manager няма Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° стартира, Π° pod-ΠΎΠ²Π΅Ρ‚Π΅ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° няма Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΈ.

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, промяната Π½Π° podCIDR ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΈ ΠΏΠΎ-лСсно (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΠ°). Но Π½ΠΈΠ΅ искахмС Π΄Π° сС Π½Π°ΡƒΡ‡ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с etcd Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ° случаи, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π² Kubernetes Π² etcd β€” СдинствСното възмоТно Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. (НапримСр, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Ρ‚Π°ΠΊΠ° Π±Π΅Π· прСстой Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π΅Ρ‚ΠΎ Π½Π° Service spec.clusterIP.)

РСзюмС

Бтатията Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½ΠΈ Π² etcd Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ, Ρ‚.Π΅. извън Kubernetes API. Понякога Ρ‚Π°ΠΊΡŠΠ² ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволява Π΄Π° сС правят "Ρ…ΠΈΡ‚Ρ€ΠΈ Π½Π΅Ρ‰Π°". ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅, описани Π² тСкста, бяха тСствани Π½Π° Ρ€Π΅Π°Π»Π½ΠΈ K8s ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΡΡ‚Π°Ρ‚ΡƒΡΡŠΡ‚ ΠΈΠΌ Π½Π° готовност Π·Π° ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” PoC (доказатСлство Π·Π° концСпцията). Π—Π°Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ искатС Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π° вСрсия Π½Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ‚Π° etcdhelper Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ, ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π³ΠΎ Π½Π° свой риск.

P.S.

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

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

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