Alibaba Cloud Container Compute Service (ACS) est une plateforme certifiée conforme à Kubernetes. Cette rubrique décrit les changements majeurs de Kubernetes 1.28, notamment les précautions de mise à niveau, les modifications importantes, les nouvelles fonctionnalités, les fonctionnalités et API obsolètes, ainsi que les feature gates.
Versions des composants
Le tableau suivant liste les versions des composants clés d'un cluster ACS.
|
Composant clé |
Version |
|
Kubernetes |
v1.28.3-aliyunacs.2 |
|
etcd |
v3.5.9 |
|
CoreDNS |
v1.9.3.10-7dfca203-aliyun |
|
CRI |
containerd 1.6.22.1-20240524143336 |
|
CSI |
v1.30.1-1.acs-685ce77-aliyun |
|
CNI |
Terway et TerwayControlplane v1.5.0 ou ultérieur |
Précautions de mise à niveau
|
Composant |
Considérations |
|
Plugins de volume de stockage CephFS et Ceph RBD |
Si votre cluster utilise les plugins de volume CephFS ou Ceph RBD, migrez vers un pilote hors arborescence et évaluez les risques potentiels en matière de compatibilité, de stabilité ou de performances. |
Concepts clés
Avant d'explorer les modifications et les obsolescences de cette version de Kubernetes, familiarisez-vous avec les concepts suivants.
Changements majeurs
-
Kubernetes v1.28 optimise la logique d'ordonnancement afin de réduire les tentatives inutiles, ce qui améliore les performances globales du scheduler.
Si vous utilisez un plugin de scheduler personnalisé, mettez-le à jour pour bénéficier de meilleures performances. Pour plus d'informations, consultez Modifications du framework d'ordonnancement.
Concernant la migration CSI, la communauté Kubernetes poursuit la migration des plugins de stockage intégrés vers des pilotes hors arborescence implémentant la norme CSI. La migration CSI a atteint le stade GA dans la version v1.25. Dans la version v1.27, l'API
storage.k8s.io/v1beta1et le plugin de stockage EBS intégré ont été supprimés. Dans la version v1.28, le code du plugin de volume CephFS intégré est supprimé, le pluginkubernetes.io/rbdest rendu obsolète, et vous devez passer au pilote CSI CephFS.-
Les vulnérabilités CVE suivantes sont corrigées dans la version 1.28.9-aliyun.1 :
CVE-2023-45288
CVE-2024-3177
CVE-2024-24786
Nouvelles fonctionnalités
Dans Kubernetes v1.28
La fonctionnalité d'arrêt non contrôlé de nœud est désormais disponible généralement (GA). Si un nœud s'arrête de manière inattendue (par exemple en raison d'une panne de courant), les applications avec état redémarrent sur un nœud sain, garantissant ainsi la continuité du service.
Le feature gate NodeOutOfServiceVolumeDetach passe au stade GA. Cela permet de détacher immédiatement les volumes des Pods terminés sur un nœud anormal, afin qu'ils puissent récupérer rapidement sur d'autres nœuds.
L'attribution rétroactive de StorageClass par défaut est désormais disponible généralement. Auparavant, si un PVC sans
storageClassNamespécifié existait avant la création d'une StorageClass par défaut, le PVC restait indéfiniment dans l'étatpending. Avec cette mise à jour, après la création d'une StorageClass par défaut, tous les PVC sansstorageClassNamespécifié sont automatiquement mis à jour pour utiliser la StorageClass par défaut.-
Deux nouvelles fonctionnalités gèrent les échecs de Job :
La JobPodReplacementPolicy (feature gate Alpha) garantit que les Pods de remplacement ne sont créés qu'après le passage des Pods d'origine à la phase
Failed(status.phase: Failed). Ce comportement diffère du précédent, où un Pod avec undeletionTimestampétait remplacé immédiatement, ce qui pouvait entraîner une concurrence entre deux Pods pour le même index et les ressources du nœud.La JobBackoffLimitPerIndex (feature gate Alpha) permet de définir une limite de tentatives pour des index spécifiques dans un Job indexé via le champ
.spec.backoffLimitPerIndex. Cela évite l'échec complet du Job lorsqu'un seul index échoue continuellement et atteint la limite globale.spec.backoffLimit.
Si un Job indexé est configuré avec un nombre de complétions (
completion) supérieur à 100 000 et un parallélisme (parallelism) supérieur à 10 000, le suivi de l'état de terminaison du Job peut s'avérer difficile en cas d'échec d'un grand nombre de Pods. Par conséquent, un message d'avertissement s'affiche si ces paramètres sont définis trop haut lors de la création d'un Job.Les règles de validation CRD incluent désormais les champs
reasonetfieldPath, permettant aux échecs de validation de retourner une raison spécifique et un chemin de champ. Pour plus d'informations, consultez Langage d'expression de validation CRD.Le filtrage des requêtes Webhook prend désormais en charge les expressions CEL, avec un maximum de 64 conditions de correspondance. Pour plus d'informations, consultez Correspondance des requêtes : matchConditions.
Le nouveau feature gate SidecarContainers ajoute une prise en charge native des conteneurs sidecar et permet d'optimiser l'ordre de démarrage des conteneurs. Par exemple, un conteneur sidecar de journalisation peut démarrer avant les autres conteneurs pour améliorer la fiabilité de la collecte des journaux. Pour plus d'informations, consultez Kubernetes v1.28 : Introduction des conteneurs sidecar natifs. Cette fonctionnalité est en stade Alpha dans la version v1.28 et est désactivée par défaut.
Le champ
.status.resizeStatusd'un PVC est remplacé par la map.status.allocatedResourceStatus, qui indique l'état d'une opération de redimensionnement de PVC. Pour plus d'informations, consultez PersistentVolumeClaimStatus.Les Pods gérés à la fois par des Jobs indexés et des StatefulSets incluent désormais un libellé d'index de Pod.
La ValidatingAdmissionPolicy (en stade Beta) offre une méthode déclarative pour valider les requêtes de ressources, alternative au déploiement de webhooks d'admission de validation. Elle prend en charge des règles de validation complexes écrites en expressions CEL. Le serveur API valide les requêtes par rapport aux expressions CEL et n'approuve que celles qui réussissent l'évaluation.
Le Kube Controller Manager ajoute le paramètre
--concurrent-cron-job-syncspour configurer la concurrence du contrôleur CronJob, ainsi que le paramètre--concurrent-job-syncspour le contrôleur Job. Pour plus d'informations, consultez --concurrent-cron-job-syncs et --concurrent-job-syncs.-
Le serveur API bénéficie des optimisations suivantes :
La consommation mémoire des opérations GetList depuis le cache est améliorée. Pour plus d'informations, consultez Données de test GetList.
Lors d'un arrêt contrôlé, les Endpoints de service Kubernetes sont désormais correctement supprimés, même s'il ne reste qu'un seul réplica du serveur API.
Le contrôleur OpenAPI v2 est configuré pour agréger paresseusement les informations CRD, et la spécification OpenAPI v2 est considérablement réduite. Si aucun client ne demande OpenAPI v2, cela réduit la consommation CPU et mémoire du serveur API et améliore les performances lors de l'installation d'un grand nombre de CRDs. Toutefois, la première requête client sera plus lente. Nous recommandons de mettre à niveau les clients pour prendre en charge OpenAPI v3.
Le nouveau feature gate Consistent Reads from Cache permet de servir les requêtes List depuis le cache watch avec une cohérence totale.
Des métriques de surveillance supplémentaires sont disponibles via l'endpoint metrics.
Fonctionnalités obsolètes
Dans Kubernetes v1.28
-
Le code du plugin de volume CephFS intégré a été supprimé.
Nous recommandons d'utiliser le pilote CSI CephFS à la place.
-
Le plugin de volume RBD (kubernetes.io/rbd) est obsolète et sera supprimé dans les versions futures.
Nous recommandons d'utiliser le pilote CSI CephFS à la place.
-
KMSv1 est obsolète. Pour continuer à utiliser KMSv1, vous devez définir le paramètre
--feature-gates=KMSv1=true. Pour plus d'informations, consultez Marquage de KMS v1beta1 comme obsolète.Nous recommandons d'utiliser KMSv2.
Les paramètres de démarrage du Kube Controller Manager
--volume-host-cidr-denylistet--volume-host-allow-local-loopbacksont obsolètes.-
Le paramètre kubelet
--azure-container-registry-configest obsolète.Nous recommandons d'utiliser les paramètres
--image-credential-provider-configet--image-credential-provider-bin-dirà la place. La création de pools de nœuds Windows n'est plus prise en charge.
API obsolètes
L'API CSIStorageCapacity expose la capacité de stockage disponible pour garantir que les Pods sont ordonnancés sur des nœuds disposant d'un stockage suffisant. La version d'API storage.k8s.io/v1beta1 de CSIStorageCapacity a été rendue obsolète dans la version v1.24 et supprimée dans la version v1.27.
Nous recommandons d'utiliser storage.k8s.io/v1, disponible depuis la version v1.24. Pour plus d'informations, consultez KEP Contraintes de capacité de stockage pour l'ordonnancement des Pods.
Feature gates
Cette section liste uniquement les changements majeurs. Pour plus d'informations, consultez Feature Gates.
Dans Kubernetes v1.28
NodeOutOfServiceVolumeDetach: Lorsqu'un nœud est marqué hors service avec le taintnode.kubernetes.io/out-of-service, les Pods qui ne tolèrent pas ce taint sont supprimés de force et leurs volumes sont immédiatement détachés. Ce feature gate est GA dans la version v1.28 et est toujours activé.AdmissionWebhookMatchCondition: Activé par défaut, ce feature gate permet aux webhooks d'utiliser des expressions CEL dans leurs conditions de correspondance.UnknownVersionInteroperabilityProxy: Cette fonctionnalité est en stade Alpha. Elle assure le proxy des requêtes vers le serveur API approprié lorsque plusieurs versions du serveur API coexistent. Pour plus d'informations, consultez Proxy de versions mixtes.IPTablesOwnershipCleanup: Cette fonctionnalité est GA. Kubelet ne crée plus les chaînes iptables KUBE-MARK-DROP et KUBE-MARK-MASQ.ConsistentListFromCache: Cette fonctionnalité est en stade Alpha. Elle permet au serveur API de servir les requêtes List depuis le cache watch avec une cohérence totale.ProbeTerminationGracePeriod: Cette fonctionnalité est GA et activée par défaut. Elle permet de définir le terminationGracePeriodSeconds au niveau de la probe.Plusieurs feature gates passés au stade GA ont été supprimés, notamment
DelegateFSGroupToCSIDriver,DevicePlugins,KubeletCredentialProviders,MixedProtocolLBService,ServiceInternalTrafficPolicy,ServiceIPStaticSubrangeetEndpointSliceTerminatingCondition.
Références
Pour consulter les journaux de modifications complets de Kubernetes v1.27 et v1.28, reportez-vous à CHANGELOG-1.27 et CHANGELOG-1.28.