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:
O gerenciamento multicluster esteja ativado.
Vários clusters estejam associados à instância Fleet.
O kubectl esteja conectado à instância Fleet usando o kubeconfig baixado do console do ACK One.
A política
AliyunAdcpFullAccesstenha sido concedida ao seu usuário do Resource Access Management (RAM).A ferramenta de linha de comando AMC esteja instalada.
(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.
-
Crie o arquivo
web-demo.yamlcom 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 -
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.
-
Obtenha os IDs dos clusters membros:
kubectl get mclA saída será semelhante a:
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 3d23h cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 5d21h -
Crie o arquivo
propagationpolicy.yamlcom o conteúdo abaixo. Substitua${cluster1-id}e${cluster2-id}pelos IDs dos seus clusters.A
ClusterPropagationPolicydistribui recursos com escopo de cluster (como Namespaces). Já aPropagationPolicydistribui 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: DuplicatedOs principais parâmetros estão listados abaixo. Consulte a lista completa em PropagationPolicy.
Parâmetro
Descrição
Exemplo
resourceSelectorsRecursos a distribuir. Correspondência por
apiVersion,kind,name,namespaceoulabelSelector.Selecione o Deployment
web-demono namespacedemo.placement.clusterAffinityClusters de destino da distribuição. Insira os IDs dos clusters, não os nomes.
${cluster1-id},${cluster2-id}replicaScheduling.replicaSchedulingTypeModo de agendamento. O valor
Duplicatedreplica a contagem total de réplicas (definida porspec.replicas) para cada cluster.Duplicated -
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
replicasde3para1Adicionar 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
-
Crie o arquivo
overridepolicy.yamlcom 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
resourceSelectorsRecursos a sobrescrever. Correspondência por
apiVersion,kind,name,namespaceoulabelSelector.Selecione o Deployment
web-demo.overrideRules.plaintextSobrescreve campos de recursos com JSONPatch. Defina
operator,pathevalue.Alterar
spec.replicaspara1.overrideRules.imageOverriderSobrescreve componentes da imagem:
Registry,RepositoryouVersion.Adicionar um prefixo de registro à imagem.
-
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
-
Atualize o arquivo
web-demo.yamlpara aumentarreplicaspara4: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 -
Aplique o manifesto atualizado:
kubectl apply -f web-demo.yaml -
Verifique a propagação para todos os clusters:
kubectl amc get deploy -ndemo -MA 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 YO valor
READY: 4/4confirma 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:
-
Defina
preserveResourcesOnDeletioncomofalsenaClusterPropagationPolicy: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 -
Aplique a política atualizada:
kubectl apply -f propagationpolicy.yaml -
Exclua os recursos da aplicação:
kubectl delete -f web-demo.yaml -
Confirme a remoção nos clusters membros:
kubectl amc get deploy -ndemo -MA saída será semelhante a:
cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found
Referências
Monitorar aplicações distribuídas: Gerenciamento de monitoramento
Implementar recuperação de desastres entre zonas: Usar gateways multicluster do MSE para implementar recuperação de desastres entre zonas no ACK One
Referência completa de parâmetros: PropagationPolicy e OverridePolicy