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

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

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

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

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

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

ΠžΡ‚Π΄Π°Π²Π½Π° смС Π²ΡŠΠ·ΠΏΡ€ΠΈΠ΅Π»ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ‚Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠΈ Π·Π° услуги ΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ - ΠΊΠ°Ρ‚ΠΎ цяло, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ всички ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ Π΄Π° ΠΈΠΌΠ°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΡ€Π΅ΠΆΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° голям Π±Ρ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ Π±ΠΈΡ… искал Π΄Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€ΡŠΡ‰Π°ΠΌ ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ услуги, прилоТСния със ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ ΠΈ Ρ‚.Π½.

И Ρ‚ΠΎΠ³Π°Π²Π° сС Π·Π°ΠΏΠΈΡ‚Π°Ρ…ΠΌΠ΅: ΠΊΠ°ΠΊ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π² ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€?

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

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

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

Но Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ подходящо Π·Π° всСки... Π•Ρ‚ΠΎ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΈ въвСдСния Π·Π° нашия случай:

  • Използва сС Ρ„Π»Π°Π½Π΅Π»;
  • Има ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ Π² ΠΎΠ±Π»Π°Ρ†ΠΈΡ‚Π΅, Ρ‚Π°ΠΊΠ° ΠΈ Π½Π° Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π°;
  • Π‘ΠΈΡ… искал Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° всички услуги Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°;
  • Има Π½ΡƒΠΆΠ΄Π° Π΄Π° сС ΠΏΡ€Π°Π²ΠΈ всичко с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ Π±Ρ€ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ;
  • ВСрсията Π½Π° 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 към Π½ΠΎΠ²Π° ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠ°.

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

ΠŸΡ€ΠΎΠΌΡΠ½Π° Π½Π° услугата CIDR

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

ΠŸΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈΡ‚Π΅Π»Π½ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ:

  • инсталиранС Π½Π° нСобходимия софтуСр ΠΈ асСмблиранС Π½Π° patched etcdhelper;
  • Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π°Π½Π΅ ΠΈ Ρ‚.Π½. ΠΈ /etc/kubernetes.

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

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

Π‘Π»Π΅Π΄Π²Π° пълна послСдоватСлност ΠΎΡ‚ дСйствия Π² Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ.

1. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅ etcd-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π·Π° дъмп Π½Π° Π΄Π°Π½Π½ΠΈ:

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. НаправСтС Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ ΠΈ Ρ‚.Π½.:

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. Π’ΡŠΠ² Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ /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 ΠΈ ΠΊΠ»ΡŽΡ‡, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π±Π΅Π· Ρ‚ΠΎΠ²Π° новият сСртификат няма Π΄Π° бъдС ΠΈΠ·Π΄Π°Π΄Π΅Π½:
    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 

    Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π’ Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π΅Π·ΠΎΠ»ΡŽΡ†ΠΈΡΡ‚Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° спира Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π² ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ /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. Всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ остава, Π΅ Π΄Π° рСстартиратС всички ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°:
    kubectl get pods --no-headers=true --all-namespaces |sed -r 's/(S+)s+(S+).*/kubectl --namespace 1 delete pod 2/e'

ΠœΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΉΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° прСстой

Мисли ΠΊΠ°ΠΊ Π΄Π° свСдСтС Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° прСстой:

  1. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ манифСститС Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π°Ρ‚Π° Ρ€Π°Π²Π½ΠΈΠ½Π°, ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Π° услуга kube-dns, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΈΠΌΠ΅Ρ‚ΠΎ kube-dns-tmp ΠΈ Π½ΠΎΠ² адрСс 172.24.0.10.
  2. правя if Π² etcdhelper, ΠΊΠΎΠ΅Ρ‚ΠΎ няма Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ услугата kube-dns.
  3. Π—Π°ΠΌΠ΅Π½Π΅Ρ‚Π΅ адрСса във всички kubelets ClusterDNS към Π½ΠΎΠ²Π°, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ старата услуга Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с Π½ΠΎΠ²Π°Ρ‚Π°.
  4. Π˜Π·Ρ‡Π°ΠΊΠ°ΠΉΡ‚Π΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ с прилоТСния сС ΠΏΡ€Π΅ΠΎΠ±ΡŠΡ€Π½Π°Ρ‚ сами ΠΏΠΎ СстСствСни ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ ΠΈΠ»ΠΈ Π² ΡƒΠ³ΠΎΠ²ΠΎΡ€Π΅Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅.
  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. ΠŸΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ манифСста Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€-ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€:

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 няма Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° стартира ΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° няма Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΈ.

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

ΠžΠ±Ρ‰ΠΎ

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

PS

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

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€