背景
TKE 发行版(TKE Kubernetes Distro)是由腾讯云 TKE 公布的 K8S 发行版本,用于帮忙用户创立安全可靠的 K8S 集群。用户可依靠 TKE 发行版在自建或者托管机房、物理机或者虚机上,运行与 TKE 完全一致的 K8S 服务。TKE 发行版集群可无缝与腾讯云 TKE 集成,进而组建混合云。用户可通过 TKE 发行版集群将云下业务扩大到云上,利用腾讯云 TKE、EKS 等云服务弹性能力,为业务提供弱小的资源保障。目前 TKE 发行版已在 GitHub 开源:[[https://github.com/tkestack/t…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 没有正确设置采集指标的 containername,导致不能被归类和剖析。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 发行版的应用门槛。
编译和构建流程包含:
- 拉取 patch 代码
git clone [https://github.com/tkestack/tke-k8s-distro](https://github.com/tkestack/tke-k8s-distro)
- 编译组件
make
或者
make \<release\>
目前仅反对 1.20 版本。
- 组件产出
编译过程中,源码门路为 _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/t…https://github.com/tkestack/tke-k8s-distro)
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!