Kubernetes 1.26 中的删除、弃用和主要更改

2023-03-20 09:20:58 浏览数 (2)

25 张图详解 K8S 管理平台 Rancher 部署实践

变化是 Kubernetes 生命周期不可或缺的一部分:随着 Kubernetes 的成长和成熟,功能可能会被弃用、删除或替换为项目健康的改进。对于 Kubernetes v1.26,有几个计划:本文根据 v1.26 发布过程中这个周期中期点可用的信息确定并描述了其中的一部分,该过程仍在进行中,并且可能会引入其他更改。

Kubernetes API 移除和弃用流程

Kubernetes 项目有一个有据可查的功能弃用政策。

https://kubernetes.io/docs/reference/using-api/deprecation-policy/

此政策规定,只有当同一 API 的更新、稳定版本可用时,稳定的 API 才可能被弃用,并且 API 具有每个稳定性级别的最短生命周期。已弃用的 API 已被标记为在未来的 Kubernetes 版本中删除;它将继续运行直到被删除(从弃用起至少一年),但使用会导致显示警告。已删除的 API 在当前版本中不再可用,此时您必须迁移到使用替换 API。

  • 一般可用 (GA) 或稳定的 API 版本可能会标记为已弃用,但不得在 Kubernetes 的主要版本中删除。
  • 弃用后的 3 个版本必须支持 Beta 或预发布 API 版本。
  • Alpha 或实验性 API 版本可能会在任何版本中删除,恕不另行通知。

无论 API 是由于功能从测试版升级到稳定版而被删除,还是因为该 API 根本没有成功,所有删除都符合此弃用政策。每当删除 API 时,都会在文档中传达迁移选项。

删除对 CRI 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 中的弃用和删除

除上述内容外,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 API

HorizontalPodAutoscaler autoscaling/v2beta2API 版本将不再在 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-gokubectl代码中移除,现有机制支持对两个特定云提供商的身份验证:Azure 和 Google Cloud。取而代之的是,Kubernetes 已经提供了供应商中立的身份验证插件机制:

https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins

您可以在 v1.26 版本发布之前立即切换。

和 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 上使用iptablesipvs,或者在 windows 上使用kernelspace。使用--mode userspace将失败。

移除树内 OpenStack 云提供商

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 in-tree 驱动程序

树内 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 配置

动态 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


0 人点赞