变化是 Kubernetes 生命周期不可或缺的一部分:随着 Kubernetes 的成长和成熟,功能可能会被弃用、删除或替换为项目健康的改进。对于 Kubernetes v1.26,有几个计划:本文根据 v1.26 发布过程中这个周期中期点可用的信息确定并描述了其中的一部分,该过程仍在进行中,并且可能会引入其他更改。
Kubernetes 项目有一个有据可查的功能弃用政策。
https://kubernetes.io/docs/reference/using-api/deprecation-policy/
此政策规定,只有当同一 API 的更新、稳定版本可用时,稳定的 API 才可能被弃用,并且 API 具有每个稳定性级别的最短生命周期。已弃用的 API 已被标记为在未来的 Kubernetes 版本中删除;它将继续运行直到被删除(从弃用起至少一年),但使用会导致显示警告。已删除的 API 在当前版本中不再可用,此时您必须迁移到使用替换 API。
无论 API 是由于功能从测试版升级到稳定版而被删除,还是因为该 API 根本没有成功,所有删除都符合此弃用政策。每当删除 API 时,都会在文档中传达迁移选项。
v1alpha2
API 和 containerd 1.5 的支持在 1.24 版本中采用了 Container Runtime Interface (CRI)
https://kubernetes.io/docs/concepts/architecture/cri/
和 移除 dockershim 之后,CRI 成为了 Kubernetes 与不同容器运行时交互的受支持和文档化的方式。每个 kubelet 与该节点上的容器运行时协商使用哪个版本的 CRI。
Kubernetes 项目推荐使用 CRI 版本 v1; 在 Kubernetes 版本 1.25 中,kubelet 还可以协商使用 CRI 版本 v1alpha2(在添加对稳定 v1 接口的支持的同时,已经不再推荐使用该版本)。
Kubernetes v1.26 将不支持 CRI v1alpha2
。如果容器运行时不支持 CRI v1,则此次移除将导致 kubelet 不注册节点:
https://github.com/kubernetes/kubernetes/pull/110618
这意味着 Kubernetes 1.26 将不支持 containerd 次要版本 1.5 及更早的版本;如果您使用 containerd,则需要先升级到 containerd 1.6.0 或更高版本,然后再将该节点升级到 Kubernetes v1.26。其他仅支持v1alpha2
的容器运行时也受到同样的影响:如果这影响到您,您应该联系容器运行时供应商寻求建议或查看他们的网站以获取有关如何改进的更多说明。
如果您想从 v1.26 功能中获益并仍然使用较旧的容器运行时,您可以运行较旧的 kubelet。kubelet 支持的倾斜允许您运行 v1.25 kubelet:
https://kubernetes.io/releases/version-skew-policy/#kubelet
即使您将控制平面升级到 Kubernetes 的 1.26 次要版本,它仍然与v1alpha2
CRI 支持兼容。
除了容器运行时本身,还有像 stargz-snapshotter:
https://github.com/containerd/stargz-snapshotter
这样的工具充当 kubelet 和容器运行时之间的代理,这些工具也可能受到影响。
除上述内容外,Kubernetes v1.26 的目标是包括一些额外的删除和弃用。
v1beta1
流量控制 API 组FlowSchema 和 PriorityLevelConfiguration 的 flowcontrol.apiserver.k8s.io/v1beta1
API 版本,将不再在 v1.26 中提供:
https://kubernetes.io/docs/reference/using-api/deprecation-guide/#flowcontrol-resources-v126
用户应迁移清单和 API 客户端以使用自 v1.23 起可用的 API 版本:flowcontrol.apiserver.k8s.io/v1beta2
v2beta2
HorizontalPodAutoscaler APIHorizontalPodAutoscaler autoscaling/v2beta2
API 版本将不再在 v1.26 中提供服务:
https://kubernetes.io/docs/reference/using-api/deprecation-guide/#horizontalpodautoscaler-v126
用户应迁移清单和 API 客户端以使用自 v1.23 起可用的 API 版本:autoscaling/v2
在这个即将发布的版本中,作为 Kubernetes 一部分的旧供应商特定身份验证:
https://github.com/kubernetes/kubernetes/pull/112341
将从client-go
和 kubectl
代码中移除,现有机制支持对两个特定云提供商的身份验证:Azure 和 Google Cloud。取而代之的是,Kubernetes 已经提供了供应商中立的身份验证插件机制:
https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins
您可以在 v1.26 版本发布之前立即切换。如果您受到影响,可以找到有关如何继续使用 Azure:
https://github.com/Azure/kubelogin#readme
和 Google Cloud 的其他指南:
https://cloud.google.com/blog/products/containers-kubernetes/kubectl-auth-changes-in-gke
kube-proxy
的 userspace 模式userspace
代理模式已被弃用一年多,在 Linux 或 Windows 上不再受支持:
https://github.com/kubernetes/kubernetes/pull/112133
并将在此版本中删除。用户应该在 Linux 上使用iptables
或ipvs
,或者在 windows 上使用kernelspace
。使用--mode userspace
将失败。
Kubernetes 正在从用于存储集成的树内代码转向容器存储接口 (CSI)。作为其中的一部分,Kubernetes v1.26 将删除已弃用的 OpenStack (cinder
卷类型)树内存储集成。您应该迁移到外部云提供商和 CSI 驱动程序:
https://github.com/kubernetes/cloud-provider-openstack
有关详细信息,请访问 Cinder in-tree 到 CSI 驱动程序迁移:
https://github.com/kubernetes/enhancements/issues/1489
树内 GlusterFS 驱动程序 在 v1.25 中已弃用,并将从 Kubernetes v1.26 中删除。
https://kubernetes.io/blog/2022/08/23/kubernetes-v1-25-release/#deprecations-and-removals
kubectl
标志作为包容性命名计划,实施工作的一部分:
https://www.cncf.io/announcements/2021/10/13/inclusive-naming-initiative-announces-new-community-resources-for-a-more-inclusive-future/
该--prune-whitelist
标志将被弃用,并替换为--prune-allowlist
. 强烈建议使用此标志的用户,在最终删除该标志之前,在未来版本中进行必要的更改。
https://github.com/kubernetes/kubernetes/pull/113116
动态 kubelet 配置允许通过 Kubernetes API 推出新的 kubelet 配置:
https://github.com/kubernetes/enhancements/tree/2cd758cc6ab617a93f578b40e97728261ab886ed/keps/sig-node/281-dynamic-kubelet-configuration
即使在实时集群中也是如此。集群操作员可以通过指定包含 kubelet 应该使用的配置数据的 ConfigMap 来重新配置节点上的 kubelet。动态 kubelet 配置在 v1.24 中从 kubelet 中移除,并将在 v1.26 版本中从 API Server 中移除。
https://github.com/kubernetes/kubernetes/pull/112643
kube-apiserver
命令行参数的弃用kube-apiserver 的--master-service-namespace
命令行参数没有任何效果,并且已经被非正式弃用:
https://github.com/kubernetes/kubernetes/pull/38186
该命令行参数将在 v1.26 中正式标记为已弃用,以准备在未来的版本中将其删除。Kubernetes 项目预计此次弃用和移除不会产生任何影响。
kubectl run
命令行参数的弃用kubectl run
的子命令的几个未使用的选项参数将被标记为 deprecated,包括:
https://github.com/kubernetes/kubernetes/pull/112261
--cascade
--filename
--force
--grace-period
--kustomize
--recursive
--timeout
--wait
这些参数已被忽略,因此预计不会产生任何影响:显式弃用会设置一条警告消息并准备在未来版本中删除这些参数。
Kubernetes v1.26 将删除一些与日志记录相关的命令行参数。
https://github.com/kubernetes/kubernetes/pull/112120
这些命令行参数已被弃用。有关详细信息,请参阅弃用 Kubernetes 组件中的 klog 特定标志:
https://github.com/kubernetes/enhancements/tree/3cb66bd0a1ef973ebcc974f935f0ac5cba9db4b2/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components
作者:Frederico Muñoz (SAS)
原文:https://kubernetes.io/blog/2022/11/18/upcoming-changes-in-kubernetes-1-26/