Se suas cargas de trabalho forem executadas em um data center on-premises ou em um cluster Kubernetes de nuvem pública de terceiros, use os gateways multicluster do ACK One para construir um sistema de recuperação de desastres híbrido ou entre nuvens com failover suave e automático. Este tópico explica como criar rapidamente um sistema de recuperação de desastres híbrida ativo-ativo na mesma cidade com o ACK One.
Arquitetura
A solução conta com três componentes principais: uma instância Fleet (com GitOps opcional), um cluster ACK na nuvem e um cluster registrado conectado ao seu ambiente on-premises.
Conexão entre os componentes:
Todos os recursos da Alibaba Cloud compartilham uma única VPC. Um cluster ACK executa na zona de disponibilidade (AZ) 1; um cluster registrado reside na AZ 2.
O cluster on-premises (ou cluster de plataforma de terceiros) conecta-se ao cluster registrado por meio de uma linha dedicada entre o data center e a VPC.
Ambos os clusters associam-se à instância Fleet. O ACK One GitOps distribui a aplicação para os dois ambientes.
Na instância Fleet, um AlbConfig cria um gateway multicluster ALB. Um Ingress no nível da Fleet define as regras de roteamento para tráfego norte-sul e recuperação de desastres entre zonas.
Pré-requisitos
Antes de começar:
Uma instância Fleet, um cluster ACK e um cluster registrado na mesma VPC, mas em zonas de disponibilidade diferentes
Blocos CIDR de nós e pods não sobrepostos entre o cluster ACK e o cluster Kubernetes on-premises (Network design for Fleet management)
Uma linha dedicada conectando o data center on-premises à VPC
Tipo de rede de contêiner do cluster on-premises (underlay ou overlay) definido, pois isso influencia o tipo de Service necessário
|
Tipo de rede |
Tipo de Service necessário |
Cenário de uso |
|
Underlay |
ClusterIP |
Os IPs dos pods são diretamente roteáveis a partir da rede on-premises |
|
Overlay |
NodePort |
Os IPs dos pods não são roteáveis; o tráfego deve entrar pelas portas do nó |
Projete a rede e crie os clusters
Crie uma instância Fleet, um cluster ACK e um cluster registrado na mesma VPC, porém em zonas de disponibilidade distintas.
Verifique se os blocos CIDR de nós e pods não se sobrepõem entre o cluster ACK e o cluster Kubernetes on-premises.
Conecte-se à Alibaba Cloud
-
Conecte o cluster Kubernetes on-premises ao cluster registrado (Create a registered cluster).
Para migrar cargas de trabalho para a Alibaba Cloud com recursos elásticos: Build a hybrid cloud cluster and add ECS instances to the cluster e Schedule pods to elastic container instances that are deployed as virtual nodes . Para aumentar a disponibilidade contra picos de tráfego: Create ECIs across zones .
Conecte a rede on-premises à VPC. Consulte Network connectivity e Overview of hybrid networks.
Associe o cluster registrado e o cluster ACK à instância Fleet (Manage associated clusters).
Distribua a aplicação para múltiplos clusters
Os exemplos de ApplicationSet a seguir usam a aplicação web-demo. O tópico Create a multi-cluster application aborda opções avançadas.
Rede underlay
Todos os clusters usam Services do tipo ClusterIP. Aplique o seguinte ApplicationSet:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: appset-web-demo-undelay
namespace: argocd
spec:
template:
metadata:
name: '{{.metadata.annotations.cluster_id}}-web-demo'
namespace: argocd
spec:
destination:
name: '{{.name}}'
namespace: gateway-demo
project: default
source:
repoURL: https://github.com/AliyunContainerService/gitops-demo.git
path: manifests/helm/web-demo
targetRevision: main
helm:
valueFiles:
- values.yaml
parameters:
- name: envCluster
value: '{{.metadata.annotations.cluster_name}}'
syncPolicy:
automated: {}
syncOptions:
- CreateNamespace=true
generators:
- clusters:
selector:
matchExpressions:
- values:
- cluster
key: argocd.argoproj.io/secret-type
operator: In
- values:
- in-cluster
key: name
operator: NotIn
goTemplateOptions:
- missingkey=error
syncPolicy:
preserveResourcesOnDeletion: false
goTemplate: true
Rede overlay
O cluster on-premises usa Services do tipo NodePort; o cluster ACK usa Services do tipo ClusterIP. Adicione rótulos a cada cluster antes de aplicar o ApplicationSet.
-
No Argo CD, acesse Settings > Clusters e adicione estes rótulos:
Cluster on-premises:
cluster: idcCluster ACK:
cluster: ack
Aplique o seguinte ApplicationSet:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: appset-web-demo-overlay
namespace: argocd
spec:
template:
metadata:
name: '{{.metadata.annotations.cluster_id}}-web-demo-overlay'
namespace: argocd
spec:
destination:
name: '{{.name}}'
namespace: gateway-demo
project: default
source:
repoURL: https://github.com/AliyunContainerService/gitops-demo.git
path: manifests/helm/web-demo
targetRevision: main
helm:
valueFiles:
- values.yaml
parameters:
- name: isNodePort
value: "{{.values.isNodePort}}"
- name: envCluster
value: '{{.metadata.annotations.cluster_name}}'
syncPolicy:
automated: {}
syncOptions:
- CreateNamespace=true
generators:
- clusters:
selector:
matchLabels:
cluster: 'idc'
# A key-value map for arbitrary parameters
values:
isNodePort: "true"
- clusters:
selector:
matchLabels:
cluster: 'ack'
values:
isNodePort: "false"
goTemplateOptions:
- missingkey=error
syncPolicy:
preserveResourcesOnDeletion: false
goTemplate: true
Configure o gateway multicluster ALB
Após implantar a aplicação em ambos os clusters:
Na instância Fleet, crie um AlbConfig para provisionar o gateway multicluster ALB e adicione ambos os clusters a ele.
Defina regras de roteamento e Ingresses na instância Fleet para garantir redundância ativa entre zonas.
O guia Build a zone-disaster recovery system detalha todo o processo de configuração.
Próximos passos
Build a zone-disaster recovery system — Configuração de AlbConfig e Ingress para roteamento e failover
Network design for Fleet management — Orientações sobre planejamento de CIDR e topologia de rede
Create a multi-cluster application — Opções avançadas de configuração do ApplicationSet