·Kubernetes 版本
·容器网络插件:GlobalRouter、VPC-CNI 及 Cilium-Overlay
·运行时组件:Containerd 及 Docker
·Service 转发模式:iptables 及 ipvs
·集群类型:托管集群及独立集群
·节点操作系统
·使用节点池
·使用启动脚本
一、Kubernetes 版本
Kubernetes 版本迭代较快,新版本通常包含许多 bug 修复和新功能,而旧版本会逐渐淘汰。建议你在创建集群时,选择当前 TKE 支持的最新版本。后续可通过升级已有 Master 和节点版本,更换迭代产生的新版本。
三、网络模式架构
TKE 支持网络模式架构,如需了解更多信息,请参见 如何选择容器服务网络模式。
五、运行时架构
TKE 支持以下两种运行时架构:Containerd 和 Docker。由于 Kubernetes 1.24 版本已停止对 Docker 的支持,推荐优先选择 Containerd。更多信息请参见 如何选择 Containerd 和 Docker。
六、Containerd 作为运行时架构
架构图如下:
·自 Containerd 1.1 之后,支持了 CRI Plugin,即 containerd 自身即可适配 CRI 接口。
·相比 Docker 方案,调用链少了 dockershim 和 dockerd。
七、Docker 作为运行时架构
架构图如下:
调用链如下:
1. Kubelet 内置的 dockershim 模块帮助 docker 适配了 CRI 接口。
2. Kubelet 通过 socket 文件自行调用 dockershim。
3. Dockershim 调用 dockerd 接口(Docker HTTP API)。
4. Dockerd 调用 docker-containerd(gRPC)来实现容器的创建与销毁等。
调用链过长原因分析:
Kubernetes 起初仅支持 Docker,后来引入了 CRI,并将运行时抽象化以支持多种运行时。Docker 与 Kubernetes 存在竞争关系,未在 dockerd 中实现 CRI 接口,故 Kubernetes 需自行在 dockerd 中实现 CRI。Docker 本身内部组件模块化及 CRI 适配。
八、选型建议
·Containerd 调用链更短,组件更少,更稳定,占用节点资源更少。建议选择 Containerd。
·当你遇到以下情况时,请选择 Docker 作为运行时组件:
·如需使用 Docker in Docker。
·如需在 TKE 节点使用 docker build/push/save/load 等命令。
·如需调用 Docker API。
·如需使用 Docker Compose 或 Docker Swarm。
九、Service 转发模式:iptables 及 ipvs
Service 转发原理图如下所示:
1. 节点上的 kube-proxy 组件 watch apiserver,获取 Service 与 Endpoint,根据转发模式将其转化成 iptables 或 ipvs 规则并写到节点上。
2. 集群内的 client 访问 Service(Cluster IP),会被 iptables 或 ipvs 规则负载均衡到 Service 对应的后端 pod。
十、转发模式对比
·ipvs 模式性能更高,但存在一些已知未解决的 bug。
·iptables 模式更成熟稳定。
十一、选型建议
对稳定性要求极高且 Service 数量小于2000时,建议选择 iptables,其余场景建议首选 ipvs。
十二、集群类型:托管集群及独立集群
TKE 支持以下两种集群类型:
·托管集群:
·腾讯云专业团队维护集群 Master&Etcd,你可专注业务部署。
·会率先支持大部分新功能的托管。
·Master 的计算资源会根据集群规模自动扩容。
·用户需要支付集群管理费,定价详情请参见 集群购买指南。
·提供 SLA。
·独立集群(已停止新建):
·用户可完全掌控 Master 组件。
·用户需要支付 Master 机器相关的资源费用。
·不提供 SLA。
十三、选型建议
建议通常情况下选择托管集群,如需完全掌握 Master,例如对 Master 进行个性化定制实现高级功能,则可选择使用独立集群。
十四、节点操作系统
TKE 支持发行版操作系统:Tencent Server、Tencent Linux、Ubuntu、CentOS 和 Red Hat。其中,Tencent Linux 使用腾讯云团队维护的定制内核 TencentOS-kernel,而 Ubuntu 和 CentOS 则使用 Linux 社区的开源内核。推荐你选择 TencentOS 内核系列的公共镜像。
十五、选型建议
建议选择 Tencent Linux 版本的操作系统,该版本操作系统是包含 TencentOS-kernel 内核的腾讯云公共镜像,容器服务 TKE 目前已经支持该镜像并作为缺省选项。
十六、使用节点池
节点池主要用于批量管理节点:
·节点 Label 与 Taint。
·节点组件启动参数。
·节点自定义启动脚本。详情请参见 节点池概述。
十七、适用场景
·异构节点分组管理,减少管理成本。
·使集群更好地支持复杂的调度规则(Label 及 Taint)。
·频繁扩缩容节点,减少操作成本。
·节点日常维护,例如版本升级等。
十八、用法举例
部分 IO 密集型业务需要高 IO 机型,为该业务创建节点池、配置机型并统一设置节点 Label 与 Taint,并配置 IO 密集型业务亲和性。选中 Label,使其调度到高 IO 机型的节点(Taint 可以避免其他业务 Pod 调度上来)。
当业务量快速上升时,该 IO 密集型业务也需要更多的计算资源。在业务高峰时段,HPA 功能自动为该业务扩容了 Pod,而节点计算资源不够用,此时节点池的自动伸缩功能自动扩容了节点,守住了流量高峰。
20、组件自定义参数
·使用自定义 Kubernetes 组件启动参数功能,请通过 在线咨询 进行申请。
·在集群中设置自定义 Kubernetes 组件参数,详情请参见 自定义 Kubernetes 组件启动参数。
21、节点启动配置
你可以在创建集群或新增节点时,或添加已有节点时,设置节点的启动脚本。详情请参见 设置节点的启动脚本。