Utilice la distribución de aplicaciones de ACK One Fleet para desplegar aplicaciones en varios clústeres asociados mediante una PropagationPolicy. No necesita repositorios de Git.
A continuación se describen las tareas que llevará a cabo:
Crear una aplicación en una instancia de Fleet
Definir una PropagationPolicy para la distribución en varios clústeres
(Opcional) Aplicar una OverridePolicy para personalizar cada clúster
Comprobar, actualizar y limpiar los recursos distribuidos
Requisitos previos
Asegúrese de cumplir con lo siguiente:
La función de gestión de varios clústeres está habilitada.
Varios clústeres están associated with the Fleet instance.
kubectl está conectado a la instancia de Fleet mediante el archivo kubeconfig descargado desde la consola de ACK One.
La política
AliyunAdcpFullAccessestá granted to your Resource Access Management (RAM) user.La herramienta de línea de comandos AMC está instalada.
(Opcional) Paso 1: Crear un namespace en la instancia de Fleet
Cree el namespace si no existe en la instancia de Fleet.
Ejecute el siguiente comando para crear un namespace llamado demo:
kubectl create namespace demo
Paso 2: Crear una aplicación en la instancia de Fleet
Fleet distribuye ConfigMaps, Deployments y Services. Este ejemplo utiliza un Deployment de NGINX.
-
Cree el archivo
web-demo.yamlcon el siguiente contenido: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 -
Despliegue la aplicación:
kubectl apply -f web-demo.yaml
Paso 3: Crear una PropagationPolicy para distribuir la aplicación
Una PropagationPolicy define qué recursos se distribuyen y a qué clústeres. Una vez aplicada, el controlador envía automáticamente los recursos coincidentes a los clústeres de destino.
Este ejemplo distribuye el Deployment a dos clústeres en modo Duplicated. Cada clúster ejecuta tres réplicas de forma independiente.
-
Obtenga los ID de los clústeres miembro:
kubectl get mclEl resultado es similar al siguiente:
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 3d23h cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 5d21h -
Cree el archivo
propagationpolicy.yamlcon el siguiente contenido. Reemplace${cluster1-id}y${cluster2-id}por los ID de sus clústeres.ClusterPropagationPolicydistribuye recursos con alcance de clúster (como Namespaces).PropagationPolicydistribuye recursos con alcance de namespace y selecciona únicamente dentro de su propio 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: DuplicatedA continuación se muestran los parámetros principales. Consulte PropagationPolicy para ver la lista completa de parámetros.
Parámetro
Descripción
Ejemplo
resourceSelectorsRecursos que se van a distribuir. La coincidencia se basa en
apiVersion,kind,name,namespaceolabelSelector.Selecciona el Deployment
web-demoen el namespacedemo.placement.clusterAffinityClústeres de destino para la distribución. Introduzca los ID de los clústeres, no sus nombres.
${cluster1-id},${cluster2-id}replicaScheduling.replicaSchedulingTypeModo de programación. El valor
Duplicatedreplica la cantidad total de réplicas (definida porspec.replicas) en cada clúster.Duplicated -
Aplique la PropagationPolicy:
kubectl apply -f propagationpolicy.yaml
(Opcional) Paso 4: Crear una OverridePolicy para personalizar la configuración de cada clúster
Una OverridePolicy modifica la configuración de los recursos antes del despliegue. Esto le permite adaptar los ajustes para cada clúster.
Este ejemplo aplica dos cambios en ${cluster2-id}:
Reduce el valor de
replicasde3a1Agrega un prefijo de registro al inicio de la imagen
Antes de aplicar la OverridePolicy, el Deployment en ${cluster2-id} tiene la siguiente configuración:
spec:
replicas: 3
...
containers:
- image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
Después de aplicar la OverridePolicy, el Deployment en ${cluster2-id} queda así:
spec:
replicas: 1
...
containers:
- image: {{Registry}}/registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
-
Cree el archivo
overridepolicy.yamlcon el siguiente contenido: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}}A continuación se muestran los parámetros principales. Consulte OverridePolicy para ver la lista completa de parámetros.
Parámetro
Descripción
Ejemplo
resourceSelectorsRecursos que se van a sobrescribir. La coincidencia se basa en
apiVersion,kind,name,namespaceolabelSelector.Selecciona el Deployment
web-demo.overrideRules.plaintextSobrescribe campos de recursos mediante JSONPatch. Configure
operator,pathyvalue.Cambia
spec.replicasa1.overrideRules.imageOverriderSobrescribe componentes de la imagen:
Registry,RepositoryoVersion.Agrega un prefijo de registro al inicio de la imagen.
-
Aplique la OverridePolicy:
kubectl apply -f overridepolicy.yaml
Paso 5: Consultar el estado de la distribución
Compruebe si la aplicación se distribuyó a todos los clústeres miembro:
kubectl amc get deploy -ndemo -M
El resultado es similar al siguiente:
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
Los valores READY: 3/3 y ADOPTION: Y confirman que la aplicación se ejecuta en cada clúster.
Paso 6: Actualizar la aplicación
-
Actualice el archivo
web-demo.yamlpara aumentarreplicasa4: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 el manifiesto actualizado:
kubectl apply -f web-demo.yaml -
Compruebe que la propagación llegó a todos los clústeres:
kubectl amc get deploy -ndemo -MEl resultado es similar al siguiente:
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 YEl valor
READY: 4/4confirma que ambos clústeres se actualizaron.
Paso 7: Eliminar los recursos de la aplicación
De forma predeterminada, quitar una aplicación o una PropagationPolicy de la instancia de Fleet no elimina los recursos de los clústeres miembro.
Para eliminar los recursos de los clústeres miembro, siga estos pasos:
-
Establezca
preserveResourcesOnDeletioncomofalseenClusterPropagationPolicy: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 la política actualizada:
kubectl apply -f propagationpolicy.yaml -
Elimine los recursos de la aplicación:
kubectl delete -f web-demo.yaml -
Confirme que los recursos se eliminaron de los clústeres miembro:
kubectl amc get deploy -ndemo -MEl resultado es similar al siguiente:
cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found
Referencias
Monitoreo de aplicaciones distribuidas: Monitoring management
Implementación de recuperación ante desastres por zona: Use MSE multi-cluster gateways to implement zone-disaster recovery in ACK One
Referencia completa de parámetros: PropagationPolicy and OverridePolicy