ΠΡΠ΅ ΡΠ°ΡΠ΅ ΠΊ Π½Π°ΠΌ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Ρ ΠΏΡΠΎΡΡΠ±ΠΎΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ Π² Kubernetes-ΠΊΠ»Π°ΡΡΠ΅Ρ Π΄Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ Π²Π½ΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°: ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π½Π°ΠΏΡΡΠΌΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²ΠΈΡΡ, Π΄Π»Ρ ΡΠ²ΡΠ·ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π²Π½ΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°β¦
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΠΊ ΡΠ΅ΡΠ²ΠΈΡΡ memcached.staging.svc.cluster.local
. ΠΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠ°ΠΊΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ VPN Π²Π½ΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π°Π½ΠΎΠ½ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ pod’ΠΎΠ², ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΈ push’ΠΈΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ½ΡΠ΅ DNS ΠΊΠ»ΠΈΠ΅Π½ΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ ΡΠ΅ΡΠ²ΠΈΡΡ memcached.staging.svc.cluster.local
, Π·Π°ΠΏΡΠΎΡ ΡΡ
ΠΎΠ΄ΠΈΡ Π² DNS ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈ Π² ΠΎΡΠ²Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π°Π΄ΡΠ΅Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΈΠ· ΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈΠ»ΠΈ Π°Π΄ΡΠ΅Ρ pod’Π°.
K8s-ΠΊΠ»Π°ΡΡΠ΅ΡΡ ΠΌΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ kubeadm, Π³Π΄Π΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠ½Π°Ρ ΠΏΠΎΠ΄ΡΠ΅ΡΡ β 192.168.0.0/16
, Π° ΡΠ΅ΡΡ pod’ΠΎΠ² β 10.244.0.0/16
. ΠΠ±ΡΡΠ½ΠΎ Π²ΡΡ Ρ
ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½ΠΎ Π΅ΡΡΡ ΠΏΠ°ΡΠ° ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ²:
- ΠΠΎΠ΄ΡΠ΅ΡΡ
192.168.*.*
ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΎΡΠΈΡΠ½ΡΡ ΡΠ΅ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², Π° Π΅ΡΠ΅ ΡΠ°ΡΠ΅ β Π² Π΄ΠΎΠΌΠ°ΡΠ½ΠΈΡ ΡΠ΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². Π ΡΠΎΠ³Π΄Π° Ρ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡ: Π΄ΠΎΠΌΠ°ΡΠ½ΠΈΠ΅ ΡΠΎΡΡΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΡΠΎΠΉ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ ΠΈ VPN push’ΠΈΡ ΡΡΠΈ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ ΠΈΠ· ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΡ. - Π£ Π½Π°Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ² (ΠΊΠ»Π°ΡΡΠ΅ΡΡ production, stage ΠΈ/ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ dev-ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ²). Π’ΠΎΠ³Π΄Π° Π²ΠΎ Π²ΡΠ΅Ρ Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ Π΄Π»Ρ pod’ΠΎΠ² ΠΈ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°Ρ .
ΠΡ ΡΠΆΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π΄Π°Π²Π½ΠΎ ΠΏΡΠΈΠ½ΡΠ»ΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠΎΠ΄ΡΠ΅ΡΠ΅ΠΉ Π΄Π»Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΈ pod’ΠΎΠ² Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° β Π² ΠΎΠ±ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΡ Π±ΡΠ»ΠΈ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ΅ΡΡΠΌΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ² Π² ΡΠ°Π±ΠΎΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ°ΡΡΠ²Π°ΡΡ Ρ Π½ΡΠ»Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Π½ΠΈΡ Π·Π°ΠΏΡΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ, stateful-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Ρ.ΠΏ.
Π ΡΠΎΠ³Π΄Π° ΠΌΡ Π·Π°Π΄Π°Π»ΠΈΡΡ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ: ΠΊΠ°ΠΊ Π±Ρ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΠΏΠΎΠ΄ΡΠ΅ΡΡ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅?
ΠΠΎΠΈΡΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½Π°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° β ΠΏΠ΅ΡΠ΅ΡΠΎΠ·Π΄Π°ΡΡ Π²ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ Ρ ΡΠΈΠΏΠΎΠΌ ClusterIP. ΠΠ°ΠΊ Π²Π°ΡΠΈΠ°Π½Ρ,
The following process has a problem: after everything configured, the pods come up with the old IP as a DNS nameserver in /etc/resolv.conf.
Since I still did not find the solution, i had to reset the entire cluster with kubeadm reset and init it again.
ΠΠΎ Π½Π΅ Π²ΡΠ΅ΠΌ ΡΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡβ¦ ΠΠΎΡ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΡΠ΅ Π²Π²ΠΎΠ΄Π½ΡΠ΅ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ»ΡΡΠ°Ρ:
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ 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 ΠΈ
/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 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
Π½Π° Π½ΠΎΠ²ΡΡ ΠΏΠΎΠ΄ΡΠ΅ΡΡ. - Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ Π°Π΄ΡΠ΅Ρ 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/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 ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΈ ΠΏΡΠΎΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, spec.clusterIP
.)
ΠΡΠΎΠ³
Π ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π² etcd Π½Π°ΠΏΡΡΠΌΡΡ, Ρ.Π΅. Π² ΠΎΠ±Ρ ΠΎΠ΄ Kubernetes API. ΠΠ½ΠΎΠ³Π΄Π° ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄Π΅Π»Π°ΡΡ Β«Ρ ΠΈΡΡΡΠ΅ ΡΡΡΠΊΠΈΒ». ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΡ K8s-ΠΊΠ»Π°ΡΡΠ΅ΡΠ°Ρ . ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΡ ΡΡΠ°ΡΡΡ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΠΊ ΡΠΈΡΠΎΠΊΠΎΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ β PoC (proof of concept). ΠΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΡΡΠΈΠ»ΠΈΡΡ etcdhelper Π½Π° ΡΠ²ΠΎΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°Ρ , Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΡΠΎ Π½Π° ΡΠ²ΠΎΠΉ ΡΡΡΠ°Ρ ΠΈ ΡΠΈΡΠΊ.
P.S.
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- Β«
etcd 3.4.3: ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΠΈ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Β»; - Β«
Calico Π΄Π»Ρ ΡΠ΅ΡΠΈ Π² Kubernetes: Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠΏΡΡΠ° Β»; - Β«
6 Π·Π°Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π±Π°Π³ΠΎΠ² ΠΏΡΠΈ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ Kubernetes [ΠΈ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅] Β»; - Β«
ΠΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ΅ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π½ΠΎΡΡΠ΅ΠΉ Π² Kubernetes Β».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com