α αααΆαα ααααααα α’αααααααααααααααααα·ααααα SRE ααααΈ LinkedIn αααααΆαααααα’α·αα’αααΈαααααααααΆααααα»ααα αααα»α Kubernetes - ααΆααααα αααΆααααΆαααααα ααα α’αααααααααααα CRI, CNI αα·α kube-apiserver - αααααΎαα‘αΎααα αααααα pod αααααΆααααααΌαααΆααααααα’αΆααααααΆα IP α
αα½ααααααααΌαααΆαααΌαααααΆα
αα
ααααααα»αα
αΆααααααΎαααααΎααΆαααΆαα½α Kubernetes ααΆααΎαααααΌα ααΆαα·αα
αααΆαααααααΆαααααα»αααΆααΎ pods ααα½αααΆαα’αΆααααααΆα IP αααααα½ααααααΆαααΌα
ααααα
αααααα αααααΈααΆααΆαααΆααααααΉαα’αααΈααααααααααΆαααΆαα»ααΈαα½ααααααΎαααΆαααααα ααΆαα·ααΆααααα»αααΆααααααααΆαα½αααΆααααΎααΆαααΆαα½αααααΆα ααΆα§ααΆα ααα αααα»αααΆαααΉαααΆαααααα·ααΈαααα½α CNI αααααΆααα’αααΈ ααα»αααααααα»ααα·αααΉαααΆααΎαα½αααΆααααΌαααΆαα α
αααΆαααΌα
ααααα
αααααα ααΌα
ααααα αΎα αααα»αααΆααααααα
α
α·ααααααααα’αααααααα ααΎααααΈα
αααααααα
ααααααΉαα’αααΈαααΆαααΆαα»αααααΆααααααα αα·αααααααααα½αααΆααααΎααΆαααΆαα½αααααΆαα
αααα»αα
ααααα Kubernetes αααα’αα»ααααΆαα±ααααααΈαα½ααααα½αααΆαα’αΆααααααΆα IP ααααΆαααααα½αααααααΆα
ααΆααα·ααΈαααααααααΆαααα»αααΆααααα
ααααααΆααα
αααα»α Kubernetes ααΌα
ααΆααΆααααααΎααααααααΎαααΆααααααααααΆαααααΆαααα»αααΊαααα ααΆαααααα»ααααααααΉαααααΎααααΆαα
αααα·αααΆααΌαααααΆααα½αα ααα½α
αα»αααΊααα αα·ααααααΆαα αα·αααααΆααααααα
ααΆαααΆαααααα»αααααααΆαααα’αααΆα αααΎααα ααΎα’ααΈαααΊαα·α αααααααααααΈααααααααα»αααΊαααααΆααααααααΆαα αα·ααα ααααΆααααααΆαα ααΌα ααααα αΎα αααα»αααΉαααααααααα·αααααΆαααΌαα ααααααααα·αααΆααΌαααααΆα α αΎαααΆααααααα·ααααα½ααααα»αα αααααα·ααΈααΆααααααα½α αααααΆαααααααααΉαααΆααααααΎαααααΆαααΈαα»α αα·ααααα αααααα ααα ααααααΆααααα’α·αααααΌαααΆααα»αα αα αααααΆααααααΆααααααααααΆααα»αααΊααααααα½αααΆααααΉαααα½αααΆαα’αααααααΆα ααααα‘αααα½αα αααααααΆαααα ααΆααααΆαααααα»αααααααΆαααααααααααΆααααααΉα αα·αα’αααααα½αα ααα½αααΉαααααΌαααΆααααααααΌαααΆααααααα
αα»ααα ααΎαααΆαααΈααααα½α
αα·ααΈαα½αααΎααααΈαααα
αααααΆααααααααΆααααα’αΆααααααΆα IP αααΆααα»αααΊααααααααααΎαααΆαααΎαααΆαααΈααααα½αααΆαααααααααΉαααΆααααααΎαααααΆαααΈαα»α
α α
αααααααααααααα α§ααααααα·αααα·αααααΌαααΆααααααΎααα
αααα»α Kubernetes (αα·α Docker)
αα»αααΊαααααΆααα’αααα ααΎαααΆαααΈααααα½αααΆαα α»αααααΆααα veth ααααΆαααα ααΉαααααΆαααααα½αααα’αΆα ααααΆααααααααααΆαα αα·ααα ααααΆααααα’αΆααααααΆα IP α ααααΆαααΈαα»α ααααΆαα’αΆααααααΆα IP αα·αααΎααα½ααΆααΈααΆα αααααααΌααααααΆααα ααΆα αα ααααΈαααααααααααααααΆααααααΆααααααααααα
αα»ααα ααΎαααΆαααΈααααααααααΆ
Packet encapsulation ααΊααΆαα·ααΈααΆααααααα½ααααα’αα»ααααΆαα±αααα»αααΊααααα
ααΎααααΆααααααααααααΆααααΆααααααααααΆαα
αα·ααα
αααααααααΎα’αΆααααααΆα IP α αα
Flannel αα
αα
αααα·ααααΆααα½ααα»αααααΌαα
ααααα±ααΆααααα
αα αααα»αα ααααα Kubernetes Flannel αααααΎαα§ααααα vxlan αα·αααααΎαα αα α»ααααααααΆαααΆααΆαααααΌααα ααΎααααΆααααΈαα½ααααααααΆαα αααα ααααΈαα½αααααααααααααααΆαααα»αααΊααααα ααΎαααΆαααΈααααααααααΆααααααΆααα§ααααα vxlan α αΎαααααΌαααΆααα»αααααααααα»ααααα αα UDP α αα βααααα αααα ααβαααβααΆαβαααα»αβααααΌαβααΆαβαααααβα αα αα·αβαααααΌαβααααβαα βααΆααβααβαααβα ααβααΆαα
α
αααΆαα αααααααΆααααααΆαα·ααΈαα½ααααα»αααΆααααα
αααααΆαααααααααααΆααααΆααα»αααΊαααααα»αααααα
ααΎ CRI ααΆα’αααΈ?
ααΎ CNI ααΆα’αααΈ?
ααΆααααα αααααααΆααααα ααααΆαααααααΆαααααααα’αΆααααααΆα IP αα ααΆαααα
αααααΆαααααΈαα½αααα αααα»αα αααααααααΌαααααΆαα’αΆααααααΆα IP ααΆααΆααΆαααααΆααααΆαααααα»αααΆαααΆααΆααΆα’αΆααααααΆααααααΆααααα½αα αααααααΌαααΆααααααα αααααΆααααααα±αα node ααΈαα½ααααΌα subnet αααα½αααα ααα pods αα ααΎ node αααααααΌαααΆααααααα’αΆααααααΆα IP α
α§ααααααααααΆ Node IPAM
αα
ααα nodeipam
ααΆαααααααΆααααΆαααΆαααΆααααααααα --controllers
ααααΆαα Kubernetes ααααΌαααΆαααααα podCIDR αα ααααααααΆααααΌαααΆαα α»ααααααααααΌαααΆαα½αα αααααα ααΎααααΈααααΆααααααΌα podCIDR ααααααΆαα α’αααααααΌααα»αααααααα½αααΆ α αΎααααααΆααααα α»ααααααααΆα‘αΎααα·α αααααααΎααΆαααααΆααααααΌααααααααα ααΉαααΆαααααααα ααΆαααααααααααααΆααααααααααα Kubernetes αα α αααααα α’αααα’αΆα αααα αΆα podCIDR αα node αααααααΎααΆααααααααΆααΆααααααα
$ kubectl get no <nodeName> -o json | jq '.spec.podCIDR'
10.244.0.0/24
Kubelet, container runtime αα·ααααααα·ααΈαααα½α CNIα αααααααααΆααααΎαααΆαααΆααα’ααα
ααΆααααααααΆααα·ααΆα pod αααα»ααα½α node ααΆαααααααααΉαααα αΆααααα αααΆα αααΎαα αα αααα»ααααααααα αααα»αααΉααααααααααΎααααααααααΆαααααααααααΆαααα ααΉαααΆαααα‘αΎααααααΆα pod ααα»αααααα
ααΆαβαααααβαααβααααΆβαα½αβαα βααααΆααβααΆααααΆααβαα½αβααααβα±ααβααΆαβαααααΆααβααβααααΉαααα·ααΆαααβααΌα βααΆαβαααααα
αααα½α:
α’αααααααααααΆααα»αααΊαααααααΎαααΆα αα·ααααααα·ααΈαααα½α CNI
α’αααααααααααααΆαααΈαα½ααααΆααααααα·ααΈαααα½α CNI ααααΆαααααα½αα ααααααααααΎαααΆααααααα»αααΊαααααααΎαααΆαααΆααΎααααΈααααααα
ααΆαααααααααααααΆααααααΆαααααα
αααααΆα
αΆααααααΎαα αααα»αααααΈαα»αααΊααα αααααα·ααΈαααα½α CNI ααααΌαααΆαααΎαααααΎαααΆαααααααααα·ααΈαααα½α
ααΎαααΈααααα ααα α’ααααααααααααΆααΈαα½ααααΆαααααΆααααΆαααααΆαααααα½αα ααΆααααΌαααΆαααα‘αΎααα ααΎααααΆαα Kubernetes ααΆααα’αα α αΎαααα½ααα»αααααΌαα ααααααΆαααααααα ααΆαααααααααααααΆαααααααα ααααΆααααΆααααααααΌαααΆααα½ααααα αΌαααΆαα½αααΆαααααααα ααΆαααααααα CNI α¬αααααΎαααΆαααα―αααΆααααα ααΎααααΆααα ααΆαααααααα ααΆαααααααααα½ααααααα·ααΈαααα½α CRI ααααααααααα·ααΈαααα½α CNI αααααααΌαα α α
ααΈααΆααααααΆαααααααα
ααΆαααααααα CNI α’αΆα
ααααΌαααΆαααααΌαααΆαααααα ααΆαααααΆαααΎαααΆαααα·ααα
αααα»α /etc/cni/net.d/<config-file>
. α’ααααααααααααα
αααααααααα½ααα»αααααΌααααα»αααΆαααα‘αΎααααααα·ααΈαααα½α CNI αα
ααΎααααΆααα
αααααααΈαα½αααααααα ααΈααΆαααααααα½αααααα’αΆα
ααααΌαααΆαααααααΆααααααα ααβααααΆαααΎα - /opt/cni/bin
.
αα
αααααααΎαα»αααΊααα ααααΌααααααΆααααΆαααααααα
ααΆαααααααααααααα·ααΈαααα½α αα·ααααααααααααααΈαα’αΆα
ααααΌαααΆαααααααα
αααα»αααααα [plugins.Β«io.containerd.grpc.v1.criΒ».cni]
Π²
αααααΆαααΎααααα»αααααΎ Flannel ααΆα’αααααααααααααΆαααααααΎα ααΌααα·ααΆαααααα·α α’αααΈααΆαααα‘αΎαααΆα
- Flanneld (αααα·ααααα Flannel) ααΆααααααΆααααΌαααΆαααα‘αΎααα
αααα»αα
αααααααΆ DaemonSet ααΆαα½α
install-cni
asαα»αααΊααα . Install-cni
αααααΎαα―αααΆαααααααα ααΆαααααααα CNI (/etc/cni/net.d/10-flannel.conflist
) αα ααΎααααΆααααΈαα½ααα- Flanneld αααααΎαα§ααααα vxlan ααΆααααα·ααααααααααΆαααααΆαααΈαααΆαααΈααα API αα·αααΆαααΆαααΆαα’αΆαααααααα ααΌα ααααα½αααΆααααΌαααΆααααααΎα ααΆα ααα αΆαααααΌααα ααΆααααααΆααα’αααα ααΌααΆααα αααααα
- ααααΌαααΆαααααα’αα»ααααΆαα±αα pods ααΆααααααααΆαα αα·ααα ααααΆααααα’αΆααααααΆα IP α
αααααΆααααααααΆααααα’α·αααααααα’αααΈααΆαααΆααααα Flannel αααα»αααΌαααααΆαα±ααααααΎαααααααΆαααα α α»ααααα ααααα’αααααα
αααααΊααΆααααΆααααΆαααα’αααααααααααΆααααααα·ααΈαααα½α Containerd CRI αα·ααααααα·ααΈαααα½α CNIα
ααΌα
αααα’αααα’αΆα
ααΎαααΆαααΎ kubelet α α
αααααα·ααΈαααα½α Containerd CRI ααΎααααΈαααααΎα pod ααααααααΆααααα α
αααααα·ααΈαααα½α CNI ααΎααααΈααααααα
ααΆαααααααααααααΆααααα pod α αααα»αααΆαααααΎααΌα
αααα αααααα·ααΈαααα½α CNI ααααα’ααααααααααααΆαααααΆαα α
αααααα·ααΈαααα½α CNI ααααΌαααααααααααΎααααΈααααααα
ααΆαααααααααα·αααααΆααααααααααααααΆαα
α’αααααααααααΆααααααα·ααΈαααα½α CNI
ααΆααααααα·ααΈαααα½α CNI ααΆα αααΎααααααΆαααΆααααααα½αααααΊααΎααααΈαα½ααααα αααααΆαααααααααααΆααααΆααα»αααΊααααα ααΎαααΆαααΈαα α’ααααααααααΉααα·ααΆααααΆααΈαααα»αα αααααα½αααα
αααααα·ααΈαααα½α CNI Flannel
αα
αααααααΎ Flannel ααΆα’αααααααααααααΆα αααΆαααΆα Containerd CRI α α
ααΌααααα /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 ααααΎαααΆααααααααΆααααΆαα½α Flannel α αααα»αα’αα‘α»ααααα
αΆααααααΎα 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Β»
αααααααΌαααΆαα
ααα’α»ααααα αΆααα
αααα»α config α αααααΆααααααΌ veth ααααΌαααΆααααααΎαα‘αΎααααααΆαα pod ααΈαα½ααα α
α»αααααΆαααααααΆααααΌαααΆαααααΆαααα
αααααΆα namespace αααααα»αααΊααα α αΎααα½ααααααααΌαααΆααααα
αΌααααα»αααααΆαααΈαα»α
αα
ααΎαααααΆααααΆαααΈαα
αααααΆααααα ααααΆαααα‘αΎα veth pair αααααα·ααΈαααα½α Bridge α α αααααα·ααΈαααα½α IPAM CNI αααα»ααααα»ααααααααΆαααΈαα αααααααααααα·ααΈαααα½α IPAM α’αΆα ααααΌαααΆαααααααα ααΆαααααααααα αααα»α CNI config ααααααααα·ααΈαααα½α CRI ααααΎααΎααααΈα α αααααα·ααΈαααα½α Flannel CNI α
αααααα·ααΈαααα½α IPAM CNI αααα»ααααα»αααααααα αΆαααααα
ααααΆα CNI α α
{
"name": "cni0",
"ipam": {
"type": "host-local",
"subnet": "10.244.0.0/24",
"dataDir": "/var/lib/cni/networks"
}
}
αααααα·ααΈαααα½α IPAM αααα»ααααα»ααααααααΆαααΈα (IP Address α MααΆαααααααααα - ααΆααααααααααα’αΆααααααΆα IP) αααα‘ααα’αΆααααααΆα IP αααααΆαααα»αααΊαααααΈαααααΆααα α αΎααααααΆαα»α IP αααααΆααααα
αααα
ααΎαααΆαααΈααα
αααα»ααααααααΆααααααΆαααα
αααα»αααααα dataDir
- /var/lib/cni/networks/<network-name=cni0>/<ip>
. α―αααΆααααααΆαααααααααΆαααα»αααΊααααααα’αΆααααααΆα IP αααααααΌαααΆαα
αΆααααΆααα
αα αααα α αααααα·ααΈαααα½α IPAM αααα»ααααα»αααααααα αΆαααααα ααΆαααα‘αααα·ααααααααΆααααααα
{
"ip4": {
"ip": "10.244.4.2",
"gateway": "10.244.4.3"
},
"dns": {}
}
αααααα
Kube-controller-manager ααααα podCIDR αααααααΆααααΈαα½ααα ααααααααααααΆααααΈαα½ααααα½αααΆαα’αΆααααααΆα IP ααΈα αααααα’αΆααααααΆααα αααα»ααα½α podCIDR αααααΆααααα ααα αααααΆα podCIDR ααααααααΆαααα·ααααα½αααΎααααΆ ααααΆααα’ααααα½αααΆαα’αΆααααααΆα IP αααα½ααααα
α’ααααααααααααα ααααα Kubernetes ααααααα ααΆαααααααα αα·αααα‘αΎα kubelet ααααααααααΎαααΆααα»αααΊααα ααααΆααααΆαααααααααααΆα αα·αα αααααααααα·ααΈαααα½α CNI αα ααααΆααααΈαα½ααα ααα‘α»ααααα αΆααααααΎα ααααΆααααΆααααααααααΆαααααΆααααααΎαααΆαααααααα ααΆαααααααα CNI α αα ααααααααααααΌαααΆααααααααααα ααααΆαα kubelet α α αααααα·ααΈαααα½α CRI ααΎααααΈαααααΎαααΆα αααααΆαααα ααααα·αααΎαα»αααΊαααααααΌαααΆαααααΎααααΆαα αααααα·ααΈαααα½α Containerd CRI α α αααααα·ααΈαααα½α CNI αααααΆααααααΆαααα αααα»α CNI config ααΎααααΈααααααα ααΆαααααααααααααΆααααα pod α ααΆαααααα pod ααα½αααΆαα’αΆααααααΆα IP α
αααα»αααΆαα
αααΆααααααααααΎααααΈαααααΈ subtleties αα·α nuances ααα’ααααααααααΆααα’αααααα αααα»ααααααΉαααΆαααα·ααααααααααΉααα½αα’αααα±αααααααΆααααα
αααΆααα’αααΈααααααα Kubernetes ααααΎαααΆαα ααΎαααα»ααα»ααααααααΆ ααΌαααΆαααααααααα»α
ααα ααααΈααα
αα»ααα·ααααααΆα
αα·αααααΆαααΌαα αααααααΆααα»αααΊααα Demystifying αααααΆααα»αααΊααα
ααΎ Flannel ααααΎαααΆααααΆαααΌα ααααα ?
αααααΆα Flannel Demystify Kubernetes ααΆαα½α Flannel - ααΆααααααΉαα’αααΈαααααΆα
CRI αα·α CNI
ααααΆαααααααααααααα·ααΈαααα½α CRI ααααααβαα·ααα CNI αααααα·ααΈαααα½α CNI
PS ααΈα’ααααααααα
ααΌαα’αΆαααααααα ααΎαααααααααααΎαα
- Β«
Calico αααααΆαααααααΆααα αααα»α Kubernetesα ααΆαααααΆα αα·ααααα·ααααααα·α αα½α Β» - "ααααα»αααααααααααΌαααΎαααααΆααα
αααα»α Kubernetes"α
αααααααΈ 1 αα·αααΈ 2 (ααααΌαααααΆα αααααΆααααα½αααΎααααΆ) ,αααααααΈ 3 (ααααΆαααα αα·αααααΎαααΆαα ααΆα ααα) ; - Β«
α ααα»α αααααΆαααααααΆααα»αααΊααα (CNI) - α ααα»α αααααΆαααααααΆααα·ααααααααΆααααααΆαααα»αααΈαα»α "α
ααααα: www.habr.com