Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:manage ack edge applications using yurtappset

Dernière mise à jour :Sep 09, 2026

YurtAppSet vous permet de déployer et de gérer des applications sur plusieurs pools de nœuds dans un cluster ACK Edge à partir d'une configuration unique. Il surveille les modifications apportées aux libellés des pools de nœuds et maintient automatiquement la synchronisation des workloads. Vous pouvez ainsi mettre à jour une version ou mettre à l'échelle une application à l'échelle du cluster sans intervenir individuellement sur chaque pool de nœuds.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un cluster ACK Edge

  • kubectl configuré pour se connecter au cluster

  • Des permissions permettant de créer et de gérer des ressources personnalisées dans le cluster

Choisissez votre approche

Version du cluster Ressource recommandée
1,26 ou ultérieure YurtAppSet (apps.openyurt.io/v1beta1)
Antérieure à 1,26 UnitedDeployment (apps.kruise.io/v1alpha1)

Contexte

Dans le domaine de l'informatique en périphérie (edge computing), la même application s'exécute généralement sur des nœuds situés dans plusieurs régions. L'approche traditionnelle, qui consiste à attribuer des libellés aux nœuds de chaque région et à créer un Deployment distinct par région, devient ingérable à mesure que le nombre de régions augmente :

Traditional multi-region deployment

  • Mises à jour fastidieuses : Chaque changement de version nécessite la mise à jour manuelle de tous les Deployments.

  • Gestion complexe : À mesure que le nombre de régions augmente, le suivi et la maintenance de Deployments distincts deviennent sources d'erreurs.

  • Configuration redondante : Les Deployments répartis entre les régions partagent des spécifications presque identiques, ce qui rend les modifications lourdes à appliquer.

YurtAppSet résout ces problèmes grâce à trois mécanismes principaux :

Mécanisme Objectif
workloadTemplate Définit un modèle de workload unique appliqué à tous les pools de nœuds cibles
nodepoolSelector Sélectionne les pools de nœuds cibles par libellé ; détecte automatiquement les pools de nœuds nouvellement créés ou supprimés
workloadTweaks Remplace des champs spécifiques (réplicas, image de conteneur, correctifs arbitraires) pour des pools de nœuds individuels sans créer de workloads séparés

YurtAppSet architecture

YurtAppSet (version 1.26 du cluster ou ultérieure)

Créer une instance YurtAppSet

Le fichier YAML suivant crée un YurtAppSet qui déploie un workload nginx sur deux pools de nœuds. Le pool de nœuds np1xxxxxx utilise 2 réplicas de nginx:1.19.1 ; le pool de nœuds np2xxxxxx remplace les valeurs par défaut avec 3 réplicas de nginx:1.20.1.

apiVersion: apps.openyurt.io/v1beta1
kind: YurtAppSet
metadata:
  name: example
  namespace: default
spec:
  revisionHistoryLimit: 5
  pools:
  - np1xxxxxx
  - np2xxxxxx
  nodepoolSelector:
    matchLabels:
      yurtappset.openyurt.io/type: "nginx"
  workload:
    workloadTemplate:
      deploymentTemplate:
        metadata:
          labels:
            app: example
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: example
          template:
            metadata:
              labels:
                app: example
            spec:
              containers:
              - image: nginx:1.19.1
                imagePullPolicy: Always
                name: nginx
    workloadTweaks:
    - pools:
      - np2xxxxxx
      tweaks:
        replicas: 3
        containerImages:
        - name: nginx
          targetImage: nginx:1.20.1
        patches:
        - path: /metadata/labels/test
          operation: add
          value: test

Référence des champs YAML

Champs Spec

Champ Description Obligatoire
spec.pools Liste des noms de pools de nœuds sur lesquels effectuer le déploiement. Si pools et nodepoolSelector sont tous deux définis, l'union des deux est utilisée. Non
spec.nodepoolSelector Sélectionne les pools de nœuds en faisant correspondre leurs libellés (metadata.labels sur la ressource NodePool). Inclut automatiquement les nouveaux pools de nœuds correspondants et exclut ceux qui sont supprimés. Non
spec.workload.workloadTemplate Modèle de workload à déployer. Prend en charge deploymentTemplate et statefulSetTemplate. Oui
spec.workload.workloadTweaks Remplacements appliqués par pool de nœuds en plus du workloadTemplate. Non
Privilégiez nodepoolSelector plutôt que pools pour la plupart des déploiements. La sélection basée sur les libellés gère automatiquement les pools de nœuds nouvellement ajoutés ou supprimés sans nécessiter de modification de la configuration YurtAppSet. Pour modifier les libellés NodePool, modifiez le code YAML du NodePool correspondant sur la page Custom Resources de la console du cluster.

Champs workloadTweaks

Champ Description Obligatoire
workloadTweaks[*].pools Pools de nœuds (par nom) auxquels s'applique ce remplacement. Non
workloadTweaks[*].nodepoolSelector Pools de nœuds (par libellé) auxquels s'applique ce remplacement. Non
workloadTweaks[*].tweaks.replicas Remplace le nombre de réplicas pour les pools de nœuds sélectionnés. Non
workloadTweaks[*].tweaks.containerImages Remplace l'image de conteneur pour les pools de nœuds sélectionnés. Non
workloadTweaks[*].tweaks.patches Applique des correctifs de champ arbitraires au workloadTemplate pour les pools de nœuds sélectionnés. Non
tweaks.patches[*].path Chemin JSON du champ à modifier dans le workloadTemplate. Non
tweaks.patches[*].operation Opération de correctif : add, remove ou replace. Non
tweaks.patches[*].value Valeur à définir. S'applique uniquement aux opérations add et replace. Non

Champs Status

Champ Description
status.conditions État actuel du YurtAppSet, y compris l'état de sélection des pools de nœuds et l'état des workloads.
status.readyWorkloads Nombre de workloads gérés dont tous les réplicas sont prêts.
status.updatedWorkloads Nombre de workloads gérés dont tous les réplicas sont mis à jour vers la dernière version.
status.totalWorkloads Nombre total de workloads gérés par ce YurtAppSet.

UnitedDeployment (version du cluster antérieure à 1,26)

Créer une instance UnitedDeployment

apiVersion: apps.kruise.io/v1alpha1
kind: UnitedDeployment
metadata:
  name: example
  namespace: default
spec:
  revisionHistoryLimit: 5
  selector:
    matchLabels:
      app: example
  template:
    deploymentTemplate:
      metadata:
        creationTimestamp: null
        labels:
          app: example
      spec:
        selector:
          matchLabels:
            app: example
        template:
          metadata:
            creationTimestamp: null
            labels:
              app: example
          spec:
            containers:
            - image: nginx:1.19.3
              imagePullPolicy: Always
              name: nginx
            dnsPolicy: ClusterFirst
            restartPolicy: Always
  topology:
    subsets:
    - name: cloud
      nodeSelectorTerm:
        matchExpressions:
        - key: alibabacloud.com/nodepool-id
          operator: In
          values:
          - np4b9781c40f0e46c581b2cf2b6160****
      replicas: 2
    - name: edge
      nodeSelectorTerm:
        matchExpressions:
        - key: alibabacloud.com/nodepool-id
          operator: In
          values:
          - np47832359db2e4843aa13e8b76f83****
      replicas: 2
      tolerations:
      - effect: NoSchedule
        key: apps.openyurt.io/taints
        operator: Exists

Référence des champs YAML

Champ Description
spec.workloadTemplate Modèle de workload à déployer. Prend en charge deploymentTemplate et statefulSetTemplate.
spec.topology.subsets Liste des pools de nœuds sur lesquels effectuer le déploiement.
spec.topology.subsets[*].name Nom du pool de nœuds.
spec.topology.subsets[*].nodeSelectorTerm Configuration de l'affinité des nœuds. Utilisez alibabacloud.com/nodepool-id comme clé et l'ID du pool de nœuds comme valeur. Pour trouver l'ID du pool de nœuds, accédez à la page Node Pools et consultez la colonne Name.
spec.topology.subsets[*].tolerations Configuration des tolérations pour le pool de nœuds.
spec.topology.subsets[*].replicas Nombre de réplicas de Pod dans le pool de nœuds.

Gérer les applications edge

Une fois qu'un YurtAppSet est en cours d'exécution, toutes les opérations du cycle de vie fonctionnent en modifiant sa spécification. Le contrôleur YurtAppSet propage automatiquement les modifications au workload de chaque pool de nœuds.

Mettre à niveau la version de l'application

Mettez à jour spec.workload.workloadTemplate avec la nouvelle image de conteneur ou d'autres modifications de modèle. Le contrôleur applique le modèle mis à jour à tous les workloads gérés, ce qui déclenche une mise à jour progressive dans chaque pool de nœuds.

Exécuter une mise à jour canari dans une région spécifique

Mettez à jour spec.workload.workloadTweaks[*].containerImages pour le pool de nœuds cible. Seuls les Pods de ce pool de nœuds reçoivent la nouvelle image ; les autres pools de nœuds ne sont pas affectés.

Mettre à l'échelle une application dans une région spécifique

Mettez à jour spec.workload.workloadTweaks[*].tweaks.replicas pour le pool de nœuds cible. Cela remplace le nombre de réplicas défini dans workloadTemplate pour ce pool de nœuds uniquement.

Déployer dans une nouvelle région

Créez un nouveau pool de nœuds avec un libellé correspondant à spec.nodepoolSelector. YurtAppSet détecte la nouvelle ressource NodePool et crée automatiquement un workload pour celle-ci. Ajoutez ensuite les nœuds de cette région au pool de nœuds.

Aucune modification de la configuration YurtAppSet n'est requise lors de l'utilisation de nodepoolSelector.

Mettre hors ligne une application dans une région

Supprimez le pool de nœuds pour la région cible. YurtAppSet détecte la suppression et retire automatiquement le workload associé à ce pool de nœuds.