ã®åºæ¬çãªèŠä»¶ã®1ã€ã¯ãåãããã«ç¬èªã®IPã¢ãã¬ã¹ãå¿ èŠã§ãããã¯ã©ã¹ã¿ãŒå ã®ä»ã®ãã¹ãŠã®ãããããã®ã¢ãã¬ã¹ã§å°éã§ããå¿ èŠãããããšã§ãããã®ãããã¯ãŒã¯ã¢ãã«ã®å®è£ ãæ¯æŽããå€ãã®ãããã¯ãŒã¯ããããã€ããŒãïŒFlannelãCalicoãCanalãªã©ïŒããããŸãã
ç§ãæåã«Kubernetesã䜿ãå§ãããšããããããIPã¢ãã¬ã¹ãã©ã®ããã«æ£ç¢ºã«ååŸãããã¯å®å šã«ã¯ããããŸããã§ãããåã ã®ã³ã³ããŒãã³ããã©ã®ããã«æ©èœããããç解ããŠããŠããããããäžç·ã«æ©èœããããšãæ³åããããšã¯å°é£ã§ãããããšãã°ãCNIãã©ã°ã€ã³ã®ç®çã¯ããã£ãŠããŸããããã©ã®ããã«åŒã°ããã®ãããããŸããã§ããããã®ããããã®èšäºãäœæããŠãããŸããŸãªãããã¯ãŒãã³ã°ã³ã³ããŒãã³ããšãåããããç¬èªã®IPã¢ãã¬ã¹ãååŸã§ããKubernetesã¯ã©ã¹ã¿ãŒã§ããããã©ã®ããã«é£æºãããã«ã€ããŠã®ç¥èãå ±æããããšã«ããŸããã
ã³ã³ããã®ã©ã³ã¿ã€ã ãªãã·ã§ã³ãç°ãªãã®ãšåæ§ã«ãKubernetesã§ãããã¯ãŒãã³ã°ãç·šæããããŸããŸãªæ¹æ³ããããŸãããã®æçš¿ã§ã¯ãã¯ã©ã¹ã¿ãŒãããã¯ãŒãã³ã°ã«Flannelã䜿çšããã©ã³ã¿ã€ã ãšããŠContainerdã䜿çšããŸãããŸããã³ã³ããéã®ãããã¯ãŒã¯ãã©ã®ããã«æ©èœããããç¥ã£ãŠãããšããåæããé²ããŸãããã®ãããã³ã³ããã¹ãã®ããã ãã«ãç°¡åã«è§ŠããŸãã
ããã€ãã®åºæ¬çãªæŠå¿µ
ã³ã³ãããšãããã¯ãŒãã³ã°ïŒæŠèŠ
ã³ã³ããããããã¯ãŒã¯ãä»ããŠçžäºã«éä¿¡ããæ¹æ³ã説æããåªããåºçç©ãã€ã³ã¿ãŒãããäžã«ãããããããŸãããããã£ãŠãåºæ¬çãªæŠå¿µã®æŠèŠã®ã¿ã瀺ããLinuxããªããžã®äœæãšãã±ããã®ã«ãã»ã«åãå«ã1ã€ã®ã¢ãããŒãã«éå®ããŸããã³ã³ãããããã¯ãŒãã³ã°ã®ãããã¯ãã®ãã®ãå¥ã®èšäºã«å€ããããã詳现ã¯çç¥ãããŠããŸããããã€ãã®ç¹ã«æçã§æçãªåºçç©ãžã®ãªã³ã¯ã以äžã«ç€ºããŸãã
åäžã®ãã¹ãäžã®ã³ã³ãã
åããã¹ãäžã§å®è¡ãããŠããã³ã³ããéã§IPã¢ãã¬ã¹ã«ãã£ãŠéä¿¡ãã1ã€ã®æ¹æ³ã¯ãLinuxããªããžãäœæããããšã§ãããã®ããã«ãvethïŒä»®æ³ã€ãŒãµãããïŒä»®æ³ããã€ã¹ãKubernetesïŒããã³Docker ïŒã§äœæãããŸããvethããã€ã¹ã®äžæ¹ã®ç«¯ã¯ã³ã³ããã®ãããã¯ãŒã¯ããŒã ã¹ããŒã¹ã«æ¥ç¶ããããäžæ¹ã®ç«¯ã¯ãã¹ãã®ãããã¯ãŒã¯äžã®Linuxããªããžã«æ¥ç¶ããŸãã
åããã¹ãäžã®ãã¹ãŠã®ã³ã³ããã«ã¯ãIPã¢ãã¬ã¹ã䜿çšããŠçžäºã«éä¿¡ã§ããããªããžã«æ¥ç¶ãããvethã®äžç«¯ããããŸããLinuxããªããžã«ã¯IPã¢ãã¬ã¹ãããããããããä»ã®ããŒããžã®åºåãã©ãã£ãã¯ã®ã²ãŒããŠã§ã€ãšããŠæ©èœããŸãã
ç°ãªããã¹ãäžã®ã³ã³ãã
ãã±ããã®ã«ãã»ã«åã¯ãç°ãªããã¹ãäžã®ã³ã³ãããIPã¢ãã¬ã¹ã䜿çšããŠçžäºã«éä¿¡ã§ããããã«ãã1ã€ã®æ¹æ³ã§ããFlannelã§ã¯ãvxlanãã¯ãããžãŒããã®æ©èœãæ åœããŸãããã®æ©èœã¯ãå ã®ãã±ãããUDPãã±ããã«ãããã¯ãããŠãããå®å ã«éä¿¡ããŸãã
Kubernetesã¯ã©ã¹ã¿ãŒã§ã¯ãFlannelã¯vxlanããã€ã¹ãäœæããããã«å¿ããŠåããŒãã®ã«ãŒãããŒãã«ãæ¡åŒµããŸããç°ãªããã¹ãäžã®ã³ã³ããå®ãŠã®åãã±ããã¯ãvxlanããã€ã¹ãééããUDPãã±ããã«ã«ãã»ã«åãããŸããå®å ã§ããã¹ããããããã±ãŒãžãæœåºãããç®çã®ãããã«ãªãã€ã¬ã¯ããããŸãã
泚ïŒããã¯ãã³ã³ãããŒéã®ãããã¯ãŒã¯ãç·šæãã1ã€ã®æ¹æ³ã«ãããŸããã
CRIãšã¯äœã§ããïŒ
CRIïŒContainer Runtime InterfaceïŒã¯ãkubeletãããŸããŸãªã³ã³ããã©ã³ã¿ã€ã ç°å¢ã䜿çšã§ããããã«ãããã©ã°ã€ã³ã§ããCRI APIã¯ããŸããŸãªã©ã³ã¿ã€ã ç°å¢ã«çµã¿èŸŒãŸããŠããããããŠãŒã¶ãŒã¯éžæããã©ã³ã¿ã€ã ãéžæã§ããŸãã
CNIãšã¯äœã§ããïŒ
CNIãããžã§ã¯ãã¯ãLinuxã³ã³ããçšã®ãŠãããŒãµã«ãããã¯ãŒãã³ã°ãœãªã¥ãŒã·ã§ã³ãç·šæããããã®ä»æ§ã§ããããã«ããããã®ãããã¯ãŒã¯ãã»ããã¢ããããéã®ããŸããŸãªæ©èœãæ åœãããã©ã°ã€ã³ãå«ãŸããŠããŸããCNIãã©ã°ã€ã³ã¯ãä»æ§ã«æºæ ããå®è¡å¯èœãã¡ã€ã«ã§ãïŒä»¥äžã§ããã€ãã®ãã©ã°ã€ã³ã«ã€ããŠèª¬æããŸãïŒã
ãããã«IPã¢ãã¬ã¹ãå²ãåœãŠãããã®ãµããããåãã¹ã
ã¯ã©ã¹ã¿å ã®åãããã«ã¯IPã¢ãã¬ã¹ãå¿ èŠã§ããããããã®ã¢ãã¬ã¹ãäžæã§ããããšã確èªããããšãéèŠã§ãããããè¡ãã«ã¯ãåãã¹ãã«äžæã®ãµãããããå²ãåœãŠãããããIPã¢ãã¬ã¹ããã®ãã¹ãã®ãããã«å²ãåœãŠãŸãã
ãã¹ãIPAMã³ã³ãããŒã©ãŒ
å Žå
nodeipam
ã®ãã©ã¡ãŒã¿ãšããŠæž¡ã--controllers
KUBEã³ã³ãããŒã©ãããŒãžã£ãã©ã°ã¯ãCIDRã¯ã©ã¹ã¿ïŒã¯ã©ã¹ã¿ãããã¯ãŒã¯ã®ããã®IPã¢ãã¬ã¹ãããªãã¡ç¯å²ïŒããåããŒãã®å¥ã®ãµããããïŒpodCIDRïŒãå²ãåœãŠãŸãããããã®podCIDRã¯éè€ããªããããåãããã§äžæã®IPã¢ãã¬ã¹ãå²ãåœãŠãããšãã§ããŸãã
KubernetesããŒãã«ã¯ãæåã«ã¯ã©ã¹ã¿ãŒã«ç»é²ãããšãã«podCIDRãå²ãåœãŠãããŸããããŒãã®podCIDRãå€æŽããã«ã¯ãããŒãã®ç»é²ã解é€ããŠããåç»é²ããå¿ èŠããããŸãããã®éã«ãKubernetesã³ã³ãããŒã«ã¬ã€ã€ãŒã®æ§æã«é©åãªå€æŽãå ããŸãã次ã®ã³ãã³ãã䜿çšããŠãããŒãã®podCIDRã衚瀺ã§ããŸãã
$ kubectl get no <nodeName> -o json | jq '.spec.podCIDR'
10.244.0.0/24
Kubeletãã³ã³ããã©ã³ãã£ãŒãCNIãã©ã°ã€ã³ïŒãã¹ãŠã®ä»çµã¿
ããŒãããšã«ããããã¹ã±ãžã¥ãŒã«ããã«ã¯ãå€ãã®æºåæé ãå¿ èŠã§ãããã®ã»ã¯ã·ã§ã³ã§ã¯ãããããããã¯ãŒãã³ã°ã«çŽæ¥é¢é£ãããã®ã«ã®ã¿çŠç¹ãåœãŠãŸãã
ããããããŒãã«ã¹ã±ãžã¥ãŒã«ãããšã次ã®äžé£ã®ã€ãã³ããããªã¬ãŒãããŸãã
ãã«ãïŒã³ã³ããåãããCRIãã©ã°ã€ã³ã¢ãŒããã¯ãã£ã
ã©ã³ã¿ã€ã ã³ã³ãããšCNIãã©ã°ã€ã³éã®çžäºäœçš
åãããã¯ãŒã¯ãããã€ããŒã«ã¯ãç¬èªã®CNIãã©ã°ã€ã³ããããŸããã³ã³ããã©ã³ã¿ã€ã ã¯ãããèµ·åããŠãèµ·åæã«ãããã®ãããã¯ãŒã¯ãæ§æããŸãã containerdã®å ŽåãContainerdCRIãã©ã°ã€ã³ã¯CNIãã©ã°ã€ã³ã®èµ·åãæ åœããŸãã
ããã«ãåãããã€ããŒã«ã¯ç¬èªã®ãšãŒãžã§ã³ãããããŸãããã¹ãŠã®KubernetesããŒãã«ã€ã³ã¹ããŒã«ããããããã®ãããã¯ãŒã¯åãæ åœããŸãããã®ãšãŒãžã§ã³ãã¯ãCNIæ§æã«ä»å±ããŠããããããŒãäžã§ç¬èªã«äœæããŸãããã®æ§æã¯ãCRIãã©ã°ã€ã³ãåŒã³åºãCNIãã©ã°ã€ã³ã決å®ããã®ã«åœ¹ç«ã¡ãŸãã
CNIæ§æã®å Žæã¯ã«ã¹ã¿ãã€ãºã§ããŸããããã©ã«ãã§ã¯ãã«ãããŸã
/etc/cni/net.d/<config-file>
ãã¯ã©ã¹ã¿ãŒç®¡çè
ã¯ãåã¯ã©ã¹ã¿ãŒããŒãã«CNIãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ãã責任ããããŸãããããã®å Žæãã«ã¹ã¿ãã€ãºå¯èœã§ããããã©ã«ãã®ãã£ã¬ã¯ããªã¯/opt/cni/bin
ã§ãã
containerdã䜿çšããå Žåãæ§æãã€ããªãšãã©ã°ã€ã³ãã€ããªã®ãã¹
[plugins.«io.containerd.grpc.v1.cri».cni]
ã¯ãcontainerdæ§æãã¡ã€ã«ã®ã»ã¯ã·ã§ã³ã§èšå®ã§ããŸãã
ãããã¯ãŒã¯ãããã€ããŒãšããŠFlannelã䜿çšããŠããã®ã§ãã»ããã¢ããã«ã€ããŠå°ã話ããŸãããã
- FlanneldïŒFlannelã®ããŒã¢ã³ïŒã¯éåžž
install-cni
ãinitã³ã³ãããŒãæã€DaemonSetãšããŠã¯ã©ã¹ã¿ãŒã«ã€ã³ã¹ããŒã«ãããŸãã Install-cni
åããŒãã«CNIïŒ/etc/cni/net.d/10-flannel.conflist
ïŒæ§æãã¡ã€ã«ãäœæããŸãã- Flanneldã¯vxlanããã€ã¹ãäœæããAPIãµãŒããŒãããããã¯ãŒã¯ã¡ã¿ããŒã¿ããã§ãããããããã®æŽæ°ãç£èŠããŸããããããäœæããããšãã¯ã©ã¹ã¿ãŒå šäœã«ãã¹ãŠã®ãããã®ã«ãŒããäŒæãããŸãã
- ãããã®ã«ãŒãã«ããããããã¯IPã¢ãã¬ã¹ã䜿çšããŠçžäºã«éä¿¡ã§ããŸãã
Flannelã®åäœã®è©³çŽ°ã«ã€ããŠã¯ãèšäºã®æåŸã«ãããªã³ã¯ã䜿çšããããšããå§ãããŸãã
Containerd CRIãã©ã°ã€ã³ãšCNIãã©ã°ã€ã³éã®çžäºäœçšã®å³ã次ã«ç€ºããŸãã
äžèšã®ããã«ãkubeletã¯Containerd CRIãã©ã°ã€ã³ãåŒã³åºããŠããããäœæããCNIãã©ã°ã€ã³ãåŒã³åºããŠããããããã¯ãŒã¯ãæ§æããŸããããããããšã§ããããã¯ãŒã¯ãããã€ããŒã®CNIãã©ã°ã€ã³ã¯ãä»ã®åºæ¬çãªCNIãã©ã°ã€ã³ãåŒã³åºããŠããããã¯ãŒã¯ã®ããŸããŸãªåŽé¢ãæ§æããŸãã
CNIãã©ã°ã€ã³éã®çžäºäœçš
ãã¹ãäžã®ã³ã³ããéã®ãããã¯ãŒã¯ã®èšå®ãæ¯æŽããããã«èšèšãããããŸããŸãªCNIãã©ã°ã€ã³ããããŸãããã®èšäºã§ã¯ããã®ãã¡ã®3ã€ã«çŠç¹ãåœãŠãŸãã
ãã©ã³ãã«CNIãã©ã°ã€ã³
Flannelããããã¯ãŒã¯ãããã€ããŒãšããŠäœ¿çšããå ŽåãContainerd CRIã³ã³ããŒãã³ãã¯ãCNIæ§æãã¡ã€ã«ã䜿çšããŠFlannelCNIãã©ã°ã€ã³ãåŒã³åºããŸã
/etc/cni/net.d/10-flannel.conflist
ã
$ cat /etc/cni/net.d/10-flannel.conflist
{
"name": "cni0",
"plugins": [
{
"type": "flannel",
"delegate": {
"ipMasq": false,
"hairpinMode": true,
"isDefaultGateway": true
}
}
]
}
Flannel CNIãã©ã°ã€ã³ã¯ãFlanneldãšé£æºããŠæ©èœããŸããèµ·åæã«ãFlanneldã¯podCIDRããã³ãã®ä»ã®ãããã¯ãŒã¯é¢é£ã®è©³çŽ°ãAPIãµãŒããŒããæœåºãããã¡ã€ã«ã«ä¿åããŸã
/run/flannel/subnet.env
ã
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=false
Flannel CNIãã©ã°ã€ã³ã¯ãããã®ããŒã¿ã䜿çšããŠ
/run/flannel/subnet.env
ãããªããžCNIãã©ã°ã€ã³ãæ§æããã³åŒã³åºããŸãã
CNIãã©ã°ã€ã³ããªããž
ãã®ãã©ã°ã€ã³ã¯ã次ã®æ§æã§åŒã³åºãããŸãã
{
"name": "cni0",
"type": "bridge",
"mtu": 1450,
"ipMasq": false,
"isGateway": true,
"ipam": {
"type": "host-local",
"subnet": "10.244.0.0/24"
}
}
æåã®åŒã³åºãã§
«name»: «cni0»
ãæ§æã«ç€ºãããŠããã§LinuxããªããžãäœæããŸãã次ã«ããããããšã«vethãã¢ãäœæãããŸããäžæ¹ã®ç«¯ã¯ã³ã³ããã®ãããã¯ãŒã¯åå空éã«æ¥ç¶ããããäžæ¹ã®ç«¯ã¯ãã¹ãã®ãããã¯ãŒã¯äžã®Linuxããªããžã«å
¥ããŸããCNI Bridgeãã©ã°ã€ã³ã¯ããã¹ãŠã®ãã¹ãã³ã³ããããã¹ããããã¯ãŒã¯äžã®Linuxããªããžã«æ¥ç¶ããŸãã
vethãã¢ã®æ§æãå®äºãããšãBridgeãã©ã°ã€ã³ã¯ãã¹ãããŒã«ã«CNIIPAMãã©ã°ã€ã³ãåŒã³åºããŸããIPAMãã©ã°ã€ã³ã¿ã€ãã¯ãCRIãã©ã°ã€ã³ãFlannelCNIãã©ã°ã€ã³ãåŒã³åºãããã«äœ¿çšããCNIæ§æã§æ§æã§ããŸãã
ãã¹ãããŒã«ã«IPAMCNIãã©ã°ã€ã³
Bridge CNIã¯ã次ã®æ§æã§ãã¹ãããŒã«ã«IPAMCNIãã©ã°ã€ã³ãåŒã³åºããŸãã
{
"name": "cni0",
"ipam": {
"type": "host-local",
"subnet": "10.244.0.0/24",
"dataDir": "/var/lib/cni/networks"
}
}
ãã¹ãããŒã«ã«IPAMãã©ã°ïŒIP A ddress M anagement - IPã¢ãã¬ã¹ç®¡çïŒã»ã¯ã·ã§ã³ã§æå®ããããã£ã¬ã¯ããªå ã®ãã¹ãã³ã³ããã«æ ŒçŽéžæããIPã®ãµããããã®IPã¢ãã¬ã¹ãè¿ããŸã
dataDir
- /var/lib/cni/networks/<network-name=cni0>/<ip>
ããã®ãã¡ã€ã«ã«ã¯ããã®IPã¢ãã¬ã¹ãå²ãåœãŠãããŠããã³ã³ãããŒã®IDãå«ãŸããŠããŸãã
ãã¹ãããŒã«ã«IPAMãã©ã°ã€ã³ãåŒã³åºããããšã次ã®ããŒã¿ãè¿ãããŸãã
{
"ip4": {
"ip": "10.244.4.2",
"gateway": "10.244.4.3"
},
"dns": {}
}
æŠèŠ
Kube-controller-managerã¯ãpodCIDRãåããŒãã«å²ãåœãŠãŸããåããŒãã®ãããã¯ãå²ãåœãŠãããpodCIDRç¯å²ã®ã¢ãã¬ã¹ã¹ããŒã¹ããIPã¢ãã¬ã¹ãååŸããŸããããŒãã®podCIDRã¯éè€ããªãããããã¹ãŠã®ãããã¯äžæã®IPã¢ãã¬ã¹ãåãåããŸãã
Kubernetesã¯ã©ã¹ã¿ãŒç®¡çè ã¯ãkubeletãã³ã³ãããŒã©ã³ãã£ãŒããããã¯ãŒã¯ãããã€ããŒãšãŒãžã§ã³ããæ§æããã³ã€ã³ã¹ããŒã«ããCNIãã©ã°ã€ã³ãåããŒãã«ã³ããŒããŸããèµ·åæã«ããããã¯ãŒã¯ãããã€ããŒã®ãšãŒãžã§ã³ããCNIæ§æãçæããŸããããããããŒãã«å¯ŸããŠã¹ã±ãžã¥ãŒã«ããããšãkubeletã¯CRIãã©ã°ã€ã³ãåŒã³åºããŠããŒããäœæããŸããããã«ãcontainerdã䜿çšãããŠããå ŽåãContainerd CRIãã©ã°ã€ã³ã¯ãCNIæ§æã§æå®ãããCNIãã©ã°ã€ã³ãåŒã³åºããŠãããããããã¯ãŒã¯ãæ§æããŸããããã«ããããããã«IPã¢ãã¬ã¹ãäžããããŸãã
ããããã¹ãŠã®çžäºäœçšã®ãã¹ãŠã®åŸ®åŠãªãã¥ã¢ã³ã¹ãç解ããã®ã«å°ãæéãããããŸãããåŸãããçµéšããKubernetesã®ä»çµã¿ãããããç解ããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸããç§ãäœãã«ã€ããŠééã£ãŠããå Žåã¯ãTwitterãŸãã¯hello@ronaknathani.comã§ç§ã«é£çµ¡ããŠãã ããããã®èšäºããã®ä»ã®åŽé¢ã«ã€ããŠè©±ãåãããå Žåã¯ããæ°è»œã«ãåãåãããã ãããåãã§ã話ãããŠããã ããŸãïŒ
ãªã³ã¯
ã³ã³ãããšãããã¯ãŒã¯
- ã³ã³ãããããã¯ãŒã¯ã®æŠèŠ
- ã³ã³ãããããã¯ãŒãã³ã°ã®è¬ã解ãæãã
ãã©ã³ãã«ã®ããã¿
- ãã©ã³ãã«ãããã¯ãŒãã³ã°ã®è¬ã解ãæãã
- ãã©ã³ãã«ãšKubernetes-ãããã¯ãŒãã³ã°ãç解ãã
CRIãšCNI
翻蚳è ããã®PS
ç§ãã¡ã®ããã°ãèªãã§ãã ããïŒ