API obsolètes de Kubernetes 1.16

La version 1.16 de Kubernetes ne diffuse plus les versions obsolètes des API spécifiques. Les versions actuelles des API sont disponibles depuis la version 1.10 pour toutes les versions compatibles de Google Kubernetes Engine (GKE).

Qu'est-ce qui a changé dans la version 1.16 ?

La plupart des API obsolètes sont d'anciennes API bêta qui sont passées de la version bêta à la version stable. Les API stables offrent des garanties de compatibilité à long terme et doivent être utilisées à la place des API bêta obsolètes.

Valeurs par défaut modifiées

Le tableau suivant décrit les modifications apportées aux valeurs par défaut des paramètres que vous ne définissez pas si vous effectuez le changement depuis apps/v1beta1.

Objet Modification Nouveau fonctionnement
DaemonSet spec.updateStrategy.type : OnDelete a été remplacé par RollingUpdate. Avec RollingUpdate, la modification des définitions DaemonSet recrée automatiquement les pods.
Déploiement spec.progressDeadlineSeconds : 2147483647 est passé à 600. Réduit la durée pendant laquelle les déploiements sont "en cours" avant d'être déclarés comme défaillants.
spec.revisionHistoryLimit : 2147483647 est passé à 10. Limite le nombre d'objets ReplicaSet qui subsistent avant d'être supprimés par le contrôleur de déploiement.
spec.strategy.rollingUpdate.maxSurge : augmenté à 25 %. Définit le nombre maximal de pods pouvant être créés par une mise à jour progressive par rapport au nombre de pods souhaité, spécifié dans specs.replicas.
spec.strategy.rollingUpdate.maxUnavailable : augmenté à 25 %. La mise à jour progressive ne se poursuit que lorsque le nombre de pods non disponibles est inférieur à ce nombre. S'il s'agit d'un pourcentage, il est indiqué dans specs.replicas.
StatefulSet spec.updateStrategy.type : OnDelete a été remplacé par RollingUpdate. Avec RollingUpdate, la modification des définitions StatefulSet recrée automatiquement les pods.

Préparer la mise à jour vers la version 1.16

Vous n'avez pas besoin de supprimer, ni de recréer les objets API. Tous les objets API persistants existants peuvent déjà être lus et mis à jour à l'aide des nouvelles versions d'API.

Toutefois, nous vous recommandons de migrer vos clients et vos fichiers manifestes avant de passer à Kubernetes 1.16. Les nouvelles versions d'API sont disponibles dans toutes les versions de GKE.

Dépannage

Localiser les clients API qui écrivent des données dans des API obsolètes

Les clusters dont la suite des opérations Google Cloud est activée peuvent utiliser la requête suivante pour identifier les clients qui écrivent des données dans des API obsolètes :

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")

Les versions obsolètes apparaissent après l'exécution de la commande kubectl get ... -o yaml

La commande kubectl get ... préfère la version extensions/v1beta1, si celle-ci est disponible sur le cluster en cours d'utilisation. Par exemple, la commande suivante obtient les déploiements extensions/v1beta1 sur un cluster 1.15 :

kubectl get deployments -o yaml

Après la mise à niveau des clusters vers Kubernetes 1.16, la même commande utilisera automatiquement la nouvelle API.

Vous pouvez spécifier explicitement un groupe d'API ou une version. Par exemple, pour récupérer des déploiements apps/v1, exécutez la commande suivante :

kubectl get deployments.v1.apps -o yaml

Ressources

Pour plus d'informations, consultez la documentation Open Source de Kubernetes :