作者:Mickey Boxell(Oracle)
随着 Kubernetes 的发展,特性和 API 会定期给重新访问和删除。新的特性可能会提供一种替代的或改进的方法,来解决现有的问题,激励团队去除旧的方法。根据Kubernetes 弃用策略[1],旧的 API 首先被弃用(deprecated),然后被删除(removed)。
我们想确保你知道 Kubernetes 1.24 版本的变化。该版本将弃用几个(测试版/beta)API,转而支持相同 API 的稳定版本。Kubernetes 1.24 版本的主要变化是删除 Dockershim[2]。这将在下面讨论,并将在发布时更深入地探讨。要提前了解 Kubernetes 1.24 中的变化,请查看正在更新的 CHANGELOG[3]。
关于 Dockershim
可以肯定地说,随着 Kubernetes 1.24 的发布,最受关注的删除是 Dockershim。Dockershim 在 1.20 版中已被弃用。如 Kubernetes 1.20 变更日志[4]中所述:“Docker support in the kubelet is now deprecated and will be removed in a future release. The kubelet uses a module called “dockershim” which implements CRI support for Docker and it has seen maintenance issues in the Kubernetes community.”。随着 Kubernetes 1.24 的即将发布,Dockershim 将最终给删除。
在文章“Don’t Panic: Kubernetes and Docker[5]”里,作者简洁地捕捉到了变化的影响,并鼓励用户保持冷静:
Docker as an underlying runtime is being deprecated in favor of runtimes that use the Container Runtime Interface (CRI) created for Kubernetes. Docker-produced images will continue to work in your cluster with all runtimes, as they always have.
已经有几个指南,提供了关于从 dockershim 迁移到与 Kubernetes 直接兼容的容器运行时的有用信息。你可以在 Kubernetes 文档中的从 dockershim 迁移[6]页面上找到它们。
有关 Kubernetes 为何离开 dockershim 的更多信息,请查看 Kubernetes is Moving on From Dockershim[7]以及最新的 dockershim 删除 FAQ[8]。
看看 Is Your Cluster Ready for v1.24?[9]一文,了解如何确保你的集群在从 1.23 版升级到 1.24 版后继续工作。
Kubernetes API 删除和弃用流程
Kubernetes 包含大量随时间演变的组件。在某些情况下,这种演变会导致 API、标志或整个特性被删除。为了防止用户面临重大变化,Kubernetes 贡献者采用了一种特性弃用策略。该策略确保稳定 API 仅在该 API 的较新稳定版本可用时才被弃用,并且 API 具有由以下稳定性级别指示的最短生存期:
-
普遍可用(GA)或稳定的 API 版本可能会被标记为弃用,但不得在 Kubernetes 的主要版本中删除。
-
测试版或预发布 API 版本在弃用后必须支持 3 个版本。
-
Alpha 或实验 API 版本可能会在任何版本中被删除,恕不另行通知。
删除遵循相同的弃用策略,无论 API 是由于测试版功能升级为稳定版,还是因为该 API 未被证明是成功的而被删除。Kubernetes 将继续确保每当 API 被删除时,迁移选项都被记录在案。
弃用的 API(Deprecated API)是那些在未来的 Kubernetes 版本中给标记会删除的API。删除的 API(Removed API)是那些在当前受支持的 Kubernetes 版本中不再可用的 API,因为它们已经给弃用。这些删除已被更新的、稳定的/可普遍可用的(GA)API 所取代。
Kubernetes 1.24 的 API 删除、弃用和其他更改
-
Dynamic kubelet configuration[10]:DynamicKubeletConfig 用于启用 kubelet 的动态配置。Kubernetes 1.22 中弃用 DynamicKubeletConfig 标志。从 v1.24 开始,kubelet 中删除了特征门。请见重新配置 kubelet[11]。更多信息请参考[“Dynamic kubelet config is removed” KEP](https://github.com/kubernetes/enhancements/issues/281 ““Dynamic kubelet config is removed” KEP”)。
-
Dynamic log sanitization[12]:实验性的动态日志清理功能已给弃用,并在 1.24 版中给删除。该功能引入了一个日志过滤器,可应用于所有 Kubernetes 系统组件日志,以防止各种类型的敏感信息通过日志泄漏。有关更多信息和替代方法请参考KEP-1753: Kubernetes system components logs sanitization[13]。
-
In-tree provisioner to CSI driver migration:这适用于许多树内插件,包括Portworx[14]。有关更多信息,请参考In-tree Storage Plugin to CSI Migration Design Doc[15]。
-
Removing Dockershim from kubelet[16]:Docker(即 Docker shim)的容器运行时接口(CRI)目前是 kubelet 代码库中的内置容器运行时。在 1.20 版中给弃用。在 1.24 版,dockershim 已经从 kubelet 中给删除。看看这篇博客what you need to do be ready for v1.24.[17]做准备。
-
Storage capacity tracking for pod scheduling[18]:CSIStorageCapacity API 支持通过 CSIStorageCapacity 对象暴露当前可用的存储容量,并通过后期绑定增强使用 CSI 卷的 pod 的调度。CSIStorageCapacity API 自 1.24 版起提供稳定版本。1beta1 CSIStorageCapacity API 在 1.24 版中给弃用。有关更多信息,请参考Storage Capacity Constraints for Pod Scheduling KEP[19]。
-
The master label is no longer present on kubeadm control plane nodes[20]。对于新集群,“node-role.kubernetes.io/master”标签将不再添加到控制平面节点,只会添加“node-role.kubernetes.io/control-plane”标签。有关更多信息,请参考[KEP-2067: Rename the kubeadm “master” label and taint](https://github.com/kubernetes/enhancements/tree/master/keps/sig-cluster-lifecycle/kubeadm/2067-rename-master-label-taint “KEP-2067: Rename the kubeadm “master” label and taint”)。
-
VolumeSnapshot v1beta1 CRD will be removed in v1.24[21]。Kubernetes 和容器存储接口(CSI)的卷快照和恢复功能在 1.20 版中进入测试版,该功能提供标准化 API 设计(CRD)并为 CSI 卷驱动程序添加了 PV 快照/恢复支持。VolumeSnapshot v1beta1 在 1.21 版中已给弃用,现在不受支持。更多信息请参考KEP-177: CSI Snapshot[22]以及kubernetes-csi/external-snapshotter[23]。
kubectl convert
kubectl 的 kubectl convert[24]插件有助于解决弃用的 API 的迁移问题。该插件方便了不同 API 版本之间清单的转换,例如,从弃用的 API 版本到非弃用的 API 版本。关于 API 迁移过程的更多一般信息可以在 转自Deprecated API Migration Guide[25]中找到。按照安装 kubectl convert 插件[26]文档下载并安装 ku ectl-convert 二进制文件。
展望未来
计划在今年晚些时候发布的 Kubernetes 1.25 和 1.26 版本将停止提供几种目前稳定的 Kubernetes API 的测试版本。v1.25 版本还将删除 PodSecurityPolicy,这在 Kubernetes 1.21 中已给弃用,不会升级到 stable。有关更多信息,请见PodSecurityPolicy Deprecation: Past, Present, and Future[27]。
Kubernetes 1.25 计划删除的 API[28]的官方列表是:
-
The beta CronJob API (batch/v1beta1)
-
The beta EndpointSlice API (discovery.k8s.io/v1beta1)
-
The beta Event API (events.k8s.io/v1beta1)
-
The beta HorizontalPodAutoscaler API (autoscaling/v2beta1)
-
The beta PodDisruptionBudget API (policy/v1beta1)
-
The beta PodSecurityPolicy API (policy/v1beta1)
-
The beta RuntimeClass API (node.k8s.io/v1beta1)
Kubernetes 1.26 计划删除的 API[29]的官方列表是:
-
The beta FlowSchema and PriorityLevelConfiguration APIs (flowcontrol.apiserver.k8s.io/v1beta1)
-
The beta HorizontalPodAutoscaler API (autoscaling/v2beta2)
了解更多
Kubernetes 版本说明中宣布了弃用信息。你可以在以下版本的发行说明中看到待定弃用的公告:
-
Kubernetes 1.21[30]
-
Kubernetes 1.22[31]
-
Kubernetes 1.23[32]
-
我们将正式宣布Kubernetes 1.24[33]的弃用信息,作为该版本的 CHANGELOG 的一部分。
有关弃用和删除过程的信息,请查看 Kubernetes 官方弃用策略文档。
参考资料
Kubernetes 弃用策略: https://kubernetes.io/docs/reference/using-api/deprecation-policy/
[2]删除 Dockershim: https://github.com/kubernetes/enhancements/issues/2221
[3]CHANGELOG: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.24.md
[4]Kubernetes 1.20 变更日志: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation
[5]Don’t Panic: Kubernetes and Docker: https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/
[6]从 dockershim 迁移: https://kubernetes.io/docs/tasks/administer-cluster/migrating-from-dockershim/
[7]Kubernetes is Moving on From Dockershim: https://kubernetes.io/blog/2022/01/07/kubernetes-is-moving-on-from-dockershim/
[8]最新的 dockershim 删除 FAQ: https://kubernetes.io/blog/2022/02/17/dockershim-faq/
[9]Is Your Cluster Ready for v1.24?: https://kubernetes.io/blog/2022/03/31/ready-for-dockershim-removal/
[10]Dynamic kubelet configuration: https://github.com/kubernetes/enhancements/issues/281
[11]重新配置 kubelet: https://kubernetes.io/docs/tasks/administer-cluster/reconfigure-kubelet/
[12]Dynamic log sanitization: https://github.com/kubernetes/kubernetes/pull/107207
[13]KEP-1753: Kubernetes system components logs sanitization: https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/1753-logs-sanitization#deprecation
[14]Portworx: https://github.com/kubernetes/enhancements/issues/2589
[15]In-tree Storage Plugin to CSI Migration Design Doc: https://github.com/kubernetes/design-proposals-archive/blob/main/storage/csi-migration.md#background-and-motivations
[16]Removing Dockershim from kubelet: https://github.com/kubernetes/enhancements/issues/2221
[17]what you need to do be ready for v1.24.: https://kubernetes.io/blog/2022/03/31/ready-for-dockershim-removal/
[18]Storage capacity tracking for pod scheduling: https://github.com/kubernetes/enhancements/issues/1472
[19]Storage Capacity Constraints for Pod Scheduling KEP: https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1472-storage-capacity-tracking
[20]The master label is no longer present on kubeadm control plane nodes: https://github.com/kubernetes/kubernetes/pull/107533
[21]VolumeSnapshot v1beta1 CRD will be removed in v1.24: https://github.com/kubernetes/enhancements/issues/177
[22]KEP-177: CSI Snapshot: https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/177-volume-snapshot#kep-177-csi-snapshot
[23]kubernetes-csi/external-snapshotter: https://github.com/kubernetes-csi/external-snapshotter/releases/tag/v4.1.0
[24]kubectl convert: https://kubernetes.io/docs/tasks/tools/included/kubectl-convert-overview/
[25]Deprecated API Migration Guide: https://kubernetes.io/docs/reference/using-api/deprecation-guide/
[26]安装 kubectl convert 插件: https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-convert-plugin
[27]PodSecurityPolicy Deprecation: Past, Present, and Future: https://kubernetes.io/blog/2021/04/06/podsecuritypolicy-deprecation-past-present-and-future/
[28]Kubernetes 1.25 计划删除的 API: https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-25
[29]Kubernetes 1.26 计划删除的 API: https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-26
[30]Kubernetes 1.21: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.21.md#deprecation
[31]Kubernetes 1.22: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.22.md#deprecation
[32]Kubernetes 1.23: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.23.md#deprecation
[33]Kubernetes 1.24: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.24.md#deprecation
About SUSE Rancher
Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为“2020年多云容器开发平台领导厂商”以及“2018年全球容器管理平台领导厂商”,被Gartner评为“2017年全球最酷的云基础设施供应商”。
目前Rancher在全球拥有超过三亿的核心镜像下载量,并拥有包括中国联通、中国平安、中国人寿、上汽集团、三星、施耐德电气、西门子、育碧游戏、LINE、WWK保险集团、澳电讯公司、德国铁路、厦门航空、新东方等全球著名企业在内的共40000家企业客户。
2020年12月,SUSE完成了RancherLabs的收购,Rancher成为了SUSE”创新无处不在(Innovate Everywhere)”企业愿景的关键组成部分。SUSE和Rancher共同为客户提供了无与伦比的自由和所向披靡的创新能力,通过混合云IT基础架构、云原生转型和IT运维解决方案,简化、现代化并加速企业数字化转型,推动创新无处不在。
当前,SUSE及Rancher在中国大陆及港澳台地区的业务,均由数硕软件(北京)有限公司承载。SUSE在国内拥有优秀的研发团队、技术支持团队和销售团队,将结合Rancher领先的云原生技术,为中国的企业客户提供更加及时和可信赖的技术支撑及服务保障。
原文始发于微信公众号(Rancher):Kubernetes 1.24的删除和弃用