O ACK One usa políticas de propagação e de substituição para distribuir aplicações em uma frota. A política de propagação define quais recursos vão para quais clusters, enquanto a política de substituição aplica configurações específicas do cluster a esses recursos.
Políticas de propagação
Uma política de propagação seleciona recursos do Kubernetes e os distribui para um ou mais clusters membros. Defina uma PropagationPolicy ou ClusterPropagationPolicy. Ambas se baseiam no projeto open source Karmada e são compatíveis com a API do Karmada.
PropagationPolicy: Distribui recursos no nível de namespace. Aplica-se apenas ao namespace onde a política foi definida.ClusterPropagationPolicy: Distribui recursos com escopo de cluster (PersistentVolume,StorageClass,Namespace,CustomResourceDefinition) e recursos no nível de namespace em qualquer namespace, exceto nos namespaces de sistema. O Controle de Acesso Baseado em Função (RBAC) para distribuição de recursos segue as permissões RBAC de frota multicluster.
O exemplo a seguir distribui um Deployment e um ConfigMap para dois clusters com pesos estáticos de réplicas:
apiVersion: policy.one.alibabacloud.com/v1alpha1
kind: PropagationPolicy
metadata:
name: web-demo
namespace: demo
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: web-demo
- apiVersion: v1
kind: ConfigMap
name: cm-demo
- apiVersion: apps/v1
kind: Deployment
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- xxxx
preserveResourcesOnDeletion: true
placement:
clusterAffinity:
clusterNames:
- cxxxxx # Your cluster ID.
- cxxxxx # Your cluster ID.
replicaScheduling:
replicaSchedulingType: Divided
replicaDivisionPreference: Weighted
weightPreference:
staticWeightList:
- targetCluster:
clusterNames:
- cxxxxx
weight: 2
- targetCluster:
clusterNames:
- cxxxxxx
weight: 1
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
Exemplo |
|
|
Sim |
Versão da API. |
|
|
|
Sim |
Escopo da política. |
|
|
|
Não |
Necessário quando |
|
|
|
Não |
Nome da política de propagação. |
|
|
|
Não |
Seleciona os recursos do Kubernetes para distribuição. Se omitido, nenhum recurso será selecionado. Consulte parâmetros de resourceSelector. |
— |
|
|
Não |
Define se os recursos dos quais a carga de trabalho selecionada depende devem ser distribuídos automaticamente (por exemplo, um ConfigMap referenciado por um Deployment). |
|
|
|
Sim |
Especifica os clusters de destino e o agendamento de réplicas. Contém |
— |
|
|
Não |
Lista objetos |
|
|
|
Não |
Controla o comportamento quando uma aplicação apresenta falha de integridade. Consulte Configuração de failover. |
— |
|
|
Sim |
Define se os recursos distribuídos devem ser mantidos nos clusters membros após a exclusão da política. Padrão: |
|
Parâmetros de resourceSelector
|
Parâmetro |
Obrigatório |
Descrição |
Exemplo |
|
|
Sim |
Versão da API do recurso a ser distribuído. |
|
|
|
Sim |
Tipo de recurso. |
|
|
|
Não |
Namespace do recurso. Ao usar |
|
|
|
Não |
Nome do recurso. |
|
|
|
Não |
Seleciona recursos por rótulos. Suporta |
— |
Parâmetros de clusterAffinity
Especifique os clusters de destino usando qualquer combinação dos campos a seguir:
Por ID do cluster
clusterAffinity:
clusterNames:
- cxxxx
- cxxxx
Por seletor de rótulos
clusterAffinity:
labelSelector:
matchLabels:
region: A
az: zone0
matchExpressions:
- key: app
operator: In
values:
- nginx
Por exclusão
clusterAffinity:
excludeClusters:
- cxxxx
- cxxxx
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
IDs dos clusters a incluir. |
|
|
Não |
IDs dos clusters a excluir. |
|
|
Não |
Seleciona clusters por rótulo. |
Parâmetros de replicaScheduling
|
Parâmetro |
Obrigatório |
Descrição |
Exemplo |
|
|
Não |
Define como as réplicas são distribuídas entre os clusters. |
|
|
|
Não |
Política de agendamento personalizada. Atualmente, apenas o agendamento |
|
|
|
Não |
Utilizado quando |
|
|
|
Não |
Especifica pesos estáticos ou dinâmicos para a divisão |
— |
Exemplo de peso estático — com weight: 2 no Cluster1 e weight: 1 no Cluster2, três réplicas no total são agendadas como duas no Cluster1 e uma no Cluster2:
weightPreference:
staticWeightList:
- targetCluster:
clusterNames:
- cxxxxx # Cluster1 ID
weight: 2
- targetCluster:
clusterNames:
- cxxxxxx # Cluster2 ID
weight: 1
Exemplo de peso dinâmico — distribui réplicas proporcionalmente com base na capacidade disponível de cada cluster:
weightPreference:
dynamicWeight: AvailableReplicas
Configuração de failover
Configure o campo failover para controlar como o ACK One responde quando uma aplicação apresenta falha de integridade:
failover:
application:
decisionConditions:
tolerationSeconds: 30
purgeMode: Immediately
|
Parâmetro |
Descrição |
Padrão |
|
|
Tempo de espera antes de tratar uma aplicação com falha de integridade como indisponível. |
|
|
|
Ação a ser tomada com a aplicação com falha. |
— |
|
|
Tempo máximo de espera para remoção graciosa quando |
|
Políticas de substituição
Uma política de substituição aplica configurações específicas de cluster aos recursos que uma política de propagação já selecionou para distribuição. Defina uma ClusterOverridePolicy ou OverridePolicy. Ambas se baseiam no projeto open source Karmada e são compatíveis com as interfaces ClusterOverridePolicy e OverridePolicy do Karmada.
OverridePolicy: Substitui recursos no nível de namespace dentro do próprio namespace.ClusterOverridePolicy: Substitui recursos com escopo de cluster (PersistentVolume,StorageClass,Namespace,CustomResourceDefinition) e recursos em qualquer namespace que não seja de sistema.
O exemplo a seguir substitui a contagem de réplicas e o registro de imagens para um Deployment em um cluster específico:
apiVersion: policy.one.alibabacloud.com/v1alpha1
kind: OverridePolicy
metadata:
name: demo
namespace: demo
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: example
overrideRules:
- targetCluster:
clusterNames:
- cxxxxx # Your cluster ID
overriders:
plaintext:
- operator: replace
path: /spec/replicas
value: 1
imageOverrider:
- component: Registry
operator: add
value: registry.cn-hangzhou.aliyuncs.com/xxxx
Principais parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
Exemplo |
|
|
Sim |
Versão da API. |
|
|
|
Sim |
Escopo da política. |
|
|
|
Não |
Necessário quando |
|
|
|
Sim |
Nome da política de substituição. |
|
|
|
Sim |
Seleciona os recursos a serem substituídos. Consulte parâmetros de resourceSelector. |
— |
|
|
Sim |
Array de regras de substituição. Cada regra direciona a clusters específicos e define as substituições a aplicar. Consulte parâmetros de overrideRules. |
— |
Parâmetros de resourceSelector
|
Parâmetro |
Obrigatório |
Descrição |
Exemplo |
|
|
Sim |
Versão da API do recurso. |
|
|
|
Sim |
Tipo de recurso. |
|
|
|
Não |
Namespace do recurso. Ao usar |
|
|
|
Não |
Nome do recurso. |
|
|
|
Não |
Seleciona recursos por rótulo. Se omitido, todos os recursos do |
— |
Parâmetros de overrideRules
Cada entrada em overrideRules contém um bloco targetCluster e um bloco overriders:
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Especifica a quais clusters a substituição se aplica, utilizando a mesma estrutura |
|
|
Sim |
Define o que deve ser substituído. Suporta |
Parâmetros de overriders
imageOverrider — modifique o registro, repositório ou tag da imagem:
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Caminho para o campo específico da imagem a ser modificado (por exemplo, |
|
|
Sim |
Componente da imagem a ser modificado. Valores válidos: |
|
|
Sim |
Operação. Valores válidos: |
|
|
Condicional |
Novo valor. Obrigatório quando |
Exemplo — adiciona um registro como prefixo a todas as imagens de contêiner:
imageOverrider:
- component: Registry
operator: add
value: registry.cn-hangzhou.aliyuncs.com
Resultado: uma imagem originalmente especificada como nginx:latest torna-se registry.cn-hangzhou.aliyuncs.com/nginx:latest.
plaintext — modifique qualquer campo de recurso usando um JSON Patch (RFC 6902):
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Caminho do JSON Patch para o campo de destino (por exemplo, |
|
|
Condicional |
Novo valor. Obrigatório quando |
|
|
Sim |
Operação. Valores válidos: |
Exemplo — defina a contagem de réplicas como 1 em um cluster específico:
plaintext:
- operator: replace
path: /spec/replicas
value: 1
Resultado: o campo spec.replicas do Deployment é alterado de seu valor original para 1 no cluster de destino.
Próximos passos
Para um tutorial completo sobre como criar uma aplicação em uma instância de frota e configurar políticas de propagação e substituição para distribuição multicluster, consulte o Guia de início rápido de distribuição de aplicações.