Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Use OpenKruise to deploy cloud-native applications

Dernière mise à jour :Aug 11, 2026

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.

OpenKruise architecture

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

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. 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.

  3. Sur la page Add-ons, cliquez sur l'onglet Applications. Dans la section ack-kruise, cliquez sur Install.

  4. 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.

Remarque

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

  1. Créez un fichier nommé cloneset.yaml avec 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-place

    Paramètres clés :

    Paramètre Description
    type Stratégie de mise à jour : ReCreate, InPlaceIfPossible ou InPlaceOnly. Consultez les Stratégies de mise à jour.
    maxUnavailable Nombre maximal ou pourcentage de pods pouvant être indisponibles pendant une mise à jour.
    gracePeriodSeconds Délai en secondes que le contrôleur attend après avoir marqué un pod comme NotReady avant d'effectuer la mise à jour sur place.
  2. Appliquez le manifeste à votre cluster :

    kubectl create -f cloneset.yaml

    Résultat attendu :

    cloneset.apps.kruise.io/demo-clone created

Vérifier le CloneSet

  1. Vérifiez l'état des pods :

    kubectl get pod

    Ré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
  2. Vérifiez l'état du CloneSet :

    kubectl get clone

    Résultat attendu :

    NAME         DESIRED   UPDATED   UPDATED_READY   READY   TOTAL   AGE
    demo-clone   5         5         5               5       5       46s

    Champs de sortie :

    Champ Champ d'état Kubernetes Description
    DESIRED spec.replicas Nombre souhaité de pods
    UPDATED status.updatedReplicas Pods mis à jour vers la dernière version
    UPDATED_READY status.updatedReadyReplicas Pods prêts parmi ceux qui sont à la dernière version
    READY status.readyReplicas Total des pods prêts, toutes versions confondues
    TOTAL status.replicas Total 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

  1. Créez un fichier nommé statefulset.yaml avec 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-place

    Paramètres clés :

    Paramètre Description
    podUpdatePolicy Stratégie de mise à jour : ReCreate, InPlaceIfPossible ou InPlaceOnly. Consultez les Stratégies de mise à jour.
    maxUnavailable Nombre maximal ou pourcentage de pods pouvant être indisponibles pendant une mise à jour.
    gracePeriodSeconds Délai en secondes que le contrôleur attend après avoir marqué un pod comme NotReady avant d'effectuer la mise à jour sur place.
  2. Appliquez le manifeste à votre cluster :

    kubectl create -f statefulset.yaml

    Résultat attendu :

    statefulset.apps.kruise.io/demo-asts created

Vérifier l'Advanced StatefulSet

  1. Vérifiez l'état des pods :

    kubectl get pod

    Ré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
  2. Vérifiez l'état de l'Advanced StatefulSet :

    kubectl get asts

    Résultat attendu :

    NAME        DESIRED   CURRENT   UPDATED   READY   AGE
    demo-asts   3         3         3         3       3h30m

    Champs de sortie :

    Champ Champ d'état Kubernetes Description
    DESIRED spec.replicas Nombre souhaité de pods
    UPDATED status.updatedReplicas Pods à la dernière version
    READY status.readyReplicas Total des pods prêts
    TOTAL status.replicas Total des pods gérés par cet Advanced StatefulSet