|
| 1 | +--- |
| 2 | +layout: blog |
| 3 | +title: 'Kubernetes Removals and Major Changes In v1.31' |
| 4 | +date: 2024-07-19 |
| 5 | +slug: kubernetes-1-31-upcoming-changes |
| 6 | +author: > |
| 7 | + Abigail McCarthy, |
| 8 | + Edith Puclla, |
| 9 | + Matteo Bianchi, |
| 10 | + Rashan Smith, |
| 11 | + Yigit Demirbas |
| 12 | +--- |
| 13 | + |
| 14 | +As Kubernetes develops and matures, features may be deprecated, removed, or replaced with better ones for the project's overall health. |
| 15 | +This article outlines some planned changes for the Kubernetes v1.31 release that the release team feels you should be aware of for the continued maintenance of your Kubernetes environment. |
| 16 | +The information listed below is based on the current status of the v1.31 release. |
| 17 | +It may change before the actual release date. |
| 18 | + |
| 19 | +## The Kubernetes API removal and deprecation process |
| 20 | +The Kubernetes project has a well-documented [deprecation policy](/docs/reference/using-api/deprecation-policy/) for features. |
| 21 | +This policy states that stable APIs may only be deprecated when a newer, stable version of that API is available and that APIs have a minimum lifetime for each stability level. |
| 22 | +A deprecated API has been marked for removal in a future Kubernetes release. |
| 23 | +It will continue to function until removal (at least one year from the deprecation), but usage will display a warning. |
| 24 | +Removed APIs are no longer available in the current version, so you must migrate to using the replacement. |
| 25 | + |
| 26 | +* Generally available (GA) or stable API versions may be marked as deprecated but must not be removed within a major version of Kubernetes. |
| 27 | + |
| 28 | +* Beta or pre-release API versions must be supported for 3 releases after the deprecation. |
| 29 | + |
| 30 | +* Alpha or experimental API versions may be removed in any release without prior deprecation notice. |
| 31 | + |
| 32 | +Whether an API is removed because a feature graduated from beta to stable or because that API did not succeed, all removals comply with this deprecation policy. |
| 33 | +Whenever an API is removed, migration options are communicated in the [documentation](/docs/reference/using-api/deprecation-guide/). |
| 34 | + |
| 35 | +## A note about SHA-1 signature support |
| 36 | + |
| 37 | +In [go1.18](https://go.dev/doc/go1.18#sha1) (released in March 2022), the crypto/x509 library started to reject certificates signed with a SHA-1 hash function. |
| 38 | +While SHA-1 is established to be unsafe and publicly trusted Certificate Authorities have not issued SHA-1 certificates since 2015, there might still be cases in the context of Kubernetes where user-provided certificates are signed using a SHA-1 hash function through private authorities with them being used for Aggregated API Servers or webhooks. |
| 39 | +If you have relied on SHA-1 based certificates, you must explicitly opt back into its support by setting `GODEBUG=x509sha1=1` in your environment. |
| 40 | + |
| 41 | +Given Go's [compatibility policy for GODEBUGs](https://go.dev/blog/compat), the `x509sha1` GODEBUG and the support for SHA-1 certificates will [fully go away in go1.24](https://tip.golang.org/doc/go1.23) which will be released in the first half of 2025. |
| 42 | +If you rely on SHA-1 certificates, please start moving off them. |
| 43 | + |
| 44 | +Please see [Kubernetes issue #125689](https://github.com/kubernetes/kubernetes/issues/125689) to get a better idea of timelines around the support for SHA-1 going away, when Kubernetes releases plans to adopt go1.24, and for more details on how to detect usage of SHA-1 certificates via metrics and audit logging. |
| 45 | + |
| 46 | +## Deprecations and removals in Kubernetes 1.31 |
| 47 | + |
| 48 | + |
| 49 | +### Deprecation of `status.nodeInfo.kubeProxyVersion` field for Nodes ([KEP 4004](https://github.com/kubernetes/enhancements/issues/4004)) |
| 50 | + |
| 51 | +The `.status.nodeInfo.kubeProxyVersion` field of Nodes is being deprecated in Kubernetes v1.31, |
| 52 | +and will be removed in a later release. |
| 53 | +It's being deprecated because the value of this field wasn't (and isn't) accurate. |
| 54 | +This field is set by the kubelet, which does not have reliable information about the kube-proxy version or whether kube-proxy is running. |
| 55 | + |
| 56 | +The `DisableNodeKubeProxyVersion` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) will be set to `true` in by default in v1.31 and the kubelet will no longer attempt to set the `.status.kubeProxyVersion` field for its associated Node. |
| 57 | + |
| 58 | +### Removal of all in-tree integrations with cloud providers |
| 59 | + |
| 60 | +As highlighted in a [previous article](/blog/2024/05/20/completing-cloud-provider-migration/), the last remaining in-tree support for cloud provider integration will be removed as part of the v1.31 release. |
| 61 | +This doesn't mean you can't integrate with a cloud provider, however you now **must** use the |
| 62 | +recommended approach using an external integration. Some integrations are part of the Kubernetes |
| 63 | +project and others are third party software. |
| 64 | + |
| 65 | +This milestone marks the completion of the externalization process for all cloud providers' integrations from the Kubernetes core ([KEP-2395](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/2395-removing-in-tree-cloud-providers/README.md)), a process started with Kubernetes v1.26. |
| 66 | +This change helps Kubernetes to get closer to being a truly vendor-neutral platform. |
| 67 | + |
| 68 | +For further details on the cloud provider integrations, read our [v1.29 Cloud Provider Integrations feature blog](/blog/2023/12/14/cloud-provider-integration-changes/). |
| 69 | +For additional context about the in-tree code removal, we invite you to check the ([v1.29 deprecation blog](/blog/2023/11/16/kubernetes-1-29-upcoming-changes/#removal-of-in-tree-integrations-with-cloud-providers-kep-2395-https-kep-k8s-io-2395)). |
| 70 | + |
| 71 | +The latter blog also contains useful information for users who need to migrate to version v1.29 and later. |
| 72 | + |
| 73 | + |
| 74 | +### Removal of kubelet `--keep-terminated-pod-volumes` command line flag |
| 75 | + |
| 76 | +The kubelet flag `--keep-terminated-pod-volumes`, which was deprecated in 2017, will be removed as |
| 77 | +part of the v1.31 release. |
| 78 | + |
| 79 | +You can find more details in the pull request [#122082](https://github.com/kubernetes/kubernetes/pull/122082). |
| 80 | + |
| 81 | +### Removal of CephFS volume plugin |
| 82 | + |
| 83 | +[CephFS volume plugin](/docs/concepts/storage/volumes/#cephfs) was removed in this release and the `cephfs` volume type became non-functional. |
| 84 | + |
| 85 | +It is recommended that you use the [CephFS CSI driver](https://github.com/ceph/ceph-csi/) as a third-party storage driver instead. If you were using the CephFS volume plugin before upgrading the cluster version to v1.31, you must re-deploy your application to use the new driver. |
| 86 | + |
| 87 | +CephFS volume plugin was formally marked as deprecated in v1.28. |
| 88 | + |
| 89 | +### Removal of Ceph RBD volume plugin |
| 90 | + |
| 91 | +The v1.31 release will remove the [Ceph RBD volume plugin](/docs/concepts/storage/volumes/#rbd) and its CSI migration support, making the `rbd` volume type non-functional. |
| 92 | + |
| 93 | +It's recommended that you use the [RBD CSI driver](https://github.com/ceph/ceph-csi/) in your clusters instead. |
| 94 | +If you were using Ceph RBD volume plugin before upgrading the cluster version to v1.31, you must re-deploy your application to use the new driver. |
| 95 | + |
| 96 | +The Ceph RBD volume plugin was formally marked as deprecated in v1.28. |
| 97 | + |
| 98 | +### Deprecation of non-CSI volume limit plugins in kube-scheduler |
| 99 | + |
| 100 | +The v1.31 release will deprecate all non-CSI volume limit scheduler plugins, and will remove some |
| 101 | +already deprected plugins from the [default plugins](/docs/reference/scheduling/config/), including: |
| 102 | + |
| 103 | +- `AzureDiskLimits` |
| 104 | +- `CinderLimits` |
| 105 | +- `EBSLimits` |
| 106 | +- `GCEPDLimits` |
| 107 | + |
| 108 | +It's recommended that you use the `NodeVolumeLimits` plugin instead because it can handle the same functionality as the removed plugins since those volume types have been migrated to CSI. |
| 109 | +Please replace the deprecated plugins with the `NodeVolumeLimits` plugin if you explicitly use them in the [scheduler config](/docs/reference/scheduling/config/). |
| 110 | +The `AzureDiskLimits`, `CinderLimits`, `EBSLimits`, and `GCEPDLimits` plugins will be removed in a future release. |
| 111 | + |
| 112 | +These plugins will be removed from the default scheduler plugins list as they have been deprecated since Kubernetes v1.14. |
| 113 | + |
| 114 | +## Looking ahead |
| 115 | +The official list of API removals planned for [Kubernetes v1.32](/docs/reference/using-api/deprecation-guide/#v1-32) include: |
| 116 | + |
| 117 | +* The `flowcontrol.apiserver.k8s.io/v1beta3` API version of FlowSchema and PriorityLevelConfiguration will be removed. |
| 118 | +To prepare for this, you can edit your existing manifests and rewrite client software to use the `flowcontrol.apiserver.k8s.io/v1 API` version, available since v1.29. |
| 119 | +All existing persisted objects are accessible via the new API. Notable changes in flowcontrol.apiserver.k8s.io/v1beta3 include that the PriorityLevelConfiguration `spec.limited.nominalConcurrencyShares` field only defaults to 30 when unspecified, and an explicit value of 0 is not changed to 30. |
| 120 | + |
| 121 | +For more information, please refer to the [API deprecation guide](/docs/reference/using-api/deprecation-guide/#v1-32). |
| 122 | + |
| 123 | +## Want to know more? |
| 124 | +The Kubernetes release notes announce deprecations. |
| 125 | +We will formally announce the deprecations in [Kubernetes v1.31](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.31.md#deprecation) as part of the CHANGELOG for that release. |
| 126 | + |
| 127 | +You can see the announcements of pending deprecations in the release notes for: |
| 128 | + |
| 129 | +* [Kubernetes v1.30](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.30.md#deprecation) |
| 130 | + |
| 131 | +* [Kubernetes v1.29](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.29.md#deprecation) |
| 132 | + |
| 133 | +* [Kubernetes v1.28](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.28.md#deprecation) |
| 134 | + |
| 135 | +* [Kubernetes v1.27](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.27.md#deprecation) |
| 136 | + |
| 137 | + |
0 commit comments