关于腾讯云:TKE-集群组建最佳实践

43次阅读

共计 3020 个字符,预计需要花费 8 分钟才能阅读完成。

Kubernetes 版本

Kubernetes 版本迭代比拟快,新版本通常蕴含许多 bug 修复和新性能,旧版本逐步淘汰,倡议创立集群时抉择以后 TKE 反对的最新版本,后续出新版本后也是能够反对 Master 和节点的版本升级的。

网络模式: GlobalRouter vs VPC-CNI

GlobalRouter 模式架构:

  • 基于 CNI 和 网桥实现的容器网络能力,容器路由间接通过 VPC 底层实现;
  • 容器与节点在同一网络立体,但网段不与 VPC 网段重叠,容器网段地址富余。

VPC-CNI 模式架构:

  • 基于 CNI 和 VPC 弹性网卡实现的容器网络能力,容器路由通过弹性网卡,性能相比 Global Router 约进步 10%;
  • 容器与节点在同一网络立体,网段在 VPC 网段内;
  • 反对 Pod 固定 IP。

网络模式比照:

反对三种应用形式:

  • 创立集群时指定 GlobalRouter 模式;
  • 创立集群时指定 VPC-CNI 模式,后续所有 Pod 都必须应用 VPC-CNI 模式创立;
  • 创立集群时指定 GlobalRouter 模式,在须要应用 VPC-CNI 模式时为集群启用 VPC-CNI 的反对,即两种模式混用。

选型倡议:

  • 绝大多数状况下应该抉择 GlobalRouter,容器网段地址富余,扩展性强,能适应规模较大的业务;
  • 如果前期局部业务须要用到 VPC-CNI 模式,能够在 GlobalRouter 集群再开启 VPC-CNI 反对,也就是 GlobalRouter 与 VPC-CNI 混用,仅对局部业务应用 VPC-CNI 模式;
  • 如果齐全理解并承受 VPC-CNI 的各种限度,并且须要集群内所有 Pod 都用 VPC-CNI 模式,能够创立集群时抉择 VPC-CNI 网络插件。

参考官网文档《如何抉择容器服务网络模式》: https://cloud.tencent.com/doc…

运行时: Docker vs Containerd

Docker 作为运行时的架构:

  • kubelet 内置的 dockershim 模块帮傲娇的 docker 适配了 CRI 接口,而后 kubelet 本人调本人的 dockershim (通过 socket 文件),而后 dockershim 再调 dockerd 接口 (Docker HTTP API),接着 dockerd 还要再调 docker-containerd (gRPC) 来实现容器的创立与销毁等。
  • 为什么调用链这么长?Kubernetes 一开始反对的就只是 Docker,起初引入了 CRI,将运行时形象以反对多种运行时,而 Docker 跟 Kubernetes 在一些方面有肯定的竞争,不甘做小弟,也就没在 dockerd 层面实现 CRI 接口,所以 kubelet 为了让 dockerd 反对 CRI,就本人为 dockerd 实现了 CRI。docker 自身外部组件也模块化了,再加上一层 CRI 适配,调用链必定就长了。

Containerd 作为运行时的架构:

  • containerd 1.1 之后,反对 CRI Plugin,即 containerd 本身这里就能够适配 CRI 接口。
  • 相比 Docker 计划,调用链少了 dockershim 和 dockerd。

运行时比照:

  • containerd 计划因为绕过了 dockerd,调用链更短,组件更少,占用节点资源更少,绕过了 dockerd 自身的一些 bug,但 containerd 本身也还存在一些 bug (已修复一些,灰度中)。
  • docker 计划历史比拟悠久,绝对更成熟,反对 docker api,功能丰富,合乎大多数人的应用习惯。

选型倡议:

  • Docker 计划 相比 containerd 更成熟,如果对稳定性要求很高,倡议 docker 计划;
  • 以下场景只能应用 docker:
    • Docker in docker (通常在 CI 场景)
    • 节点上应用 docker 命令
    • 调用 docker API
  • 没有以上场景倡议应用 containerd。

参考官网文档《如何抉择 Containerd 和 Docker》:https://cloud.tencent.com/doc…

Service 转发模式: iptables vs ipvs

先看看 Service 的转发原理:

  • 节点上的 kube-proxy 组件 watch apiserver,获取 Service 与 Endpoint,依据转发模式将其转化成 iptables 或 ipvs 规定并写到节点上;
  • 集群内的 client 去拜访 Service (Cluster IP),会被 iptable/ipvs 规定负载平衡到 Service 对应的后端 pod。

转发模式比照:

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

选型倡议:

  • 对稳定性要求极高且 service 数量小于 2000,选 iptables;
  • 其余场景首选 ipvs。

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

托管集群:

  • Master 组件用户不可见,由腾讯云托管
  • 很多新性能也是会率先反对托管的集群
  • Master 的计算资源会依据集群规模主动扩容
  • 用户不须要为 Master 付费

独立集群:

  • Master 组件用户能够齐全掌控
  • 用户须要为 Master 付费购买机器

选型倡议:

  • 个别举荐托管集群
  • 如果心愿能可能对 Master 齐全掌控,能够应用独立集群 (比方对 Master 进行个性化定制实现高级性能)

节点操作系统

TKE 次要反对 Ubuntu 和 CentOS 两类发行版,带“TKE-Optimized”后缀用的是 TKE 定制优化版的内核,其它的是 linux 社区官网开源内核:

TKE-Optimized 的劣势:

  • 基于内核社区长期反对的 4.14.105 版本定制
  • 针对容器和云场景进行优化
  • 计算、存储和网络子系统均通过性能优化
  • 对内核缺点修复反对较好
  • 齐全开源:https://github.com/Tencent/Te…

选型倡议:

  • 举荐“TKE-Optimized”,稳定性和技术支持都比拟好
  • 如果须要更高版本内核,选非“TKE-Optimized”版本的操作系统

节点池

此个性以后正在灰度中,可申请开白名单应用。次要可用于批量治理节点:

  • 节点 Label 与 Taint
  • 节点组件启动参数
  • 节点自定义启动脚本
  • 操作系统与运行时 (暂未反对)

产品文档:https://cloud.tencent.com/doc…

实用场景:

  • 异构节点分组治理,缩小治理老本
  • 让集群更好反对简单的调度规定 (Label, Taint)
  • 频繁扩缩容节点,缩小操作老本
  • 节点日常保护(版本升级)

用法举例:

局部 IO 密集型业务须要高 IO 机型,为其创立一个节点池,配置机型并对立设置节点 Label 与 Taint,而后将 IO 密集型业务配置亲和性,选中 Label,使其调度到高 IO 机型的节点 (Taint 能够防止其它业务 Pod 调度上来)。

随着工夫的推移,业务量疾速回升,该 IO 密集型业务也须要更多的计算资源,在业务顶峰时段,HPA 性能主动为该业务扩容了 Pod,而节点计算资源不够用,这时节点池的主动伸缩性能主动扩容了节点,扛住了流量顶峰。

启动脚本

组件自定义参数

此个性以后也正在灰度中,可申请开白名单应用。

  1. 创立集群时,可在 集群信息界面“高级设置”中 自定义 Master 组件局部启动参数:

  1. 增加节点时,可在 云服务器配置界面的“高级设置”中 自定义 kubelet 局部启动参数:

节点启动配置

  1. 新建集群时,可在 云服务器配置界面的“节点启动配置”选项处 增加节点启动脚本:

  1. 增加节点时,可在 云服务器配置界面的“高级设置”中 通过自定义数据配置节点启动脚本 (可用于批改组件启动参数、内核参数等):

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!

正文完
 0