toolkit-maven-plugin automatiza los despliegues canary para aplicaciones de Spring Cloud, Dubbo y High-speed Service Framework (HSF) implementadas en Enterprise Distributed Application Service (EDAS). En lugar de actualizar todas las instancias simultáneamente, un despliegue canary aplica los cambios primero a un subconjunto pequeño de instancias y luego promueve gradualmente la actualización al resto de las instancias por lotes.
Funcionamiento del despliegue canary
Un despliegue canary con toolkit-maven-plugin sigue un proceso de dos fases:
Fase canary: Despliegue de la nueva versión en un número específico de instancias (
gray). Estas instancias reciben tráfico en vivo, lo que permite validar la nueva versión antes del despliegue completo.Fase de despliegue por lotes: Distribución de la nueva versión a las instancias restantes en lotes controlados (
batch), con un intervalo configurable (batchWaitTime) entre cada lote. Los lotes pueden ejecutarse automáticamente o requerir aprobación manual.
El tipo de estrategia de actualización de EDAS para este proceso es GrayBatchUpdate.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Una aplicación de Spring Cloud, Dubbo o HSF desplegada en un clúster de Kubernetes de EDAS
Un AccessKey ID y un AccessKey secret de un usuario de Resource Access Management (RAM) (se recomienda usar estas credenciales en lugar de las de la cuenta raíz)
El ID de la aplicación (
appId), o bien el ID del namespace de microservices (namespaceId) y el nombre de la aplicación (appName) de la aplicación destino
Configuración de un despliegue canary
Para configurar un despliegue canary, agregue la dependencia del plugin, cree los archivos de configuración y ejecute el comando de despliegue.
Paso 1: Agregar la dependencia del plugin
Agregue la siguiente dependencia a su archivo pom.xml:
<build>
<plugins>
<plugin>
<groupId>com.alibaba.cloud</groupId>
<artifactId>toolkit-maven-plugin</artifactId>
<version>1.1.9</version>
</plugin>
</plugins>
</build>
Utilice siempre la versión más reciente de toolkit-maven-plugin.
Paso 2: Crear los archivos de configuración
Cree tres archivos YAML en el directorio raíz de su proyecto empaquetado. Si despliega un submódulo de Maven, cree el archivo de configuración del paquete en el directorio del submódulo.
Configuración de la cuenta (toolkit_profile.yaml)
regionId: # Region where the application is deployed, for example, cn-hangzhou
accessKeyId: # AccessKey ID of a RAM user
accessKeySecret: # AccessKey secret of a RAM user
jarPath: # (Optional) Path to the deployment package. Skips Maven packaging if specified.
Configuración del paquete (toolkit_package.yaml)
apiVersion: V1
kind: AppPackage
spec:
packageType: # War, FatJar, Image, or url
packageUrl: # (Optional) URL of a remote deployment package. Used when packageType is url.
imageUrl: # (Optional) Image URL. Used when packageType is Image.
Configuración del despliegue (toolkit_deploy.yaml)
apiVersion: V1
kind: AppDeployment
spec:
type: kubernetes
target:
appId: # Application ID. If specified, namespaceId and appName are not required.
namespaceId: # Microservices namespace ID. Required if appId is not specified.
appName: # Application name. Required if appId is not specified.
updateStrategy:
type: GrayBatchUpdate
grayUpdate:
gray: 2 # Number of instances to update in the canary phase
batchUpdate:
batch: 3 # Number of batches for the remaining instances
releaseType: auto # auto or manual
batchWaitTime: 5 # Minutes to wait between batches
La siguiente tabla describe los parámetros del despliegue canary:
|
Parámetro |
Descripción |
Ejemplo |
|
|
ID de la aplicación en EDAS |
|
|
|
ID del namespace de microservices |
|
|
|
Número de instancias canary |
|
|
|
Número de lotes de despliegue |
|
|
|
|
|
|
|
Minutos entre lotes |
|
Paso 3: Ejecutar el comando de despliegue
Vaya al directorio que contiene el archivo pom.xml (o el pom.xml del submódulo) y ejecute:
mvn clean package toolkit:deploy \
-Dtoolkit_profile=toolkit_profile.yaml \
-Dtoolkit_package=toolkit_package.yaml \
-Dtoolkit_deploy=toolkit_deploy.yaml
Cuando el despliegue se completa correctamente, la salida muestra BUILD SUCCESS.
Parámetros del comando:
|
Parámetro |
Descripción |
|
|
Despliega la aplicación después de completar el empaquetado de Maven. |
|
|
Ruta al archivo de configuración de la cuenta. |
|
|
Ruta al archivo de configuración del paquete. |
|
|
Ruta al archivo de configuración del despliegue. |
|
|
(Opcional) Versión del despliegue. Anula la versión definida en |
Para omitir los parámetros -Dtoolkit_profile, -Dtoolkit_package y -Dtoolkit_deploy, coloque los archivos de configuración en el mismo directorio que el archivo pom.xml y anteponga un punto a cada nombre de archivo (.toolkit_profile.yaml, .toolkit_package.yaml, .toolkit_deploy.yaml). El plugin los detectará automáticamente.
Escenarios de despliegue
Despliegue con un paquete WAR o FatJar local
Compile un paquete WAR o FatJar localmente y despliéguelo en una aplicación existente de EDAS.
toolkit_package.yaml:
apiVersion: V1
kind: AppPackage
spec:
packageType: War # Or FatJar
toolkit_deploy.yaml:
apiVersion: V1
kind: AppDeployment
spec:
type: kubernetes
target:
appId: # Application ID
namespaceId: # (Optional) Namespace ID, required if appId is not specified
appName: # (Optional) Application name, required if appId is not specified
Despliegue con una URL de imagen existente
Despliegue una aplicación mediante una imagen de contenedor que ya existe en un registro.
toolkit_package.yaml:
apiVersion: V1
kind: AppPackage
spec:
packageType: Image
imageUrl: registry.cn-beijing.aliyuncs.com/test/gateway:latest
toolkit_deploy.yaml:
apiVersion: V1
kind: AppDeployment
spec:
type: kubernetes
target:
appId: # Application ID
namespaceId: # (Optional) Namespace ID, required if appId is not specified
appName: # (Optional) Application name, required if appId is not specified
Compilación y envío de una imagen Docker local
Compile una imagen Docker localmente, envíela a un repositorio de imágenes de contenedor de Alibaba Cloud y realice el despliegue.
toolkit_package.yaml:
apiVersion: V1
kind: AppPackage
spec:
packageType: Image
build:
docker:
dockerfile: Dockerfile
imageRepoAddress: # Image repository address
imageTag: # Image tag
imageRepoUser: # Repository username
imageRepoPassword: # Repository password
toolkit_deploy.yaml:
apiVersion: V1
kind: AppDeployment
spec:
type: kubernetes
target:
appId: # Application ID
namespaceId: # (Optional) Namespace ID, required if appId is not specified
appName: # (Optional) Application name, required if appId is not specified
Referencia de configuración
Parámetros del paquete
apiVersion: V1
kind: AppPackage
spec:
packageType: # War, FatJar, Image, or url
imageUrl: # Image URL. Required when deploying with an image.
packageUrl: # Package URL. Used when packageType is url.
build:
docker:
dockerfile: # Dockerfile path. Required for local image builds.
imageRepoAddress: # Alibaba Cloud image repository address
imageTag: # Image tag
imageRepoUser: # Repository username
imageRepoPassword: # Repository password
oss:
bucket: # Object Storage Service (OSS) bucket name
key: # OSS object path
accessKeyId: # AccessKey ID for OSS access
accessKeySecret: # AccessKey secret for OSS access