Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Get started with application distribution

Última actualización: Sep 10, 2026

Utilice la distribución de aplicaciones de ACK One Fleet para desplegar aplicaciones en varios clústeres asociados mediante una PropagationPolicy. No necesita repositorios de Git.

A continuación se describen las tareas que llevará a cabo:

  • Crear una aplicación en una instancia de Fleet

  • Definir una PropagationPolicy para la distribución en varios clústeres

  • (Opcional) Aplicar una OverridePolicy para personalizar cada clúster

  • Comprobar, actualizar y limpiar los recursos distribuidos

Requisitos previos

Asegúrese de cumplir con lo siguiente:

(Opcional) Paso 1: Crear un namespace en la instancia de Fleet

Cree el namespace si no existe en la instancia de Fleet.

Ejecute el siguiente comando para crear un namespace llamado demo:

kubectl create namespace demo

Paso 2: Crear una aplicación en la instancia de Fleet

Fleet distribuye ConfigMaps, Deployments y Services. Este ejemplo utiliza un Deployment de NGINX.

  1. Cree el archivo web-demo.yaml con el siguiente contenido:

    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. Despliegue la aplicación:

    kubectl apply -f web-demo.yaml

Paso 3: Crear una PropagationPolicy para distribuir la aplicación

Una PropagationPolicy define qué recursos se distribuyen y a qué clústeres. Una vez aplicada, el controlador envía automáticamente los recursos coincidentes a los clústeres de destino.

Este ejemplo distribuye el Deployment a dos clústeres en modo Duplicated. Cada clúster ejecuta tres réplicas de forma independiente.

  1. Obtenga los ID de los clústeres miembro:

    kubectl get mcl

    El resultado es similar al siguiente:

    NAME                                HUB ACCEPTED   MANAGED CLUSTER URLS   JOINED   AVAILABLE   AGE
    cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   true                                  True     True        3d23h
    cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   true                                  True     True        5d21h
  2. Cree el archivo propagationpolicy.yaml con el siguiente contenido. Reemplace ${cluster1-id} y ${cluster2-id} por los ID de sus clústeres.

    ClusterPropagationPolicy distribuye recursos con alcance de clúster (como Namespaces). PropagationPolicy distribuye recursos con alcance de namespace y selecciona únicamente dentro de su propio 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

    A continuación se muestran los parámetros principales. Consulte PropagationPolicy para ver la lista completa de parámetros.

    Parámetro

    Descripción

    Ejemplo

    resourceSelectors

    Recursos que se van a distribuir. La coincidencia se basa en apiVersion, kind, name, namespace o labelSelector.

    Selecciona el Deployment web-demo en el namespace demo.

    placement.clusterAffinity

    Clústeres de destino para la distribución. Introduzca los ID de los clústeres, no sus nombres.

    ${cluster1-id}, ${cluster2-id}

    replicaScheduling.replicaSchedulingType

    Modo de programación. El valor Duplicated replica la cantidad total de réplicas (definida por spec.replicas) en cada clúster.

    Duplicated

  3. Aplique la PropagationPolicy:

    kubectl apply -f propagationpolicy.yaml

(Opcional) Paso 4: Crear una OverridePolicy para personalizar la configuración de cada clúster

Una OverridePolicy modifica la configuración de los recursos antes del despliegue. Esto le permite adaptar los ajustes para cada clúster.

Este ejemplo aplica dos cambios en ${cluster2-id}:

  • Reduce el valor de replicas de 3 a 1

  • Agrega un prefijo de registro al inicio de la imagen

Antes de aplicar la OverridePolicy, el Deployment en ${cluster2-id} tiene la siguiente configuración:

spec:
  replicas: 3
  ...
  containers:
    - image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0

Después de aplicar la OverridePolicy, el Deployment en ${cluster2-id} queda así:

spec:
  replicas: 1
  ...
  containers:
    - image: {{Registry}}/registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
  1. Cree el archivo overridepolicy.yaml con el siguiente contenido:

    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}}

    A continuación se muestran los parámetros principales. Consulte OverridePolicy para ver la lista completa de parámetros.

    Parámetro

    Descripción

    Ejemplo

    resourceSelectors

    Recursos que se van a sobrescribir. La coincidencia se basa en apiVersion, kind, name, namespace o labelSelector.

    Selecciona el Deployment web-demo.

    overrideRules.plaintext

    Sobrescribe campos de recursos mediante JSONPatch. Configure operator, path y value.

    Cambia spec.replicas a 1.

    overrideRules.imageOverrider

    Sobrescribe componentes de la imagen: Registry, Repository o Version.

    Agrega un prefijo de registro al inicio de la imagen.

  2. Aplique la OverridePolicy:

    kubectl apply -f overridepolicy.yaml

Paso 5: Consultar el estado de la distribución

Compruebe si la aplicación se distribuyó a todos los clústeres miembro:

kubectl amc get deploy -ndemo -M

El resultado es similar al siguiente:

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

Los valores READY: 3/3 y ADOPTION: Y confirman que la aplicación se ejecuta en cada clúster.

Paso 6: Actualizar la aplicación

  1. Actualice el archivo web-demo.yaml para aumentar replicas a 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. Aplique el manifiesto actualizado:

    kubectl apply -f web-demo.yaml
  3. Compruebe que la propagación llegó a todos los clústeres:

    kubectl amc get deploy -ndemo -M

    El resultado es similar al siguiente:

    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

    El valor READY: 4/4 confirma que ambos clústeres se actualizaron.

Paso 7: Eliminar los recursos de la aplicación

De forma predeterminada, quitar una aplicación o una PropagationPolicy de la instancia de Fleet no elimina los recursos de los clústeres miembro.

Para eliminar los recursos de los clústeres miembro, siga estos pasos:

  1. Establezca preserveResourcesOnDeletion como false en 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. Aplique la política actualizada:

    kubectl apply -f propagationpolicy.yaml
  3. Elimine los recursos de la aplicación:

    kubectl delete -f web-demo.yaml
  4. Confirme que los recursos se eliminaron de los clústeres miembro:

    kubectl amc get deploy -ndemo -M

    El resultado es similar al siguiente:

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

Referencias