近几年影响最大版本来袭
2022 年 5 月 3 日,Kubernetes 1.24 正式发布。这个版本的发布可以说是“姗姗来迟”和“万众瞩目”,因为此次发布对 Kubernetes 社区会带来深远影响。
在 1.24 版本中,共有 46 项功能增强,其中 13 个进入了稳定期,14 个是改进现有的功能,13 个是全新的功能,此外还有六个被废弃的功能。相信很多了解 Kubernetes 的同学已经知道了,其中最重要的就是 Kubernetes 社区正式移除了对于 Docker 的支持,在经历了一年多、几个大版本的过渡期之后,这一天还是到来了。除了这个重大变更以外,其他的新的功能增强也值得我们关注,由于篇幅的限制,在这里就不一一列举了,笔者先带大家了解几个方面,顺便也讲讲博云容器云平台在这些领域的工作。
新鲜上架
1. Docker 的离去
Docker 和 Kubernetes 互相陪伴,走过了很久,现在是分别的时刻了。
不久前,Kubernetes 社区发布了一个纪录片,讲述了 Kubernetes 的诞生和发展,其中提到了 Kubernetes 和 Docker 的纠葛,这两个项目有时帮助,常常竞争,总是合作。但是令人唏嘘的是,随着 Kubernetes 成长为容器编排的事实标准,容器运行时也百花齐放,Kubernetes 社区迫切需要一套统一的标准管理多种容器运行时,因此 CRI 应运而生,而 docker shim 垫片的方式也必将逐渐退出历史舞台。
相比于历史,大家可能更关心未来怎么办,尽管 Kubernetes 官方发了几篇博文向用户说明即使废弃 Docker 也不用恐慌,但是很多用户可能还是不放心。其实 Kubernetes 社区之所以选择现在这个时间点放弃 Docker,很大的原因是社区中的替代方案基本已经成熟。
在运行时层面,containerd、cri-o 初露锋芒;在客户端命令行工具中 podman,nerdctl 都是非常优秀的工具。以 podman 工具为例,在使用方法上,它与 Docker 十分类似。
没错,可以将 podman 直接当作 Docker 使用,这极大减少了开发者的迁移成本。
在 CRI 的选择上,我们的可选项就更多了,由于 Kubernetes 的优秀设计,很容易就可以实现一个 CRI,目前开源社区中的 CRI 实现也很多,比较著名的有 containerd 和 cri-o,了解 Kubernetes 的同学知道,其实 Docker 后端就是调用的 containerd,因为 Docker 和 podman 构建的镜像都是 OCI 标准的,所以不用担心现有镜像的兼容性问题。另外,虽然 docker-shim 被正式移除了,但是 Mirantis (于 19 年底收购 docker 企业部门)维护的 cri-dockerd 项目仍然可以帮助大家实现 Kubernetes 和 Docker 的对接。
博云容器云平台很早就开始进行 containerd、cri-o 的兼容工作,目前已经完美适配这两个 CRI,并且博云容器云平台的特色产品,裸金属容器也已经适配了 containerd 和 cri-o。
随着 1.24 的发布,可以预期未来的 Kubernetes 部署环境中 Docker 占比会逐渐减少,containerd、cri-o、podman、nerdctl 等运行时和配套工具会逐渐进入大众视野。Kubernetes 作为容器编排领域多年的事实标准,此次变更对应用运维和部署的影响不大。同时,Docker 作为本次云原生浪潮的起点,在功能、易用性、用户积累等方面仍然有巨大的优势,在开发测试、个人使用等场景仍然会长期存在。
2. Windows 的逐步上位
容器技术生于 Linux,长于 Linux。虽然微软也为 Windows 加入了容器功能,但是 Kubernetes 对于 Windows 容器的兼容不尽如人意,很多功能都缺失。
不过在 1.24 版本中,我们可以看见一些变化,Kubernetes 增强了 Windows 版本的一致性认证标准。这项工作的推进可以使云服务商提供更加稳定、符合 Kubernetes 规范的 Kubernetes 发行版云平台。
由于历史遗留原因,其实有很多大型用户的业务程序只有 Windows 版本,他们对于 Windows 业务容器化、编排 Windows 容器也有着强烈的需求,所以博云容器云平台对于 Windows 容器的适配是非常重视的,我们很早就适配了 Windows 系统上的 Kubernetes。
博云的自研组件,例如 Fabric CNI 也推出了 Windows 版本,相比于 Kubernetes 官方推荐的 Flannel ,Fabric 有着更优秀的性能和更强大的功能。
除此之外,博云容器云平台对 Windows 集群的计算、存储、网络和监控日志都进行了统一管理,可以说在使用体验上与 Linux 集群没有多少差别。
目前已有多个用户使用了 Windows 版本的博云容器云平台,实现了运行在 Windows 系统上的业务在几千核 CPU 规模的集群中稳定高效运行。
3. 网络的稳中求进
网络一直是 Kubernetes 的重中之重。
在 1.24 中,Kubernetes 带来了几个关于网络的新功能,其中有两个值得特别关注
一是 NetworkPolicy 新增 NetworkPolicyStatus 字段,CNI 通过设置这个字段可以清楚的告诉用户目前 NetworkPolicy 是否生效
二是增加了 service 动态和静态 IP 的预留功能,此功能可以一定程度上防止 IP 冲突。
博云自研 Fabric CNI 也将在下月发布 2.5 版本,在此版本中带来了很多新功能,而且也通过目前大热的 eBPF 技术进一步增强了 Fabric,敬请期待。
4. Job 的成长
在最近一两年,让 AI, big data, HPC 与 Kubernetes 结合一直是云原生一个有趣的方向,而 Kubernetes 的原生对象 -- Job 是实现这一目的不可或缺的工具,所以在这个版本中,Kubernetes 社区为 Job 和 CronJob 做了很多优化:
Cronjob 支持设置时区
暂停 Job 的功能达到稳定状态
跟踪 Job 下 pod 状态的功能达到 beta 状态
索引作业的功能达到稳定状态
这些功能使得 Job 和 Cronjob 更加易用,但是笔者觉得,这些只是餐前小菜。
真正值得关注的是,在近期,Kubernetes 社区成立了批处理作业工作组,这个工作组可能会为 Kubernetes 原生 Job 在使用方式上带来新鲜血液,但是目前还需观望。
博云算力平台以 CNCF Volcano 项目为核心调度引擎,为众多客户提供了运行 AI、big data、HPC 等业务的土壤,切实解决了众多行业痛点。
5. 存储也不能落下
在 1.24 版本中,存储方向也有很多增强,其中值得关注的几项增强:
- 增加 CSI 卷运行状况监控
- CSI 卷扩展达到稳定状态
- 储存容量跟踪达到稳定状态
在 1.24 中 CSI 卷的运行状态作为一个 Kubelet 指标被公开,通过这个指标,我们可以更直观、真实的了解卷的状态。
博云在储存领域也有诸多行动,博云自研开源 CSI -- Carina 已经进入 CNCF 云原生全景图。欢迎各位开发者来 Carina 社区沟通交流,博云将保持开放的态度欢迎各位开发者的参与(Carina 社区:https://github.com/carina-io/...)。
6. 有状态服务的加速迭代
有状态服务一直是 Kubernetes 的特色功能,它体现了 Kubernetes 对各种类型业务的包容态度,使得诸如数据库等应用也可以很好的运行到 Kubernetes 上来。
通常在滚动更新时,为了降低丢失应用实例丢失的风险,并且更大限度提高可用性,有状态服务的 pod 会一次删除一个,再重建一个。但是这样速度会很慢。
在 1.24 版本中,为有状态服务引入了一个新的字段 maxUnavailable, 通过设置这个字段的值,可以控制 pod 删除个数,例如将这个值设置为 5,则一次删除 5 个 pod,再新建 5 个 pod,通过这种方式,可以加快有状态服务的滚动更新速度。
结语
“Kubernetes 1.24 是 2022 年 Kubernetes 更新的第一个版本。在疫情的第三年里,Kubernetes 社区中的贡献者们始终不懈奉献,将 Kubernetes 带到了一个全新的高度。在这个版本中,一如既往的加入了令人眼前一亮的新功能,既有移除 Docker 这样关键性的变更,也有在计算、存储、网络层面的增强。在 1.24 版本中,随着 Kubernetes 的成长,云原生将会有更多可能性值得我们去发掘。”
博云作为 Kubernetes 社区全球排名第 11 位的贡献者,长期持续为 Kubernetes 的发展贡献力量。博云容器云将紧跟技术最新发展,及时完成对 Kubernetes 1.24 版本的支持兼容,并实现对老版本的平滑升级。
最后,祝愿 Kubernetes 贡献者和用户们,能够像 Kubernetes 1.24 的官方代号 – “观星者”所描绘的一样,将目光投向远方,探索云计算更多的未知领域。
参考文章:
https://sysdig.com/blog/kuber...
https://kubernetes.io/zh/docs...
https://kubernetes.io/zh/blog...
https://kubernetes.io/zh/blog...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。