Utilisez la fonctionnalité de distribution d'applications ACK One Fleet pour déployer des applications sur plusieurs clusters associés à l'aide d'une PropagationPolicy, sans avoir besoin de référentiels Git.
Vous allez :
Créer une application sur une instance Fleet
Définir une PropagationPolicy pour la distribution multi-cluster
(Facultatif) Appliquer une OverridePolicy pour personnaliser les configurations par cluster
Vérifier, mettre à jour et nettoyer les ressources distribuées
Prérequis
Assurez-vous d'avoir :
La gestion multi-cluster activée.
Plusieurs clusters associés à l'instance Fleet.
kubectl connecté à l'instance Fleet à l'aide du fichier kubeconfig téléchargé depuis la console ACK One.
La politique
AliyunAdcpFullAccessaccordée à votre utilisateur Resource Access Management (RAM).L'outil en ligne de commande AMC installé.
(Facultatif) Étape 1 : Créer un namespace sur l'instance Fleet
Créez le namespace s'il n'existe pas déjà sur l'instance Fleet.
Créez un namespace nommé demo :
kubectl create namespace demo
Étape 2 : Créer une application sur l'instance Fleet
Fleet distribue des ConfigMaps, des Deployments et des Services. Cet exemple utilise un Deployment NGINX.
-
Créez le fichier
web-demo.yamlavec le contenu suivant :apiVersion: apps/v1 kind: Deployment metadata: namespace: demo name: web-demo spec: replicas: 3 selector: matchLabels: app: web-demo template: metadata: labels: app: web-demo spec: containers: - name: nginx image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0 ports: - containerPort: 80 -
Déployez l'application :
kubectl apply -f web-demo.yaml
Étape 3 : Créer une PropagationPolicy pour distribuer l'application
Une PropagationPolicy définit les ressources à distribuer ainsi que les clusters cibles. Une fois appliquée, le contrôleur pousse automatiquement les ressources correspondantes vers les clusters cibles.
Cet exemple distribue le Deployment vers deux clusters en mode Duplicated : chaque cluster exécute indépendamment trois réplicas.
-
Récupérez les ID des clusters membres :
kubectl get mclLe résultat ressemble à ceci :
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 3d23h cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 5d21h -
Créez le fichier
propagationpolicy.yamlavec le contenu suivant. Remplacez${cluster1-id}et${cluster2-id}par vos ID de cluster.La
ClusterPropagationPolicydistribue les ressources à l'échelle du cluster (telles que les Namespaces). LaPropagationPolicydistribue les ressources à l'échelle du namespace et effectue la sélection uniquement au sein de son propre namespace.apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: ClusterPropagationPolicy metadata: name: web-demo spec: resourceSelectors: - apiVersion: v1 kind: Namespace name: demo placement: clusterAffinity: clusterNames: - ${cluster1-id} # The ID of your cluster. - ${cluster2-id} # The ID of your cluster. replicaScheduling: replicaSchedulingType: Duplicated --- apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: PropagationPolicy metadata: name: web-demo namespace: demo spec: preserveResourcesOnDeletion: true # When true, deleting resources from the Fleet instance keeps them in the member cluster. Set to false to delete them together. resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: web-demo namespace: demo placement: clusterAffinity: clusterNames: - ${cluster1-id} # The ID of your cluster. - ${cluster2-id} # The ID of your cluster. replicaScheduling: replicaSchedulingType: DuplicatedLes paramètres clés sont répertoriés ci-dessous. La liste complète des paramètres figure dans la rubrique PropagationPolicy.
Paramètre Description Exemple resourceSelectorsRessources à distribuer. Correspondance par apiVersion,kind,name,namespaceoulabelSelector.Sélectionne le Deployment web-demodans le namespacedemo.placement.clusterAffinityClusters cibles pour la distribution. Saisissez les ID de cluster, et non les noms de cluster. ${cluster1-id},${cluster2-id}replicaScheduling.replicaSchedulingTypeMode de planification. Le mode Duplicatedréplique le nombre total de réplicas (défini parspec.replicas) sur chaque cluster.Duplicated -
Appliquez la PropagationPolicy :
kubectl apply -f propagationpolicy.yaml
(Facultatif) Étape 4 : Créer une OverridePolicy pour personnaliser la configuration par cluster
Une OverridePolicy modifie la configuration des ressources avant le déploiement, ce qui vous permet d'adapter les paramètres à des clusters individuels.
Cet exemple cible le cluster ${cluster2-id} avec deux modifications :
Réduction du nombre de
replicasde3à1Ajout d'un préfixe de registre à l'image
Avant d'appliquer l'OverridePolicy, le Deployment sur le cluster ${cluster2-id} présente la configuration suivante :
spec:
replicas: 3
...
containers:
- image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
Après application de l'OverridePolicy, le Deployment sur le cluster ${cluster2-id} devient :
spec:
replicas: 1
...
containers:
- image: {{Registry}}/registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
-
Créez le fichier
overridepolicy.yamlavec le contenu suivant :apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: OverridePolicy metadata: name: example namespace: demo spec: resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: web-demo overrideRules: - targetCluster: clusterNames: - ${cluster2-id} overriders: plaintext: - operator: replace path: /spec/replicas value: 1 imageOverrider: - component: Registry operator: add value: {{Registry}}Les paramètres clés sont répertoriés ci-dessous. La liste complète des paramètres figure dans la rubrique OverridePolicy.
Paramètre Description Exemple resourceSelectorsRessources à remplacer. Correspondance par apiVersion,kind,name,namespaceoulabelSelector.Sélectionne le Deployment web-demo.overrideRules.plaintextRemplace les champs de ressource à l'aide de JSONPatch. Définissez operator,pathetvalue.Modifie spec.replicaspour définir la valeur1.overrideRules.imageOverriderRemplace les composants d'image : Registry,RepositoryouVersion.Ajoute un préfixe de registre à l'image. -
Appliquez l'OverridePolicy :
kubectl apply -f overridepolicy.yaml
Étape 5 : Afficher l'état de la distribution
Vérifiez si l'application a été distribuée à tous les clusters membres :
kubectl amc get deploy -ndemo -M
Le résultat ressemble à ceci :
NAME CLUSTER READY UP-TO-DATE AVAILABLE AGE ADOPTION
web-demo cxxxxxxxxxxxxx 3/3 3 3 3d4h Y
web-demo cxxxxxxxxxxxxx 3/3 3 3 3d4h Y
Les valeurs READY: 3/3 et ADOPTION: Y confirment que l'application s'exécute dans chaque cluster.
Étape 6 : Mettre à jour l'application
-
Modifiez le fichier
web-demo.yamlpour augmenter le nombre dereplicasà4:apiVersion: apps/v1 kind: Deployment metadata: namespace: demo name: web-demo spec: replicas: 4 selector: matchLabels: app: web-demo template: metadata: labels: app: web-demo spec: containers: - name: nginx image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0 ports: - containerPort: 80 -
Appliquez le manifeste mis à jour :
kubectl apply -f web-demo.yaml -
Vérifiez la propagation vers tous les clusters :
kubectl amc get deploy -ndemo -MLe résultat ressemble à ceci :
NAME CLUSTER READY UP-TO-DATE AVAILABLE AGE ADOPTION web-demo cxxxxxxxxxxxxx 4/4 4 4 3d4h Y web-demo cxxxxxxxxxxxxx 4/4 4 4 3d4h YLa valeur
READY: 4/4confirme que les deux clusters sont mis à jour.
Étape 7 : Supprimer les ressources de l'application
Par défaut, la suppression d'une application ou d'une PropagationPolicy de l'instance Fleet n'entraîne pas la suppression des ressources des clusters membres.
Pour supprimer les ressources des clusters membres :
-
Définissez
preserveResourcesOnDeletionsurfalsedans laClusterPropagationPolicy:apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: ClusterPropagationPolicy metadata: name: web-demo spec: preserveResourcesOnDeletion: false resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: web-demo - apiVersion: v1 kind: Namespace name: demo placement: clusterAffinity: clusterNames: - ${cluster1-id} # The ID of your cluster. - ${cluster2-id} # The ID of your cluster. replicaScheduling: replicaSchedulingType: Duplicated -
Appliquez la politique mise à jour :
kubectl apply -f propagationpolicy.yaml -
Supprimez les ressources de l'application :
kubectl delete -f web-demo.yaml -
Confirmez la suppression des clusters membres :
kubectl amc get deploy -ndemo -MLe résultat ressemble à ceci :
cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found
Références
Surveiller les applications distribuées : Gestion de la surveillance
Mettre en œuvre la reprise après sinistre inter-zones : Utiliser les passerelles multi-clusters MSE pour mettre en œuvre la reprise après sinistre inter-zones dans ACK One
Référence complète des paramètres : PropagationPolicy et OverridePolicy