Atribua um conjunto de implantação a um pool de nós para distribuir instâncias ECS entre servidores físicos. As configurações de afinidade permitem que as aplicações reconheçam a topologia subjacente dos nós e distribuam as cargas de trabalho uniformemente, melhorando a recuperação de desastres e a alta disponibilidade.
Pré-requisitos
Um deployment set criado.
Contexto
Em uma única zona, é comum implantar services em vários hosts para garantir alta disponibilidade. No entanto, se um servidor físico falhar, todas as réplicas hospedadas nele serão afetadas. Os deployment sets do ECS distribuem as instâncias por diferentes servidores físicos dentro de uma região, garantindo isolamento mútuo e reduzindo o risco de indisponibilidade do service.
Limitações
Notas sobre o uso do recurso em clusters
Os conjuntos de implantação são compatíveis apenas com clusters gerenciados pelo ACK e clusters dedicados do ACK.
Especifique o conjunto de implantação somente durante a criação do pool de nós. Não é possível ativar conjuntos de implantação para pools de nós existentes. Cada pool de nós aceita apenas um conjunto de implantação.
Não adicione nem remova nós manualmente de um conjunto de implantação. Para ajustar a quantidade de nós, dimensione o pool de nós. Consulte Create and manage node pools.
Pools de nós com conjuntos de implantação não oferecem suporte a instâncias spot.
Cotas de conjuntos de implantação e limites de tipos de instância
-
Limites de cota para conjuntos de implantação:
-
Por padrão, os conjuntos de implantação de pools de nós utilizam a política de alta disponibilidade. É possível criar até 20 instâncias ECS por zona dentro de um único conjunto de implantação. O total de instâncias ECS por região da Alibaba Cloud é
20 × número de zonas. Verifique se há cotas e estoque suficientes de instâncias ECS para os tipos desejados. Consulte Deployment sets.O limite máximo de instâncias por conjunto de implantação não pode ser aumentado. Para elevar o número máximo de conjuntos de implantação da sua conta, faça uma solicitação pelo Quota Center. Consulte Limits on deployment sets.
Se a criação de uma instância ECS em um conjunto de implantação ou a reinicialização de uma instância pay-as-you-go (em modo econômico) falhar, a causa pode ser estoque insuficiente. Aguarde e tente novamente.
-
-
Restrições de famílias de instâncias: A maioria das famílias de instâncias da geração 6 ou posterior oferece suporte a conjuntos de implantação que utilizam as estratégias de alta disponibilidade, grupo de alta disponibilidade e baixa latência.
Atribuir um conjunto de implantação a um pool de nós no console
Faça logon no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em no nome do cluster. No painel de navegação à esquerda, clique em .
-
Na página Node Pools, clique em Create Node Pool. Na caixa de diálogo Create Node Pool, configure os parâmetros, selecione um conjunto de implantação e clique em Confirm.
Consulte Create and manage node pools para obter detalhes sobre os parâmetros do pool de nós. Após selecionar um conjunto de implantação, a contagem máxima de nós no pool será limitada. O limite padrão é 20 × o número de zonas. Garanta cota suficiente no conjunto de implantação para evitar falhas na expansão de nós.

Casos de uso
Agendar pods da mesma carga de trabalho em um único pool de nós para executar apenas um pod por nó usando antiafinidade de pods
Agende três réplicas de pod de um Deployment em três nós diferentes.
-
Crie um pool de nós com três nós e atribua um conjunto de implantação.
Após a criação, na página Node Pools, clique em no pool de nós correspondente. Na aba Nodes, verifique se três nós foram criados.

Faça logon no console do ECS. No painel de navegação à esquerda, escolha . Na página Deployment Set, confirme se todos os três nós pertencem ao conjunto de implantação.

-
Configure sua aplicação com o seguinte YAML.
Defina a antiafinidade de pods para agendar os três pods da aplicação em nós distintos.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: name: nginx labels: app: nginx spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: # Set the scheduling policy. - labelSelector: matchExpressions: - key: app operator: In values: - nginx topologyKey: kubernetes.io/hostname nodeSelector: alibabacloud.com/nodepool-id: <nodepool-id> # Specify the node pool ID. containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 resources: limits: cpu: 1 requests: cpu: 1Execution Result
Na página Deployments, clique em no Deployment alvo. Na aba Pods, os três pods aparecem agendados em nós diferentes.

Distribuir pods da mesma carga de trabalho uniformemente entre zonas e nós dentro de um único pool de nós
-
Crie um pool de nós com quatro nós, atribua um conjunto de implantação e selecione vSwitches em múltiplas zonas.
Após a criação, na página Node Pools, clique em no pool de nós. Na aba Nodes, verifique a existência de quatro nós distribuídos em quatro zonas. Seguindo a política de distribuição uniforme do ESS, as instâncias ECS estão espalhadas pelas quatro zonas e pertencem ao conjunto de implantação.

Faça logon no console do ECS. No painel de navegação à esquerda, escolha . Na página Deployment Set, confirme se todos os quatro nós pertencem ao conjunto de implantação.

-
Configure sua aplicação com o seguinte YAML.
Utilize restrições de distribuição de topologia de pods para distribuir os pods da mesma aplicação de forma equilibrada entre zonas e nós.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 4 selector: matchLabels: app: nginx template: metadata: name: nginx labels: app: nginx spec: topologySpreadConstraints: - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: nginx - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: nginx nodeSelector: alibabacloud.com/nodepool-id: <nodepool-id> # Specify the node pool ID. containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 resources: limits: cpu: 1 requests: cpu: 1Execution Result
Na página Deployments, clique em no Deployment alvo. Na aba Pods, os pods aparecem distribuídos uniformemente entre zonas e nós.
