Os gateways do Service Mesh (ASM) funcionam como ponto de entrada de tráfego para seus negócios. Aumentar a alta disponibilidade desses gateways é fundamental para evitar interrupções de service. Este tópico descreve como melhorar a alta disponibilidade dos gateways do ASM.
Pré-requisitos
Crie uma instância do ASM. Para mais informações, consulte Create an ASM instance.
Crie um cluster do Container Service for Kubernetes (ACK) ou um cluster ACK Serverless. Para mais informações, consulte Create an ACK managed cluster ou Create an ACK Serverless cluster.
Melhorar a alta disponibilidade do gateway do ASM em um cluster ACK
Em um cluster ACK, configure uma política de antiafinidade de pod no arquivo YAML ao criar um gateway do ASM. Essa configuração distribui os pods do gateway por diferentes nós ou zonas e aumenta a alta disponibilidade do gateway do ASM.
-
Configure o parâmetro podAntiAffinity do gateway do ASM para distribuir os pods por diferentes nós.
apiVersion: istio.alibabacloud.com/v1beta1 kind: IstioGateway metadata: name: ingressgateway-1 namespace: istio-system spec: clusterIds: - "c954ee9df88f64f229591f0ea4c61****" cpu: targetAverageUtilization: 80 externalTrafficPolicy: Local maxReplicas: 4 minReplicas: 2 ports: - name: status-port port: 15020 targetPort: 15020 - name: http2 port: 80 targetPort: 80 - name: https port: 443 targetPort: 80 - name: tls port: 15443 targetPort: 15443 replicaCount: 1 resources: limits: cpu: '2' memory: 2G requests: cpu: 200m memory: 256Mi sds: enabled: true resources: requests: cpu: 100m memory: 128Mi limits: cpu: 2000m memory: 1024Mi serviceType: LoadBalancer affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - istio-ingressgateway-1 topologyKey: kubernetes.io/hostname weight: 100 rollingMaxSurge: "100%" rollingMaxUnavailable: "25%"preferredDuringSchedulingIgnoredDuringExecution: indica que a antiafinidade de pod é uma política de afinidade suave. Caso nenhum nó atenda aos requisitos configurados, o pod ainda poderá ser agendado.
matchExpressions: defina key como app, operator como In e values como istio-ingressgateway-1. Essa configuração impede a implantação de um pod no mesmo nó que outros pods com o rótulo
app=istio-ingressgateway-1. Assim, cada nó executa apenas um pod com o rótuloapp=istio-ingressgateway-1.-
topologyKey: especifica a dimensão na qual a antiafinidade de pod entra em vigor.
Neste exemplo,
kubernetes.io/hostnameestá definido, indicando que a política se aplica ao domínio de topologia de nó.
-
Configure o parâmetro podAntiAffinity do gateway do ASM para distribuir os pods por diferentes zonas.
apiVersion: istio.alibabacloud.com/v1beta1 kind: IstioGateway metadata: name: ingressgateway-1 namespace: istio-system spec: clusterIds: - "c954ee9df88f64f229591f0ea4c61****" cpu: targetAverageUtilization: 80 externalTrafficPolicy: Local maxReplicas: 4 minReplicas: 2 ports: - name: status-port port: 15020 targetPort: 15020 - name: http2 port: 80 targetPort: 80 - name: https port: 443 targetPort: 80 - name: tls port: 15443 targetPort: 15443 replicaCount: 1 resources: limits: cpu: '2' memory: 2G requests: cpu: 200m memory: 256Mi sds: enabled: true resources: requests: cpu: 100m memory: 128Mi limits: cpu: 2000m memory: 1024Mi serviceType: LoadBalancer affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - istio-ingressgateway-1 topologyKey: topology.kubernetes.io/zone weight: 100 rollingMaxSurge: "100%" rollingMaxUnavailable: "25%"preferredDuringSchedulingIgnoredDuringExecution: indica que a antiafinidade de pod é uma política de afinidade suave. Se nenhum nó atender aos requisitos configurados, o pod ainda poderá ser agendado.
matchExpressions: defina key como app, operator como In e values como istio-ingressgateway-1. Essa definição impede a implantação de um pod na mesma zona que outros pods com o rótulo
app=istio-ingressgateway-1. Assim, cada zona executa somente um pod com o rótuloapp=istio-ingressgateway-1.-
topologyKey: define a dimensão em que a antiafinidade de pod tem efeito.
Neste exemplo, o valor
topology.kubernetes.io/zonefoi especificado, indicando que a política atua no domínio de topologia de zona.
Melhorar a alta disponibilidade do gateway do ASM em um cluster ACK Serverless
O cluster ACK Serverless não oferece suporte a políticas de agendamento de antiafinidade de pod. No entanto, é possível crie pods do Elastic Container Instance (ECI) em um cluster ACK Serverless e distribuí-los por diferentes zonas para aumentar a alta disponibilidade do gateway do ASM.
Configure várias zonas no cluster ACK Serverless. Para mais informações, consulte Create ECIs across zones.
-
Use
pod annotationno gateway do ASM para associar os pods às zonas.apiVersion: istio.alibabacloud.com/v1beta1 kind: IstioGateway metadata: name: ingressgateway namespace: istio-system spec: clusterIds: - "c954ee9df88f64f229591f0ea4c61****" cpu: targetAverageUtilization: 80 externalTrafficPolicy: Local maxReplicas: 4 minReplicas: 2 ports: - name: status-port port: 15020 targetPort: 15020 - name: http2 port: 80 targetPort: 80 - name: https port: 443 targetPort: 80 - name: tls port: 15443 targetPort: 15443 replicaCount: 1 resources: limits: cpu: '2' memory: 2G requests: cpu: 200m memory: 256Mi sds: enabled: true resources: requests: cpu: 100m memory: 128Mi limits: cpu: 2000m memory: 1024Mi serviceType: LoadBalancer podAnnotations: k8s.aliyun.com/eci-vswitch: "vsw-bp1b07j0miob3khtn****,vsw-bp12b85hh323se8ft****" k8s.aliyun.com/eci-schedule-strategy: "VSwitchRandom" rollingMaxSurge: "100%" rollingMaxUnavailable: "25%"k8s.aliyun.com/eci-vswitch: os IDs de diferentes vSwitches na Virtual Private Cloud (VPC). Esses vSwitches associam os pods às zonas.
k8s.aliyun.com/eci-schedule-strategy: a política de agendamento para pods ECI. Neste tópico, execute a política
VSwitchRandom, que agenda pods ECI aleatoriamente em várias zonas.