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

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

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

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

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

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

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

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

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

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

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

Но Π½Π΅ Π½Π° всСки ΠΌΡƒ ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π°... Π•Ρ‚ΠΎ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π° информация Π·Π° нашия случай:

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

И Ρ‚Π°ΠΊΠ°, ΠΎΡ‚Π΄Π°Π²Π½Π° Π½ΠΈ интСрСсува ΠΊΠ°ΠΊΠ²ΠΎ ΠΈ ΠΊΠ°ΠΊ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π² etcd Π² Kubernetes, ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ с Ρ‚ΠΎΠ²Π°... И помислихмС: "Π—Π°Ρ‰ΠΎ просто Π½Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² 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 ΠΈ /etc/kubernetes.

ΠšΡ€Π°Ρ‚ΡŠΠΊ ΠΏΠ»Π°Π½ Π·Π° дСйствия ΠΏΠΎ смяна Π½Π° serviceCIDR:

  • промяна Π½Π° манифСститС Π½Π° 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\ngo get go.etcd.io\/etcd\/clientv3 k8s.io\/kubectl\/pkg\/scheme k8s.io\/apimachinery\/pkg\/runtime\ngo 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 Π½Π° Π½ΠΎΠ²Π° подсСтка.

  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. Π”Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π°ΠΊΠΎ Π² etcdhelper, ΠΊΠΎΠΉΡ‚ΠΎ няма Π΄Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π° услугата kube-dns.
  3. Π”Π° Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Π² всички kubelet-ΠΎΠ²Π΅ адрСса Π½Π° ClusterDNS с новия, ΠΏΡ€ΠΈ Ρ‚ΠΎΠ²Π° старата услуга Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ с Π½ΠΎΠ²Π°Ρ‚Π°.
  4. Π”Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΌΠ΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ pod’овСтС с прилоТСнията сС прСмСстят ΠΈΠ»ΠΈ сами ΠΏΠΎ СстСствСни ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ, ΠΈΠ»ΠΈ Π² ΡƒΠ³ΠΎΠ²ΠΎΡ€Π΅Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅.
  5. Π”Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ΠΌ услугата kube-dns-tmp ΠΈ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ serviceSubnetCIDR Π·Π° услугата kube-dns.

Π’ΠΎΠ·ΠΈ ΠΏΠ»Π°Π½ позволява Π΄Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° простоя Π΄ΠΎ ~1 ΠΌΠΈΠ½ΡƒΡ‚Π° β€” Π·Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° услугата 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