kubernetes如何为节点分配podCIDR ?



我目前正在学习Kubernetes网络。

到目前为止,我所得到的是,我们有CNI插件,它负责处理pod的网络连接——当创建pod时,它们在网络命名空间内创建网络接口,它们为pod设置路由,等等。所以基本上kubernetes将一些网络相关的任务委托给CNI插件。

但是我认为kubernetes可以自己完成部分网络任务。例如,kubernetes为每个节点分配一个podCIDR

例如,我使用kubeadm设置了一个kubernetes集群,命令如下:
kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version=1.24.0

然后当我查看节点时,我看到每个节点都收到了自己的podCIDR范围,例如:

spec:
podCIDR: 192.168.2.0/24
podCIDRs:
- 192.168.2.0/24

我的问题是:kubernetes如何计算节点的CIDR范围?是否总是为每个节点分配一个/24子网?

当您为集群配置每个节点的最大pod数时,Kubernetes使用该值为节点分配CIDR范围。根据集群的pod从IP地址范围和节点分配的CIDR范围,可以计算集群的最大节点数。

Kubernetes为每个节点分配一个IP地址范围,一个CIDR块,这样每个Pod可以有一个唯一的IP地址。CIDR块大小对应每个节点的最大pod数

另请参考类似的SO &CIDR范围查看更多信息

kubernetes如何计算节点的CIDR范围?

使用CIDRAllocator。有多种类型,参见:https://github.com/kubernetes/kubernetes/blob/16534deedf1e3f7301b20041fafe15ff7f178904/pkg/controller/nodeipam/ipam/cidr_allocator.go#L39-L58

例如,RangeAllocator使用CidrSet.AllocateNext()方法计算下一个空闲CIDR范围。见:https://github.com/kubernetes/kubernetes/blob/16534deedf1e3f7301b20041fafe15ff7f178904/pkg/controller/nodeipam/ipam/range_allocator.go L274

是否总是为每个节点分配一个/24子网?

这取决于你的配置。这可以通过kube-controller-manager的命令行参数配置:

--node-cidr-mask-size int32
Mask size for node cidr in cluster. Default is 24 for IPv4 and 64 for IPv6.
--node-cidr-mask-size-ipv4 int32
Mask size for IPv4 node cidr in dual-stack cluster. Default is 24.
--node-cidr-mask-size-ipv6 int32
Mask size for IPv6 node cidr in dual-stack cluster. Default is 64.

看到https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/选项。

相关内容

  • 没有找到相关文章

最新更新