Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Get started with application distribution

Dernière mise à jour :Aug 11, 2026

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 :

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

  1. Créez le fichier web-demo.yaml avec 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
  2. 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.

  1. Récupérez les ID des clusters membres :

    kubectl get mcl

    Le résultat ressemble à ceci :

    NAME                                HUB ACCEPTED   MANAGED CLUSTER URLS   JOINED   AVAILABLE   AGE
    cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   true                                  True     True        3d23h
    cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   true                                  True     True        5d21h
  2. Créez le fichier propagationpolicy.yaml avec le contenu suivant. Remplacez ${cluster1-id} et ${cluster2-id} par vos ID de cluster.

    La ClusterPropagationPolicy distribue les ressources à l'échelle du cluster (telles que les Namespaces). La PropagationPolicy distribue 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: Duplicated

    Les 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
    resourceSelectors Ressources à distribuer. Correspondance par apiVersion, kind, name, namespace ou labelSelector. Sélectionne le Deployment web-demo dans le namespace demo.
    placement.clusterAffinity Clusters cibles pour la distribution. Saisissez les ID de cluster, et non les noms de cluster. ${cluster1-id}, ${cluster2-id}
    replicaScheduling.replicaSchedulingType Mode de planification. Le mode Duplicated réplique le nombre total de réplicas (défini par spec.replicas) sur chaque cluster. Duplicated
  3. 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 replicas de 3 à 1

  • Ajout 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
  1. Créez le fichier overridepolicy.yaml avec 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
    resourceSelectors Ressources à remplacer. Correspondance par apiVersion, kind, name, namespace ou labelSelector. Sélectionne le Deployment web-demo.
    overrideRules.plaintext Remplace les champs de ressource à l'aide de JSONPatch. Définissez operator, path et value. Modifie spec.replicas pour définir la valeur 1.
    overrideRules.imageOverrider Remplace les composants d'image : Registry, Repository ou Version. Ajoute un préfixe de registre à l'image.
  2. 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

  1. Modifiez le fichier web-demo.yaml pour augmenter le nombre de replicas à 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
  2. Appliquez le manifeste mis à jour :

    kubectl apply -f web-demo.yaml
  3. Vérifiez la propagation vers tous les clusters :

    kubectl amc get deploy -ndemo -M

    Le 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   Y

    La valeur READY: 4/4 confirme 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 :

  1. Définissez preserveResourcesOnDeletion sur false dans la ClusterPropagationPolicy :

    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
  2. Appliquez la politique mise à jour :

    kubectl apply -f propagationpolicy.yaml
  3. Supprimez les ressources de l'application :

    kubectl delete -f web-demo.yaml
  4. Confirmez la suppression des clusters membres :

    kubectl amc get deploy -ndemo -M

    Le résultat ressemble à ceci :

    cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found
    cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found

Références