腾讯云云原生混合云-TKE发行版
背景
TKE发行版(TKE Kubernetes Distro)是由腾讯云TKE发布的K8s发行版本,用于帮助用户创建安全可靠的K8s集群。用户可依托TKE发行版在自建或者托管机房、物理机或者虚机上,运行与TKE完全一致的K8s服务。TKE发行版集群可无缝与腾讯云TKE集成,进而组建混合云。用户可通过TKE发行版集群将云下业务扩展到云上,利用腾讯云TKE、EKS等云服务弹性能力,为业务提供强大的资源保障。
目前TKE发行版已在GitHub开源:[https://github.com/tkestack/tke-k8s-distro]
使用场景与定位
在混合云场景下,不同的云服务商提供的K8s并不完全相同。并且用户在云服务商以外的环境只能使用社区版K8s,而运行环境的任何微小差异都可能导致业务故障,因此,如何尽可能地保障多环境中基础组件的一致性变得尤为重要。TKE发行版便是解决这个问题的一个不错的选择,用户无需花费精力去关注不同环境下K8s的能力差异,以及自行修复K8s中的遇到的问题。
依赖TKE发行版,用户现在可以编译和构建与腾讯云TKE相同的K8s版本。这意味着用户现在可以手动部署可靠和安全的集群,而无需持续测试和跟踪K8s更新、依赖关系和安全补丁。每一个TKE发行版都遵循腾讯云TKE和K8s社区标准新版本兼容性的流程。
TKE发行版在保证兼容性的基础上,对K8s进行了扩展,并且与腾讯云TKE服务保持版本一致。用户可以在自己的IDC或者混合云上部署TKE发行版,使用已有企业用户大规模验证的可靠安全的K8s服务。
TKE发行版的每个版本都会通过K8s社区官方一致性测试,保证兼容性,同时以patch形式提供源代码,并提供构建工具帮助用户进行编译。TKE发行版目前支持v1.20版本。
我们的优势
大规模生产集群验证
TKE发行版提供与腾讯云TKE相同的可安装版本和开源代码,功能和稳定性经过大量企业用户、公有云及自研云锤炼。用户可以使用提供的源代码和编译工具进行构建和部署。
无缝集成公有云TKE
TKE发行版可支持用户在自建或者托管机房,物理机或者虚机上,运行与腾讯云TKE完全一致的K8s服务。并且可以无缝与腾讯云TKE集成,组建混合云集群。
更长支持周期
TKE发行版的支持周期比社区版更长。在社区版停止支持后,TKE发行版将继续得到支持,包括重要问题以及安全漏洞的修复。
更多实用能力增强
TKE发行版结合腾讯自身业务特点和经验,针对部分场景(弹性扩容、离在线混部、资源隔离等)实现了能力增强。并且TKE发行版紧跟社区趋势,主导或深度参与社区KEP设计与实现。对于有实用价值KEP会先于社区支持,让用户提前享受到云原生技术进步。
功能增强
支持弹性扩容到腾讯云EKS服务
EKS是腾讯云的弹性容器服务,用户无须购买节点即可部署工作负载,非常适合突发等临时的扩容需求。在需要临时扩容时,可以秒级快速把工作负载从TKE发行版集群扩容到云上EKS,应对突发和临时流量,提高资源利用率,降低运维和资金成本。
支持动态修改kube-controller-manager日志级别
在运维K8s生产集群中,我们一般设置较低日志级别(0~2),而在问题排查时我们需要提高日志级别。TKE发行版实现了动态修改日志级别功能,从而避免因组件重启导致关键日志丢失。目前K8s官方版本支持kube-apiserver、kubelet和kube-scheduler设置,TKE发行版额外实现了kube-controller-manager组件的日志动态调级。
该feature已提交社区:【https://github.com/kubernetes/kubernetes/pull/98262】
支持Memory QoS with cgroups v2特性(进行中)
Memory QoS with cgroups v2是TKE团队设计实现的内存QoS功能,它利用v2 memory controller中memory.min/memory.high为pod/container/node提供全方位的内存保护。
目前该KEP已被K8s社区接受,预计在v1.22中实现alpha版。TKE发行版会先于社区支持该特性,为用户Pod、集群节点等提供更好的内存保护。
Memory QoS with cgroups v2:【https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2570-memory-qos】
支持TencentOS QoS特性(进行中)
TencentOS是腾讯针对云场景研发的Linux操作系统,专门针对容器场景提供了原生优先级支持及资源隔离增强,包括CPU、内存、磁盘IO和网络IO等。TKE发行版内置了对TencentOS QoS特性的支持,将K8s资源隔离和QoS分级offload到TencentOS实现。该特性在开发中,预计下个版本支持。
TencentOS:【https://github.com/Tencent/TencentOS-kernel】
稳定性增强
TKE发行版依据大量生产经验,修复众多生产级bug,支持千万核集群在腾讯稳定运行。主要bugfix包括:
1.修复使用containerd时集群监控指标缺失问题
在containerd作为container runtime的集群中,kubelet没有正确设置采集指标的container name,导致不能被归类和分析。TKE发行版本修复了该问题,提交社区PR:【https://github.com/kubernetes/kubernetes/pull/90260】
2.修复删除Pod后立即创建并调度到同一个节点可能导致无法挂载成功的问题
K8s statefulset pod在删除后重新创建,如果pod调度到同一个节点,会因为卷挂载失败而导致启动失败。TKE发行版修复了该问题,提交社区PR:【https://github.com/kubernetes/kubernetes/pull/72914】
3.修复CentOS下创建容器会导致cgroup泄露的问题
TKE发行版关闭了kernel memory accouting以避免cgroup泄露。
4.修复kubectl describe deployment <xxx> NewReplicaSet 显示为 <none> 的问题
kubectl describe在获取deployment对象后,会对volume进行排序,有时会导致无法匹配到最新replicaset。TKE发行版修复了该问题,提交社区PR:【https://github.com/kubernetes/kubernetes/pull/97752】
5.修复Pod容器镜像有多tag时,Pod status镜像tag会不匹配问题
Pod容器一镜像有多tag时,会导致pod spec容器镜像tag与kubelet上报不符。TKE发行版backport社区PR修复此问题:【https://github.com/kubernetes/kubernetes/pull/94833】
6.修复aws credential provider导致kubelet启动20s延迟问题
AWS credential provider在初始化时会尝试连接AWS元数据服务,会导致非AWS集群出现最长20s启动延迟。TKE发行版上报了bug【https://github.com/kubernetes/kubernetes/issues/92162】
并backport社区PR【https://github.com/kubernetes/kubernetes/pull/93260】
7.修复Ubuntu16.04 lxcfs升级造成pod退出问题
K8s集群在Ubuntu16.04下默认安装低版本lxcfs,在对lxcfs升级后,会导致pod无法正常运行。原因是低版本lxcfs挂载cgroupfs,kubelet在启动时会使用lxcfs已挂载cgroupfs,而非系统/sys/fs/cgroup。lxcfs在升级新版本后,旧cgroupfs会被解挂,导致kubelet对pod cgroup操作失败。TKE发行版修复了该问题。
如何使用TKE发行版
TKE发行版提供了安装工具脚本,帮助用户自动编译和构建发行版镜像,极大降低了TKE发行版的使用门槛。
编译和构建流程包括:
1.拉取patch代码
git clone[https://github.com/tkestack/tke-k8s-distro](https://github.com/tkestack/tke-k8s-distro)
2.编译组件
make
或者
make \<release\>
目前支持1.20版本。
3.组件产出
编译过程中,源码路径为_src/<release>,编译产出路径为_output/<release>,组件包括kubeadm,kube-apiserver,kube-controller-manager,kubectl,kubelet,kube-proxy,kube-scheduler。
下一步
TKE发行版的推出,使得用户线下IDC与腾讯云上TKE的融合成为可能。我们期望TKE发行版未来能成为混合云与多云的基石,让用户在混合云环境中,可随时随地享受到和云上TKE一致的体验。
TKE发行版未来会以开源方式运作,用户可以通过GitHub提供任何反馈,不仅限于Issue和PR。
GitHub:【https://github.com/tkestack/tke-k8s-distro】