服务器端应用已在Kubernetes 1.22成为正式功能

Kubernetes 1.22是今年的第2个更新版本,这个版本有许多新功能进入稳定阶段,包括服务器端应用(Server-side Apply,SSA)、外部凭证提供程序,以及开源分布式存储etcd升级至3.5.0版本,另外,创建临时容器的API,也在Kubernetes 1.22有所变化。

这个版本的一大重点在于SSA成为正式版本,SSA让用户和控制器可以使用声明式配置来管理资源,像是创建或修改对象,在经过几个版本的测试之后,这个功能已经正式发布。Kubernetes 1.22将原本采用Kubectl应用(Kubectl Apply)的客户端实例,替换成为服务器端实例,并允许Kubectl以外的工具和客户端使用。

官方提到,服务器端应用是一种新字段所有权(Field Ownership)和对象整合算法,在Kubernetes API服务器上运行。SSA从Beta测试版到正式版本,增加了对子资源的支持,client-go和Kubebuilder也都全面支持SSA,而这样的改进提供了控制器开发上,所有必须的SSA功能。

从1.11版本以来,一直处于测试阶段的外部凭证提供程序,也在Kubernetes 1.22版本中进入稳定阶段,正式版功能集包括改进交互式登录流程组件的支持,并且修正多个bug。Kubernetes默认的后端存储etcd,采用了新版本3.5.0,这版本改进了安全性、性能、监控和开发人员体验,新加入的功能包含移植使用结构化日志记录,以及内置日志轮替功能。

Kubernetes 1.22提供了一个新的Alpha测试功能,对内存资源进行QoS(Quality of Service),原本Kubernetes使用第一版的cgroups API,这个设计可让Pod的QoS类别,应用到CPU资源上,而这个新的测试功能,Kubernetes使用cgroups v2 API来控制内存和隔离,这个功能的目的,是要在内存资源竞争的时候,提高工作负载和节点可用性,并且增加容器生命周期的可预测性。

除了功能更新,Kubernetes 1.22还有一些重大变更,删除了数个遭到弃用的Beta测试API,包括Ingress、APIService和CertificateSigningRequest等。而临时性容器(Ephemeral Containers)API也有变动,目前临时性容器功能还是Alpha功能并且默认停用,新的API不适用于使用旧API的客户端。

kubectl 1.21以尽先前版本,不支持临时性容器的新API,当用户计划使用kubectl debug创建临时性容器,而且集群执行Kubernetes 1.22,则无法使用kubectl 1.21和更早版本进行操作,如果要将kubectl debug与集群版本混用,就必需要将kubectl更新到1.22。

从今年4月开始,Kubernetes的发布频率,从原本的每年4次降为3次,所以Kubernetes 1.22是相对之前,发布周期较长的一个版本,官方提到,随着Kubernetes项目越来越成熟,每个周期加入的新功能也会增加,而这带给终端用户许多学习上的压力,迫使他们必需要更快地学习更多的新功能,而把发布频率降为每年3次,则可以使Kubernetes发展更加平衡,包括管理社群贡献以及版本发布,也可以让用户在升级使用最新版本上,保有规划弹性。