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 :
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 (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égieznodepoolSelectorplutôt quepoolspour 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.