有奖捉虫:行业应用 & 管理与支持文档专题 HOT
当您使用腾讯云容器服务 TKE 组建 Kubernetes 集群时,会面对多种配置选项,难以进行选择。本文介绍以下功能选型,进行对比并给出选型建议。您可参考本文,选择更适用于您业务的配置选型。

Kubernetes 版本

Kubernetes 版本迭代较快,新版本通常包含许多 bug 修复和新功能,而旧版本会逐渐淘汰。建议您在创建集群时,选择当前 TKE 支持的最新版本。后续可通过升级已有 Master 和节点版本,更换迭代产生的新版本。

容器网络插件:GlobalRouter 及 VPC-CNI

网络模式架构

TKE 支持网络模式架构,如需了解更多信息,请参见 如何选择容器服务网络模式

运行时组件: Docker 及 Containerd(beta)

运行时架构

TKE 支持以下两种运行时架构,如需了解更多信息,请参见 如何选择 Containerd 和 Docker
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(beta) 作为运行时架构
?
?
Containerd 1.1 之后支持了 CRI Plugin,即 containerd 自身即可适配 CRI 接口。
相比 Docker 方案,调用链少了 dockershim 和 dockerd。

选型建议

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),会被 iptable 或 ipvs 规则负载均衡到 Service 对应的后端 pod。

转发模式对比

ipvs 模式性能更高,但存在一些已知未解决的 bug。
iptables 模式更成熟稳定。

选型建议

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

集群类型:托管集群及独立集群

TKE 支持以下两种集群类型:
托管集群
腾讯云专业团队维护集群 master&etcd,您可专注业务部署。
会率先支持大部分新功能的托管。
Master 的计算资源会根据集群规模自动扩容。
用户需要支付集群管理费,定价详情请参见 集群购买指南
提供 SLA。
独立集群(不推荐)
用户可完全掌控 Master 组件。
用户需要支付 Master 机器相关的资源费用。
不提供 SLA。

选型建议

建议通常情况下选择托管集群,如需完全掌握 Master,例如对 Master 进行个性化定制实现高级功能,则可选择使用独立集群。

节点操作系统

TKE 支持 Tencent Linux、Ubuntu 和 CentOS 三类发行版操作系统,其中 Tencent Linux 版本的操作系统使用了腾讯云团队维护定制内核 TencentOS-kernel,其余的操作系统使用了 Linux 社区官方开源内核。如下图所示:
?
?
?
说明:
在 Tencent Linux 公共镜像上线之前,为了提升镜像稳定性,并提供更多特性,容器服务 TKE 团队制作并维护 TKE-Optimized 系列镜像。目前控制台已不支持新建集群选择 TKE-Optimized 镜像,更多相关详情请参见 TKE-Optimized 系列镜像说明

选型建议

建议选择 Tencent Linux 版本的操作系统,该版本操作系统是包含 TencentOS-kernel 内核的腾讯云公共镜像,容器服务 TKE 目前已经支持该镜像并作为缺省选项。

使用节点池

节点池主要用于批量管理节点:
节点 Label 与 Taint。
节点组件启动参数。
节点自定义启动脚本。详情请参见 节点池概述

适用场景

异构节点分组管理,减少管理成本。
使集群更好的支持复杂的调度规则(Label 及 Taint)。
频繁扩缩容节点,减少操作成本。
节点日常维护,例如版本升级等。

用法举例

部分 IO 密集型业务需要高 IO 机型,为该业务创建节点池、配置机型并统一设置节点 Label 与 Taint,并配置 IO 密集型业务亲和性。选中 Label,使其调度到高 IO 机型的节点(Taint 可以避免其它业务 Pod 调度上来)。
当业务量快速上升时,该 IO 密集型业务也需要更多的计算资源。在业务高峰时段,HPA 功能自动为该业务扩容了 Pod,而节点计算资源不够用,此时节点池的自动伸缩功能自动扩容了节点,守住了流量高峰。

使用启动脚本

组件自定义参数

使用自定义 Kubernetes 组件启动参数功能,请通过 在线咨询 进行申请。
在集群中设置自定义 Kubernetes 组件参数,详情请参见 自定义 Kubernetes 组件启动参数

节点启动配置

您可以在创建集群或新增节点时,或添加已有节点时,设置节点的启动脚本。详情请参见 设置节点的启动脚本
http://www.vxiaotou.com