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

ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ·Π½ΠΈΠΊΠ²Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ° ΠΎΡ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΡΠΈ ΠΌΠ°ΡΠΈΠ½Π° ΡΡΡ ΡΡΡΠ²ΠΈΡΠ° 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 β ΡΠ΅ ΡΠΌΠ΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΈ Π·Π° Π»ΠΈΠ½ΠΊΠΎΠ²Π΅ΡΠ΅.) ΠΠ±Π°ΡΠ΅ Π΄ΠΎΠ±ΡΠ°ΡΠ° ΠΎΡΠΏΡΠ°Π²Π½Π° ΡΠΎΡΠΊΠ° ΡΡΠ°Π½Π° (Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌ Π½Π° Π°Π²ΡΠΎΡΠΈΡΠ΅ ΠΌΡ!).
Π’Π°Π·ΠΈ ΡΡΠΈΠ»ΠΈΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° Ρ 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-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\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-Π° (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ), ΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π³ΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅ΠΌ ΠΎΡΠ½ΠΎΠ²ΠΎ:
- ΠΠ° Π²ΠΈΠ΄ΠΈΠΌ Π½Π° ΠΊΠ°ΠΊΠ²ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ ΠΈ 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Π½Π° Π½ΠΎΠ²Π° ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠ°. - Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π°Π΄ΡΠ΅ΡΡΡ Π½Π° 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. - ΠΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ
Π°ΠΊΠΎΠ² etcdhelper, ΠΊΠΎΠΉΡΠΎ Π½ΡΠΌΠ° Π΄Π° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ° ΡΡΠ»ΡΠ³Π°ΡΠ° kube-dns. - ΠΠ° Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Π² Π²ΡΠΈΡΠΊΠΈ kubelet-ΠΎΠ²Π΅ Π°Π΄ΡΠ΅ΡΠ° Π½Π°
ClusterDNSΡ Π½ΠΎΠ²ΠΈΡ, ΠΏΡΠΈ ΡΠΎΠ²Π° ΡΡΠ°ΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π° ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ Ρ Π½ΠΎΠ²Π°ΡΠ°. - ΠΠ° ΠΈΠ·ΡΠ°ΠΊΠ°ΠΌΠ΅, Π΄ΠΎΠΊΠ°ΡΠΎ podβΠΎΠ²Π΅ΡΠ΅ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΡΡ ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΈ ΠΏΠΎ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ, ΠΈΠ»ΠΈ Π² ΡΠ³ΠΎΠ²ΠΎΡΠ΅Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅.
- ΠΠ° ΠΈΠ·ΡΡΠΈΠ΅ΠΌ ΡΡΠ»ΡΠ³Π°ΡΠ°
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\/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
