Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Introdução à distribuição de aplicações

Última atualização: Jun 27, 2026

Use a distribuição de aplicações do ACK One Fleet para implantar aplicações em clusters associados por meio de uma PropagationPolicy, sem necessidade de repositórios Git.

Neste guia, você vai:

  • Crie uma aplicação em uma instância Fleet

  • Defina uma PropagationPolicy para distribuição multicluster

  • (Opcional) Aplicar uma OverridePolicy para personalização por cluster

  • Verificar, atualize e limpar os recursos distribuídos

Pré-requisitos

Certifique-se de que:

(Opcional) Etapa 1: Crie um namespace na instância Fleet

Crie o namespace caso ele ainda não exista na instância Fleet.

Para criar um namespace chamado demo:

kubectl create namespace demo

Etapa 2: Crie uma aplicação na instância Fleet

O Fleet distribui ConfigMaps, Deployments e Services. Este exemplo usa um Deployment NGINX.

  1. Crie o arquivo web-demo.yaml com o seguinte conteúdo:

    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. Implante a aplicação:

    kubectl apply -f web-demo.yaml

Etapa 3: Crie uma PropagationPolicy para distribuir a aplicação

Uma PropagationPolicy define quais recursos distribuir e para quais clusters. Após aplicar a política, o controlador envia automaticamente os recursos correspondentes aos clusters de destino.

Este exemplo distribui o Deployment para dois clusters no modo Duplicated — cada cluster executa três réplicas independentemente.

  1. Obtenha os IDs dos clusters membros:

    kubectl get mcl

    A saída será semelhante a:

    NAME                                HUB ACCEPTED   MANAGED CLUSTER URLS   JOINED   AVAILABLE   AGE
    cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   true                                  True     True        3d23h
    cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   true                                  True     True        5d21h
  2. Crie o arquivo propagationpolicy.yaml com o conteúdo abaixo. Substitua ${cluster1-id} e ${cluster2-id} pelos IDs dos seus clusters.

    A ClusterPropagationPolicy distribui recursos com escopo de cluster (como Namespaces). Já a PropagationPolicy distribui recursos com escopo de namespace e selecione apenas dentro do próprio 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

    Os principais parâmetros estão listados abaixo. Consulte a lista completa em PropagationPolicy.

    Parâmetro

    Descrição

    Exemplo

    resourceSelectors

    Recursos a distribuir. Correspondência por apiVersion, kind, name, namespace ou labelSelector.

    Selecione o Deployment web-demo no namespace demo.

    placement.clusterAffinity

    Clusters de destino da distribuição. Insira os IDs dos clusters, não os nomes.

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

    replicaScheduling.replicaSchedulingType

    Modo de agendamento. O valor Duplicated replica a contagem total de réplicas (definida por spec.replicas) para cada cluster.

    Duplicated

  3. Aplique a PropagationPolicy:

    kubectl apply -f propagationpolicy.yaml

(Opcional) Etapa 4: Crie uma OverridePolicy para personalizar a configuração por cluster

Uma OverridePolicy modifica a configuração do recurso antes da implantação, permitindo ajustar as definições para clusters individuais.

Este exemplo tem como alvo ${cluster2-id} com duas alterações:

  • Reduzir replicas de 3 para 1

  • Adicionar um prefixo de registro à imagem

Antes de aplicar a OverridePolicy, o Deployment em ${cluster2-id} apresenta:

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

Após aplicar a OverridePolicy, o Deployment em ${cluster2-id} passa a ter:

spec:
  replicas: 1
  ...
  containers:
    - image: {{Registry}}/registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
  1. Crie o arquivo overridepolicy.yaml com o seguinte conteúdo:

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

    Os principais parâmetros estão listados abaixo. Consulte a lista completa em OverridePolicy.

    Parâmetro

    Descrição

    Exemplo

    resourceSelectors

    Recursos a sobrescrever. Correspondência por apiVersion, kind, name, namespace ou labelSelector.

    Selecione o Deployment web-demo.

    overrideRules.plaintext

    Sobrescreve campos de recursos com JSONPatch. Defina operator, path e value.

    Alterar spec.replicas para 1.

    overrideRules.imageOverrider

    Sobrescreve componentes da imagem: Registry, Repository ou Version.

    Adicionar um prefixo de registro à imagem.

  2. Aplique a OverridePolicy:

    kubectl apply -f overridepolicy.yaml

Etapa 5: Visualize o status da distribuição

Verifique se a aplicação foi distribuída para todos os clusters membros:

kubectl amc get deploy -ndemo -M

A saída será semelhante a:

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

Os valores READY: 3/3 e ADOPTION: Y confirme que a aplicação está em execução em cada cluster.

Etapa 6: Atualize a aplicação

  1. Atualize o arquivo web-demo.yaml para aumentar replicas para 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 o manifesto atualizado:

    kubectl apply -f web-demo.yaml
  3. Verifique a propagação para todos os clusters:

    kubectl amc get deploy -ndemo -M

    A saída será semelhante a:

    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

    O valor READY: 4/4 confirma que ambos os clusters foram atualizados.

Etapa 7: Exclua recursos da aplicação

Por padrão, remover uma aplicação ou PropagationPolicy da instância Fleet não exclui os recursos dos clusters membros.

Para excluir recursos dos clusters membros:

  1. Defina preserveResourcesOnDeletion como false na 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 a política atualizada:

    kubectl apply -f propagationpolicy.yaml
  3. Exclua os recursos da aplicação:

    kubectl delete -f web-demo.yaml
  4. Confirme a remoção nos clusters membros:

    kubectl amc get deploy -ndemo -M

    A saída será semelhante a:

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

Referências