更新时间:2024-12-04 GMT+08:00

集群选型

当您使用云容器引擎CCE创建Kubernetes集群时,常常会面对多种配置选项以及不同的名词,难以进行选择。本文将从不同的关键配置进行对比并给出选型建议,帮助您创建一个满足业务需求的集群。

集群版本

由于Kubernetes社区版本迭代较快,新版本中通常包含许多Bug修复和新功能,而旧版本会根据时间推移逐渐淘汰。建议您在创建集群时,选择当前CCE支持的最新商用版本。

集群网络模型

云容器引擎支持以下几种网络模型,您可根据实际业务需求进行选择。

集群创建成功后,网络模型不可更改,请谨慎选择。

表1 网络模型对比

对比维度

容器隧道网络

VPC网络

适用场景

  • 一般容器业务场景。
  • 对网络时延、带宽要求不是特别高的场景。
  • 对网络时延、带宽要求高。
  • 容器与虚机IP互通,使用了微服务注册框架,如Dubbo、CSE等。

核心技术

OVS

IPVlan,VPC路由

适用集群

CCE Standard集群

CCE Standard集群

网络隔离

Pod支持Kubernetes原生NetworkPolicy

ELB直通容器

IP地址管理

  • 容器网段单独分配
  • 节点维度划分地址段,动态分配(地址段分配后可动态增加)
  • 容器网段单独分配
  • 节点维度划分地址段,静态分配(节点创建完成后,地址段分配即固定,不可更改)

网络性能

基于vxlan隧道封装,有一定性能损耗。

无隧道封装,跨节点通过VPC 路由器转发,性能好,媲美主机网络。

组网规模

最大可支持2000节点

受限于VPC路由表能力,适合中小规模组网,建议规模为1000节点及以下。

VPC网络模式下,集群每添加一个节点,会在VPC的路由表中添加一条路由,因此集群本身规模受VPC路由表上限限制。

集群网段

集群中网络地址可分为节点网络、容器网络、服务网络三块,在规划网络地址时需要从如下方面考虑:

  • 三个网段不能重叠,否则会导致冲突。且集群所在VPC下所有子网(包括扩展网段子网)不能和容器网段、服务网段冲突。
  • 保证每个网段有足够的IP地址可用
    • 节点网段的IP地址要与集群规模相匹配,否则会因为IP地址不足导致无法创建节点。
    • 容器网段的IP地址要与业务规模相匹配,否则会因为IP地址不足导致无法创建Pod。

如业务需求复杂,如多个集群使用同一VPC、集群跨VPC互联等场景,需要同步规划VPC的数量、子网的数量、容器网段划分和服务网段连通方式,详情请参见集群网络地址段规划实践

服务转发模式

kube-proxy是Kubernetes集群的关键组件,负责Service和其后端容器Pod之间进行负载均衡转发。

CCE当前支持iptables和IPVS两种转发模式,各有优缺点。

  • IPVS:吞吐更高,速度更快的转发模式。适用于集群规模较大或Service数量较多的场景。
  • iptables:社区传统的kube-proxy模式。适用于Service数量较少或客户端会出现大量并发短链接的场景。

对稳定性要求极高且Service数量小于2000时,建议选择iptables,其余场景建议首选IPVS。

节点规格

使用云容器引擎时,集群节点最小规格要求为CPU ≥ 2核且内存 ≥ 4GB,但使用很多小规格ECS并非是最优选择,需要根据业务需求合理评估。使用过多的小规格节点会存在以下弊端:
  • 小规格节点的网络资源的上限较小,可能存在单点瓶颈。
  • 当容器申请的资源较大时,一个小规格节点上无法运行多个容器,节点剩余资源就无法利用,存在资源浪费的情况。
使用大规格节点的优势:
  • 网络带宽上限较大,对于大带宽类的应用,资源利用率高。
  • 多个容器可以运行在同一节点,容器间通信延迟低,减少网络传输。
  • 拉取镜像的效率更高。因为镜像只需要拉取一次就可以被节点上的多个容器使用。而对于小规格的ECS拉取镜像的次数就会增多,在节点弹性伸缩时则需要花费更多的时间,反而达不到立即响应的目的。

另外,还需要根据业务需求选择合适的CPU/内存配比。例如,使用内存较大但CPU较少的容器业务,建议选择CPU/内存配比为1:4的节点,减少资源浪费。

节点容器引擎

CCE当前支持用户选择Containerd和Docker容器引擎,其中Containerd调用链更短,组件更少,更稳定,占用节点资源更少。并且Kubernetes在v1.24版本中移除了Dockershim,并从此不再默认支持Docker容器引擎,详情请参见Kubernetes即将移除Dockershim,CCE v1.27版本中也将不再支持Docker容器引擎。

因此,在一般场景使用时建议选择Containerd容器引擎。但在以下场景中,仅支持使用Docker容器引擎:

  • Docker in Docker(通常在CI场景)。
  • 节点上使用Docker命令。
  • 调用Docker API。

节点操作系统

由于业务容器运行时共享节点的内核及底层调用,为保证兼容性,建议节点的操作系统选择与最终业务容器镜像相同或接近的Linux发行版本。