ΠΡΠ΅ ΠΏΠΎ-ΡΠ΅ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ Π½ΠΈ ΠΌΠΎΠ»ΡΡ Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΊΠ»ΡΡΡΠ΅ΡΠ° Kubernetes, Π·Π° Π΄Π° ΠΈΠΌΠ°Ρ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΡΠ»ΡΠ³ΠΈ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°: ΡΠ°ΠΊΠ° ΡΠ΅ Π΄Π° ΠΌΠΎΠ³Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ°Ρ Ρ Π½ΡΠΊΠ°ΠΊΠ²Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ ΡΡΠ»ΡΠ³Π°, Π΄Π° ΡΠ²ΡΡΠΆΠ°Ρ Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°...
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ° Π½ΡΠΆΠ΄Π° Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ ΠΎΡ Π²Π°ΡΠ°ΡΠ° Π»ΠΎΠΊΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΊΡΠΌ ΡΡΠ»ΡΠ³Π° 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, ΡΠ΅ ΠΎΡΠ΅Π½ΠΈΠΌ Π²ΡΡΠ·ΠΊΠΈΡΠ΅.) ΠΠΎΠ±ΡΠ° ΠΎΡΠΏΡΠ°Π²Π½Π° ΡΠΎΡΠΊΠ° ΠΎΠ±Π°ΡΠ΅ Π΅
Π’Π°Π·ΠΈ ΠΏΠΎΠΌΠΎΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° Ρ 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 (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ), ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅ΠΈΠ·Π΄Π°Π΄Π΅Π½ΠΈ:
- ΠΠ΅ΠΊΠ° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π·Π° ΠΊΠΎΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ ΠΈ 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 ΠΈ ΠΊΠ»ΡΡ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π±Π΅Π· ΡΠΎΠ²Π° Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·Π΄Π°Π΄Π΅Π½:
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
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π ΡΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅Π·ΠΎΠ»ΡΡΠΈΡΡΠ° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° ΡΠΏΠΈΡΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π² ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄
/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
- ΠΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΡΡΠ°Π²Π°, Π΅ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°:
kubectl get pods --no-headers=true --all-namespaces |sed -r 's/(S+)s+(S+).*/kubectl --namespace 1 delete pod 2/e'
ΠΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΏΡΠ΅ΡΡΠΎΠΉ
ΠΠΈΡΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° ΡΠ²Π΅Π΄Π΅ΡΠ΅ Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΏΡΠ΅ΡΡΠΎΠΉ:
- Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π°ΡΠ° ΡΠ°Π²Π½ΠΈΠ½Π°, ΡΡΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²Π° ΡΡΠ»ΡΠ³Π° kube-dns, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΈΠΌΠ΅ΡΠΎ
kube-dns-tmp
ΠΈ Π½ΠΎΠ² Π°Π΄ΡΠ΅Ρ172.24.0.10
. - ΠΏΡΠ°Π²Ρ
if
Π² etcdhelper, ΠΊΠΎΠ΅ΡΠΎ Π½ΡΠΌΠ° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΡΠ»ΡΠ³Π°ΡΠ° kube-dns. - ΠΠ°ΠΌΠ΅Π½Π΅ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ kubelets
ClusterDNS
ΠΊΡΠΌ Π½ΠΎΠ²Π°, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΡΠ°ΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π° ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ Π½ΠΎΠ²Π°ΡΠ°. - ΠΠ·ΡΠ°ΠΊΠ°ΠΉΡΠ΅, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΡΠ½Π°Ρ ΡΠ°ΠΌΠΈ ΠΏΠΎ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ ΠΈΠ»ΠΈ Π² ΡΠ³ΠΎΠ²ΠΎΡΠ΅Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅.
- ΠΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°
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 ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π΄ΠΎΡΠΈ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, spec.clusterIP
.)
ΠΠ±ΡΠΎ
Π‘ΡΠ°ΡΠΈΡΡΠ° ΠΎΠ±ΡΡΠΆΠ΄Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ Π΄Π°Π½Π½ΠΈ Π² etcd Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ, Ρ.Π΅. Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»ΡΠΉΠΊΠΈ API Π½Π° Kubernetes. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ βΡΡΡΠ΄Π½ΠΈ Π½Π΅ΡΠ°β. Π’Π΅ΡΡΠ²Π°Ρ ΠΌΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅, Π΄Π°Π΄Π΅Π½ΠΈ Π² ΡΠ΅ΠΊΡΡΠ°, Π²ΡΡΡ Ρ ΡΠ΅Π°Π»Π½ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ K8s. Π’Π΅Ρ Π½ΠΈΡΡ ΡΡΠ°ΡΡΡ Π½Π° Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡ Π·Π° ΡΠΈΡΠΎΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΎΠ±Π°ΡΠ΅ Π΅ PoC (Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΠ²ΠΎ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ). Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΏΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° etcdhelper Π½Π° Π²Π°ΡΠΈΡΠ΅ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ, Π½Π°ΠΏΡΠ°Π²Π΅ΡΠ΅ Π³ΠΎ Π½Π° ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΡΠΈΡΠΊ.
PS
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΡΡΠΎ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
- Β«
etcd 3.4.3: ΠΏΡΠΎΡΡΠ²Π°Π½Π΅ Π·Π° Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎΡΡ ΠΈ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ Π½Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΡΠΎ Β»; - Β«
Calico Π·Π° ΡΠ°Π±ΠΎΡΠ° Π² ΠΌΡΠ΅ΠΆΠ° Π² Kubernetes: Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΎΠΏΠΈΡ Β»; - Β«
6 Π·Π°Π±Π°Π²Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Kubernetes [ΠΈ ΡΡΡ Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅] Β»; - Β«
ΠΠΈΠ·ΡΠ°Π»Π½ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π½Π΅ΠΈΠ·ΠΏΡΠ°Π²Π½ΠΎΡΡΠΈ Π² Kubernetes ".
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com