ΠΡΠ΅ ΠΏΠΎ-ΡΠ΅ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ ΡΠ΅ ΠΎΠ±ΡΡΡΠ°Ρ ΠΊΡΠΌ Π½Π°Ρ Ρ ΠΈΡΠΊΠ°Π½Π΅ Π΄Π° ΠΎΡΠΈΠ³ΡΡΠΈΠΌ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Kubernetes ΠΊΠ»ΡΡΡΠ΅ΡΠ°, Π·Π° Π΄Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°Ρ ΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΈΡΠ΅ Π²ΡΡΡΠ΅ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°: Π·Π° Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²ΠΈΡ, Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° Π²ΡΡΡΠ΅ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°β¦

ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ·Π½ΠΈΠΊΠ²Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅Ρ ΠΎΡ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΡΠΈ ΠΌΠ°ΡΠΈΠ½Π° ΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ° 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 β ΡΠ΅ ΡΠΌΠ΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΈ Π·Π° Π»ΠΈΠ½ΠΊΠΎΠ²Π΅.) ΠΠΎ Π΄ΠΎΠ±ΡΠ° ΠΎΡΠΏΡΠ°Π²Π½Π° ΡΠΎΡΠΊΠ° Π±Π΅ΡΠ΅ (Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌ Π½Π° Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ Π°Π²ΡΠΎΡΠΈ!).
Π’Π°Π·ΠΈ ΡΡΠΈΠ»ΠΈΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° Ρ 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-client2. Π‘ΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ 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-Π° (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ), Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° Π³ΠΈ ΠΏΡΠ΅ΠΈΠ·Π΄Π°Π΄Π΅ΠΌ:
- ΠΠ΅ΠΊΠ° Π²ΠΈΠ΄ΠΈΠΌ Π·Π° ΠΊΠΎΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ ΠΈ 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 - ΠΠΎΠ΄Π³ΠΎΡΠ²ΡΠΌΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ ΠΊΠΎΠ½ΡΠΈΠ³ Π·Π° 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 Π°Π΄ΡΠ΅Ρ Π½Π° ΠΌΠ°ΠΉΡΡΠΎΡΡΠΊΠΈΡ Π²ΡΠ·Π΅Π» - ΠΠ·ΡΡΠΈΠ²Π°ΠΌΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ crt ΠΈ key, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π±Π΅Π· ΡΠΎΠ²Π° Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·Π΄Π°Π΄Π΅Π½:
rm \/etc\/kubernetes\/pki\/apiserver.{key,crt} - ΠΡΠ΅ΠΈΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ Π·Π° API ΡΡΡΠ²ΡΡΠ°:
kubeadm init phase certs apiserver --config=kubeadm-config.yaml - ΠΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅, ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡΡ Π΅ ΠΈΠ·Π΄Π°Π΄Π΅Π½ Π·Π° Π½ΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠ°:
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 - Π‘Π»Π΅Π΄ ΠΏΡΠ΅ΠΈΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° Π½Π° API ΡΡΡΠ²ΡΡΠ°, ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΌΡ:
docker ps | grep k8s_kube-apiserver | awk '{print $1}' | xargs docker restart - ΠΡΠ΅ΠΎΠ³Π΅Π½Π΅ΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π·Π°
admin.conf:kubeadm alpha certs renew admin.conf - Π Π΅Π΄Π°ΠΊΡΠΈΡΠ°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ Π² 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 ΠΎΡ ΡΡΠ°ΡΠ°ΡΠ° ΠΏΠΎΠ΄ΡΠ΅Ρ Π½Π° Π½ΠΎΠ²Π°ΡΠ°. ΠΠΎ-Π΄ΠΎΠ»Ρ Π² ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ° ΠΎΠΏΠΈΡΠ°Π½ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠΈ Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠ΅ΡΡΠΎΡ. - Π©Π΅ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°ΠΌΠ΅ 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 - Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π°Π΄ΡΠ΅ΡΡΡ Π½Π° kube-dns ΡΠ΅ Π΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠ», Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° kubelet Π½Π° Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·Π»ΠΈ:
kubeadm upgrade node phase kubelet-config && systemctl restart kubelet - ΠΡΡΠ°Π½Π° Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ podβΠΎΠ²Π΅ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°:
kubectl get pods --no-headers=true --all-namespaces |sed -r 's\/(S+)s+(S+).*\/kubectl --namespace 1 delete pod 2\/e'
ΠΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠ΅ΡΡΠΎΡ
Π Π°Π·ΠΌΠΈΡΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π°εη:
- Π‘Π»Π΅Π΄ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π½Π° ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈΡΠ΅ Π½Π° control plane, ΡΡΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²Π° ΡΡΠ»ΡΠ³Π° kube-dns, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΈΠΌΠ΅ΡΠΎ
kube-dns-tmpΠΈ Π½ΠΎΠ² Π°Π΄ΡΠ΅Ρ172.24.0.10. - ΠΠ°ΠΏΡΠ°Π²Π΅ΡΠ΅
ifΠ² etcdhelper, ΠΊΠΎΠΉΡΠΎ Π½ΡΠΌΠ° Π΄Π° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ° ΡΡΠ»ΡΠ³Π°ΡΠ° kube-dns. - ΠΠ°ΠΌΠ΅Π½Π΅ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π½Π° Π²ΡΠΈΡΠΊΠΈ kubelet-Ρ
ClusterDNSΡ Π½ΠΎΠ²ΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΠ΅ΡΠΎ ΡΡΠ°ΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π° ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ Ρ Π½ΠΎΠ²Π°ΡΠ°. - ΠΠ·ΡΠ°ΠΊΠ°ΠΉΡΠ΅, Π΄ΠΎΠΊΠ°ΡΠΎ podβΠΎΠ²Π΅ΡΠ΅ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° ΡΠ΅ ΠΏΡΠ΅Π·Π°ΡΠ΅Π΄ΡΡ, ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΈ ΠΏΠΎ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ, ΠΈΠ»ΠΈ Π² ΡΠ³ΠΎΠ²ΠΎΡΠ΅Π½ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅.
- ΠΡΠ΅ΠΌΠ°Ρ
Π½Π΅ΡΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ°
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\/165. Π©Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π΄Π°Π»ΠΈ 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
