背景
在目前云原生技术被如火如荼的大规模使用的过程中。越来越多的用户都会使用Kubernetes集群去部署其应用。但是在这个过程中,如果由于早期对于容量和网络的规划不当,可能造成实际生产中实践中,不能满足业务的真实需要。如果此时在重新规划就面临着集群重建、应用迁移的诸多事项,这样不仅仅浪费了大量的精力,甚至可能会造成业务有一定的中断。因此,为了使得广大使用者可以更加深入的理解阿里云容器服务Kubernetes集群容量和网络规划,本文章会详细介绍相关概念以及如何进行规划。
概念
集群容量
这所指的集群容量,指的一个Kubernetes集群最多能容纳的节点总数。
VPC网段
为了可以顺利的在容器服务中创建VPC的容器集群,首先我们需要根据实际的情况规划网络。创建VPC网络的时候,您必须指定对应的CIDR来划分对应的子网,如果想了解更多的关于CIDR的信息,参见RFC4632了解更多关于 CIDR 的信息.
每个专有网络只能指定 1 个网段,网段范围如下,其中 172.16.0.0/12 是默认专有网络使用的网段。
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
容器Pod网段
在创建容器服务Kubernetes集群的时候,需要用户指定对应的Pod网段,目前容器服务支持的容器网段如下:
- 192.168.0.0/24
- 172.[16-31].1.0/16
- 10.0.0.0/8
Flannel
使用的是简单稳定的社区的Flannel CNI 插件,配合阿里云的VPC的高速网络,能给集群高性能和稳定的容器网络体验,但功能偏简单,支持的特性少,例如:不支持基于Kubernetes标准的Network Policy。
Terway
Terway是阿里云容器服务自研的网络插件,将阿里云的弹性网卡分配给容器,支持基于Kubernetes标准的NetworkPolicy来定义容器间的访问策略,支持对单个容器做带宽的限流。对于不需要使用Network Policy的用户,可以选择Flannel,其他情况建议选择Terway。
规划
接下来,我们就按Flannel和Terway两种类型就行相应的规划说明。
Flannel
在使用Flannel网络的场景下,集群的规模以及网络规划相对比较简单一些,主要受限于集群所在的VPC网段、pod网络以及每台节点可以最多部署的Pod数量。
集群规模的计算公式为:2 ^ (节点pod数量对应的掩码 - Pod网段掩码 ) 。例如 我们的Pod网段为 172.16.0.0/16,每台节点的Pod数为128(对应的掩码是25), 那么该集群的规模 = 2 ^ (25-16) = 512 ,也就是说该集群最多能容纳512个节点。
当然,这个集群的规模还受限于集群所使用的VPC网段所能容纳的节点数。一般来说这个问题不大,我们假设一个比较极端的场景,例如我们的VPC网段是 192.168.0.0/16 ,则该VPC最多能容纳的主机数是 2^16 , 此时假设我们设置的Pod网段是 10.0.0.0/8 ,每台节点的Pod 数为 128 (对应的掩码是 25),那么该集群的规则为 2 ^ (25 - 8) = 2^17 。由此我们可以看到集群最多能容纳的节点数已经超过了VPC网络最多能容纳的主机数。
另外由于Flannel网络场景下,为了保证每个Pod可以互联互通,在VPC的路由表里添加了节点对应网段的路由,由于VPC路由表的默认路由条目是48条,因此一旦集群的规模多于48个节点,建议提工单申请VPC路由表上限。
总上所述,在使用Flannel的场景下,需要从VPC网段、Pod网段以及节点能容纳的Pod数总和考量,来规划整体的集群容量以及Pod网段。
Terway
对于使用Terway网络而言,由于涉及到独占和共享两种方式,而且还涉及到所使用的ECS实例的规格,由于不同的实例规则可以容纳的ENI数量是有限的。
以下示例是一个实例规格的属性
{
"CpuCoreCount": 32,
"InstanceTypeFamily": "ecs.mn4",
"InstanceBandwidthRx": 5120000,
"InstancePpsRx": 500000,
"InstancePpsTx": 500000,
"EniQuantity": 8, //弹性网卡数量
"InstanceTypeId": "ecs.mn4.8xlarge",
"GPUSpec": "",
"InstanceBandwidthTx": 5120000,
"InstanceFamilyLevel": "EntryLevel",
"MemorySize": 128,
"GPUAmount": 0,
"LocalStorageCategory": "",
"EniPrivateIpAddressQuantity": 4 //每张弹性网络最多可以虚拟多少IP
}
从以上,我们可以看出,如果是独占模式,由于每个Pod会使用一张独立的弹性网卡,因此该规格的机器最多能容纳8个Pod;反之,如果是共享模式,由于每张网卡可以虚拟4个IP,因此该规则的机器最多可以容纳 8 *4 = 32 个Pod。
当使用Terway的时候,我们需要指定一个Terway的交换机作为容器的网段,此时集群内能容纳的主机数,会有该交换机的网段以及节点的类型等决定。例如我们的Pod交换机网段是 172.16.1.0/24, 意味着该交换机内做多能容纳 256个IP,如果我们集群内的节点都使用如上所示的实例规则,如果在独占模式下,该集群最多能容纳的节点数为 256/8 = 64 台;反之如果在共享模式下,该集群最多能容纳的节点数为 256/32 = 8 台。
综上所述,在选择Terway网络的场景下,Pod网段的交换机选择很重要,在规划之前可以根据实例上容难的弹性网卡数量等做一个比较合理的计算和规划。
总结
其实对于Kubernetes集群网络规划并没有想象的那么复杂,只要弄明白每种网络组件之间的差异,以及和集群规模、VPC网络、路由等之间的关系,结合业务情况科学、合理的规划容量和网络,会起到事半功倍的效果。