Kubernetes 1.24新特性解读

标签: kubernetes | 发表时间:2022-05-08 04:16 | 作者:阿娇
出处:http://weekly.dockone.io

北京时间5月4日, Kubernetes 1.24版正式发布了,像之前的几个版本一样,给Kubernetes带来了大大小小多达几十项的变化。几十项涉及到基础设施、运维和应用开发的方方面面,可能很难有人能够全部搞懂,本文也不打算一一罗列,谨结合自己的体会,谈几个应用开发者可能比较关注的点。

Kubernetes 1.24版Logo:观星者

首当其冲是对dockershim支持的正式移除。在一年多以前,Kubernetes 1.20版本宣布对Docker的支持置为“废弃(Deprecated)”状态,不再演进,并“将在未来的某个版本中移除(Will be removed)”。这次发布的1.24版即是所谓“正式移除Docker支持”的版本,然而,Docker公司却宣称,在Kubernetes环境中,可以继续使用Docker,其Docker Desktop产品的用户仍然能够无缝使用Kubernetes的最新发布版本。这是怎么回事?

事实上,仔细阅读Kubernetes官方的1.24版的Change Log,你会发现,其对于Docker支持的表述与一年前的1.20版有微妙的不同。

1.20版Change Log 截图


1.24版Change Log截图

Kubernetes移除Docker主要是因为Docker长期以来不支持Kubernetes主推的CRI容器运行时接口标准,因此Kubernetes社区维护了一个dockershim组件专门用来对接Docker。

这在当年Docker具备垄断地位时非常有必要,随着containerd和kata等容器运行时发展成熟,尤其是containerd在生产环境中大量使用,Kubernetes社区决定不再维护dockershim。

然而,最近两年Mirantis(已于2019年11月收购Docker Enterprise部门)和Docker公司在对Kubernetes的支持上不断投入,目前社区里已经有一个独立于Kubernetes并且支持CRI的“shim”:cri-dockerd,继续实现Kubernetes与Docker的对接。

Docker Desktop以其优秀的用户体验深得很多开发者的青睐,自Kubernetes 1.20版本发布以来,笔者就在寻找Docker Desktop的替代品,也尝试了不少,但目前还没有找到能够与之媲美的产品。cri-dockerd让Kubernetes 1.24能够继续对接Docker容器运行时,这意味着用户可以像以前一样在Docker Desktop中一键安装并无缝使用最新版的Kubernetes,对于开发者来说无疑是个好消息。

同时由于Docker Image已经成为了各类容器运行时使用的标准镜像格式,开发使用Docker,生产或者发布到客户的环境中使用的是其他容器运行时可能会成为一种长期存在的普遍现象。

第二个想聊一聊的是Kubernetes的Job。对于批处理类的应用负载,Kubernetes提供了Job资源来支持。但是当我们要运行并行处理或者分布式计算的Job时,会遇到一个问题:Kubernetes中的Pod是动态创建和回收的,这也是基于Kubernetes Job来运行批处理负载的优势之一,因为资源能够在需要时才被占用,用完可以立即回收,然而这却会导致任务在往各个Pod分配时缺少依据(基于机器的并行计算系统中往往需要将主机名称等相对固定的标识作为任务调度的输入)。

在早些版本中,Kubernetes官方建议引入消息队列或者内存数据库来给Job的各个Pod分配编号以解决该 问题,这无疑提升了应用的复杂度且引入了第三方组件的运维问题。在Kubernetes 1.24版本中,有一项从Beta阶段提升为正式特性的功能叫做“Indexed Job”,该特性会给同一个Job的各个Pod在环境变量中注入一个编号索引,应用可以根据这个编号为各个Pod分配具体的task。

去年该特性还在beta阶段时,笔者尝试将一个基于Kubernetes Job的云原生分布式图计算应用从依赖外部消息队列分配task改为Indexed Job,应用的可维护性、稳定性和资源消耗都得到了明显的改善。

第三个推荐开发者关注的特性是gPRC健康状态探针已经是beta状态了,这是一个很值得期待的功能。gRPC协议在云原生应用中得到日益广泛的使用,然而Kubernetes过去一直缺少gRPC原生的健康状态探针支持,使得对gRPC服务的启动、存活和就绪状态检查都需要依赖其他手段,官网有一篇文章对这些技术手段进行了 介绍,从文章中不难看出,这些方法对于应用迁移上Kubernetes的成本和云原生应用的可维护性、可用性都会有一定的影响。在Kubernetes原生支持gRPC探针后,这些问题得到了有效的解决,采用gRPC协议构建云原生应用的同仁们可以期待一下这个特性未来从beta状态变为正式可用。

最后想到一个非常有意思的更新,1.24版本以后,kubeadm安装Kubernetes集群时,不再给运行控制面组件的节点标记为“master”,因为这个词被认为是“具有攻击性的、无礼的(offensive)”。近几年,一些用master-slave来表示主-从节点的计算机系统纷纷改掉术语,slave前两年就已经销声匿迹了,现在看来master也不能用。

相关 [kubernetes] 推荐:

Kubernetes & Microservice

- - 午夜咖啡
这是前一段时间在一个微服务的 meetup 上的分享,整理成文章发布出来. 谈微服务之前,先澄清一下概念. 微服务这个词的准确定义很难,不同的人有不同的人的看法. 比如一个朋友是『微服务原教旨主义者』,坚持微服务一定是无状态的 http API 服务,其他的都是『邪魔歪道』,它和 SOA,RPC,分布式系统之间有明显的分界.

Kubernetes学习(Kubernetes踩坑记)

- - Z.S.K.'s Records
记录在使用Kubernetes中遇到的各种问题及解决方案, 好记性不如烂笔头. prometheus提示 /metrics/resource/v1alpha1 404. 原因: 这是因为[/metrics/resource/v1alpha1]是在v1.14中才新增的特性,而当前kubelet版本为1.13.

kubernetes移除Docker?

- -
两周前,Kubernetes在其最新的Changelog中宣布1.20之后将要弃用dockershime,也就说Kubernetes将不再使用Docker做为其容器运行时. 这一消息持续发酵,掀起了不小的波澜,毕竟Kubernetes+Docker的经典组合是被市场所认可的,大量企业都在使用. 看上去这个“弃用”的决定有点无厘头,那么为什么Kubernetes会做出这样的决定.

Kubernetes 完全教程

- - 午夜咖啡
经过一个阶段的准备,视频版本的 《Kubernetes 完全教程》出炉了. 课程一共分为七节,另外有一节 Docker 预备课,每节课大约一个多小时. 目标是让从没接触过 Kubernetes 的同学也能通过这个课程掌握 Kubernetes. 为什么要学习 Kubernetes. 在介绍课程之前,先说说为什么要学习 Kubernetes 以及什么人需要学习 Kubernetes.

Kubernetes 监控详解

- - DockOne.io
【编者的话】监控 Kubernetes 并不是件容易的事. 本文介绍了监控 Kubernetes 的难点、用例以及有关工具,希望可以帮助大家进一步了解监控 Kubernetes. 如果想要监控 Kubernetes,包括基础架构平台和正在运行的工作负载,传统的监控工具和流程可能还不够用. 就目前而言,监控 Kubernetes 并不是件容易的事.

Kubernetes 切换到 Containerd

- - bleem
由于 Kubernetes 新版本 Service 实现切换到 IPVS,所以需要确保内核加载了 IPVS modules;以下命令将设置系统启动自动加载 IPVS 相关模块,执行完成后需要重启. 重启完成后务必检查相关 module 加载以及内核参数设置:. 1.2、安装 Containerd. Containerd 在 Ubuntu 20 中已经在默认官方仓库中包含,所以只需要 apt 安装即可:.

Spring Cloud Kubernetes指南

- -
当我们构建微服务解决方案时,SpringCloud和Kubernetes都是最佳解决方案,因为它们为解决最常见的挑战提供组件. 但是,如果我们决定选择Kubernetes作为我们的解决方案的主要容器管理器和部署平台,我们仍然可以主要通过SpringCloudKubernetes项目使用SpringCloud的有趣特性.

喜大普奔:Spark on kubernetes

- - Zlatan Eevee
两个星期前(08/15/2017),spark社区提了一个新的SPIP(Spark Project Improvement Proposals): Spark on Kubernetes: Kubernetes as A Native Cluster Manager,即用k8s管理spark集群. 经过社区2个星期的投票,看上去很快要能合入了.

Kubernetes 日志收集方案

- - IT瘾-dev
Kubernetes 中的基本日志. Kubernetes 日志收集. 以 sidecar 容器收集日志. 用 sidecar 容器重新输出日志. 使用 sidecar 运行日志采集 agent. 前面的课程中和大家一起学习了 Kubernetes 集群中监控系统的搭建,除了对集群的监控报警之外,还有一项运维工作是非常重要的,那就是日志的收集.

Kubernetes 会不会“杀死” DevOps?

- - InfoQ推荐
DevOps 这个概念最早是在 2007 年提出的,那时云计算基础设施的概念也才刚刚提出没多久,而随着互联网的逐渐普及,应用软件的需求爆发式增长,软件开发的理念也逐渐从瀑布模型(waterfall)转向敏捷开发(agile). 传统的软件交付模式(应用开发人员专注于软件开发、IT 运维人员负责将软件部署到服务器运行),再也无法满足互联网软件快速迭代的需求.