Kubernetes 1.16 deprecated APIs

The Kubernetes 1.16 release no longer serves long-deprecated versions of specific APIs. The current API versions have been available since v1.10 and are available on all supported versions of Google Kubernetes Engine (GKE).

What's changed in 1.16

Most of the deprecated APIs are former Beta APIs that have since graduated from Beta to Stable. The Stable APIs provide longer-term compatibility guarantees and should be used in place of the deprecated Beta APIs.

Changed defaults

The following table describes changes for the default values of parameters that you don't define if you are moving from apps/v1beta1.

Object Change New behavior
DaemonSet spec.updateStrategy.type: OnDelete changed to RollingUpdate With RollingUpdate, changing DaemonSet definitions automatically recreate Pods.
Deployment spec.progressDeadlineSeconds: 2147483647 decreased to 600 Lowers the time Deployments remain "in progress" before being declared as failed.
spec.revisionHistoryLimit: 2147483647 decreased to 10 Limits the number of ReplicaSet objects that are left before being deleted by the Deployment controller.
spec.strategy.rollingUpdate.maxSurge: increased to 25% Defines the maximum number of Pods that a rolling update can create over the desired number of Pods specified in specs.replicas.
spec.strategy.rollingUpdate.maxUnavailable: increased to 25% The rolling update only continues when the number of unavailable Pods are below this number. If it's a percentage, it's specified in spec.replicas.
StatefulSet spec.updateStrategy.type: OnDelete changed to RollingUpdate With RollingUpdate, changing StatefulSet definitions automatically recreate Pods.

Preparing to upgrade to 1.16

You do not need to delete and recreate any of your API objects. All existing persisted API objects can already be read and updated using the new API versions.

However, we recommend that you migrate your clients and manifests before upgrading to Kubernetes 1.16. All GKE versions have the new APIs versions available.

Troubleshooting

Locating API clients writing to deprecated APIs

Clusters with Google Cloud's operations suite enabled can use the following query to identify clients that write to deprecated APIs:

resource.type="k8s_cluster"
resource.labels.cluster_name="$CLUSTER_NAME"
protoPayload.authenticationInfo.principalEmail:("system:serviceaccount" OR "@")
protoPayload.request.apiVersion=("extensions/v1beta1" OR "apps/v1beta1" OR "apps/v1beta2")
protoPayload.request.kind!="Ingress"
NOT ("kube-system")

Deprecated versions appear after running kubectl get ... -o yaml

The kubectl get ... prefers the extensions/v1beta1 version if it is available on the cluster being used. For example, the following command gets extensions/v1beta1 deployments on a 1.15 cluster:

kubectl get deployments -o yaml

After upgrading the clusters to Kubernetes 1.16, the same command will automatically use the new API.

You can explicitly specify an API group or version. For example, to fetch apps/v1 deployments, run:

kubectl get deployments.v1.apps -o yaml

Resources

More information is available in the OSS Kubernetes documentation: