OpenKruise étend Kubernetes natif avec des fonctionnalités avancées de gestion des charges de travail que l'API Kubernetes standard ne prend pas en charge, notamment les mises à jour sur place des pods, l'injection indépendante de sidecars et le préchargement d'images. Cette rubrique explique comment installer OpenKruise sur un cluster ACK et déployer des applications à l'aide de CloneSet et d'Advanced StatefulSet.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Fonctionnement d'OpenKruise
OpenKruise est un moteur open source d'automatisation d'applications cloud-native développé par Alibaba Cloud. Il fait partie du projet Sandbox de la Cloud Native Computing Foundation (CNCF) et s'exécute nativement au sein des clusters Kubernetes en tant qu'extension standard.
OpenKruise se compose de trois composants :
| Composant | Description |
|---|---|
| Kruise-manager | Plan de contrôle central, déployé sous forme de Deployment dans le namespace kruise-system. Il exécute les contrôleurs et les webhooks qui implémentent des fonctionnalités telles que les mises à jour sur place et la gestion des sidecars. |
| Kruise-daemon | Déployé sous forme de DaemonSet sur chaque nœud. Il gère les opérations au niveau des nœuds, notamment le préchargement d'images et le redémarrage des conteneurs. |
| Kruise-Rollout | Extension autonome qui ajoute un modèle de déploiement complet (Rollout) à Kubernetes. Elle prend en charge les canary releases, les déploiements blue-green et les tests A/B, coordonnés avec le trafic en direct et les instances en cours d'exécution. |

Contrôleurs
OpenKruise propose cinq contrôleurs de charges de travail. Chacun constitue un surensemble de son équivalent natif dans Kubernetes :
| Contrôleur | Équivalent natif | Compatibilité YAML | Fonctionnalités clés |
|---|---|---|---|
| CloneSet | Deployment | Non entièrement compatible | Mises à jour sur place, scale-in ciblé, scale-out progressif, déploiements par phases |
| Advanced StatefulSet | StatefulSet | Entièrement compatible — modifiez uniquement apiVersion |
Mises à jour sur place, gestion parallèle des pods, déploiements par phases |
| Advanced DaemonSet | DaemonSet | Entièrement compatible — modifiez uniquement apiVersion |
Mises à jour à chaud, déploiements par phases, ordonnancement basé sur les labels de nœud |
| SidecarSet | N/A | Ressource personnalisée autonome | Gestion indépendante du cycle de vie des sidecars, injection automatique, mises à jour sur place des sidecars |
| UnitedDeployment | N/A | Ressource personnalisée autonome | Gestion des sous-charges de travail multi-régions via CloneSet, StatefulSet et Advanced StatefulSet |
Stratégies de mise à jour
Les contrôleurs OpenKruise prennent en charge trois stratégies de mise à jour :
| Stratégie | Comportement | Cas d'utilisation |
|---|---|---|
ReCreate |
Supprime les anciens pods et les PersistentVolumeClaims (PVC), puis en crée de nouveaux. | Comportement par défaut de Kubernetes ; à utiliser lorsque l'identité du pod n'a pas besoin d'être conservée. |
InPlaceIfPossible |
Tente d'abord une mise à jour sur place ; bascule vers une recréation si le changement ne peut pas être appliqué sur place. | Recommandé pour la plupart des charges de travail en production. |
InPlaceOnly |
Effectue toujours des mises à jour sur place ; rejette les modifications nécessitant la recréation du pod. | À utiliser lorsque l'adresse IP, le nom et le nœud du pod doivent rester inchangés. |
Pourquoi choisir les mises à jour sur place ?
Les mises à jour progressives standards de Kubernetes recréent les pods, ce qui entraîne un changement de nom, d'adresse IP et de nœud hôte. Une mise à jour sur place modifie directement le pod en cours d'exécution :
Aucune replanification — le pod reste sur le même nœud
Téléchargement d'images plus rapide — la plupart des couches d'image sont déjà mises en cache sur le nœud
Les autres conteneurs du pod ne sont pas affectés pendant la mise à jour
Installer OpenKruise
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom du cluster que vous souhaitez gérer. Dans le volet de navigation de gauche, cliquez sur Add-ons.
Sur la page Add-ons, cliquez sur l'onglet Applications. Dans la section ack-kruise, cliquez sur Install.
Dans la boîte de dialogue Install Ack-kruise, confirmez les informations du composant et cliquez sur OK.
Déployer une application sans état avec CloneSet
CloneSet gère les applications sans état et offre toutes les fonctionnalités de Deployment, ainsi que des politiques avancées telles que les mises à jour sur place et la suppression ciblée de pods.
Le schéma YAML de CloneSet n'est pas entièrement compatible avec un Deployment natif. Ne convertissez pas directement un manifeste Deployment existant ; créez plutôt une nouvelle ressource CloneSet.
Créer un CloneSet
-
Créez un fichier nommé
cloneset.yamlavec le contenu suivant :apiVersion: apps.kruise.io/v1alpha1 kind: CloneSet metadata: name: demo-clone spec: replicas: 5 selector: matchLabels: app: guestbook template: # Pod template structure is identical to a Deployment metadata: labels: app: guestbook spec: containers: - name: guestbook image: openkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/demo:1.10.2 env: - name: test value: foo updateStrategy: type: InPlaceIfPossible # Use in-place upgrade if possible; fall back to recreate maxUnavailable: 20% # Allow up to 20% of pods to be unavailable during an upgrade inPlaceUpdateStrategy: gracePeriodSeconds: 3 # Seconds to wait after marking the pod NotReady before upgrading in-placeParamètres clés :
Paramètre Description typeStratégie de mise à jour : ReCreate,InPlaceIfPossibleouInPlaceOnly. Consultez les Stratégies de mise à jour.maxUnavailableNombre maximal ou pourcentage de pods pouvant être indisponibles pendant une mise à jour. gracePeriodSecondsDélai en secondes que le contrôleur attend après avoir marqué un pod comme NotReady avant d'effectuer la mise à jour sur place. -
Appliquez le manifeste à votre cluster :
kubectl create -f cloneset.yamlRésultat attendu :
cloneset.apps.kruise.io/demo-clone created
Vérifier le CloneSet
-
Vérifiez l'état des pods :
kubectl get podRésultat attendu :
NAME READY STATUS RESTARTS AGE demo-clone-5b9kl 1/1 Running 0 3s demo-clone-6xjdg 1/1 Running 0 3s demo-clone-bvmdj 1/1 Running 0 3s demo-clone-dm22s 1/1 Running 0 3s demo-clone-rbpg9 1/1 Running 0 3s -
Vérifiez l'état du CloneSet :
kubectl get cloneRésultat attendu :
NAME DESIRED UPDATED UPDATED_READY READY TOTAL AGE demo-clone 5 5 5 5 5 46sChamps de sortie :
Champ Champ d'état Kubernetes Description DESIRED spec.replicasNombre souhaité de pods UPDATED status.updatedReplicasPods mis à jour vers la dernière version UPDATED_READY status.updatedReadyReplicasPods prêts parmi ceux qui sont à la dernière version READY status.readyReplicasTotal des pods prêts, toutes versions confondues TOTAL status.replicasTotal des pods gérés par ce CloneSet
Déployer une application avec état à l'aide d'Advanced StatefulSet
Advanced StatefulSet est un remplacement direct du StatefulSet natif. Son schéma YAML est entièrement compatible ; la seule modification requise concerne le paramètre apiVersion.
Migrer depuis un StatefulSet natif
Pour utiliser Advanced StatefulSet avec un manifeste StatefulSet existant, modifiez une seule ligne :
- apiVersion: apps/v1
+ apiVersion: apps.kruise.io/v1alpha1
kind: StatefulSet
Le reste du manifeste reste inchangé.
Créer un Advanced StatefulSet
-
Créez un fichier nommé
statefulset.yamlavec le contenu suivant :apiVersion: apps.kruise.io/v1alpha1 kind: StatefulSet metadata: name: demo-asts spec: replicas: 3 selector: matchLabels: app: guestbook-sts podManagementPolicy: Parallel template: # Pod template structure is identical to a native StatefulSet metadata: labels: app: guestbook-sts spec: containers: - name: guestbook image: openkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/demo:1.10.2 env: - name: test value: foo readinessGates: - conditionType: InPlaceUpdateReady updateStrategy: type: RollingUpdate rollingUpdate: podUpdatePolicy: InPlaceIfPossible # Use in-place upgrade if possible; fall back to recreate maxUnavailable: 20% # Allow up to 20% of pods to be unavailable during an upgrade inPlaceUpdateStrategy: gracePeriodSeconds: 3 # Seconds to wait after marking the pod NotReady before upgrading in-placeParamètres clés :
Paramètre Description podUpdatePolicyStratégie de mise à jour : ReCreate,InPlaceIfPossibleouInPlaceOnly. Consultez les Stratégies de mise à jour.maxUnavailableNombre maximal ou pourcentage de pods pouvant être indisponibles pendant une mise à jour. gracePeriodSecondsDélai en secondes que le contrôleur attend après avoir marqué un pod comme NotReady avant d'effectuer la mise à jour sur place. -
Appliquez le manifeste à votre cluster :
kubectl create -f statefulset.yamlRésultat attendu :
statefulset.apps.kruise.io/demo-asts created
Vérifier l'Advanced StatefulSet
-
Vérifiez l'état des pods :
kubectl get podRésultat attendu :
NAME READY STATUS RESTARTS AGE demo-asts-0 1/1 Running 0 3h29m demo-asts-1 1/1 Running 0 3h29m demo-asts-2 1/1 Running 0 3h29m -
Vérifiez l'état de l'Advanced StatefulSet :
kubectl get astsRésultat attendu :
NAME DESIRED CURRENT UPDATED READY AGE demo-asts 3 3 3 3 3h30mChamps de sortie :
Champ Champ d'état Kubernetes Description DESIRED spec.replicasNombre souhaité de pods UPDATED status.updatedReplicasPods à la dernière version READY status.readyReplicasTotal des pods prêts TOTAL status.replicasTotal des pods gérés par cet Advanced StatefulSet