O toolkit-maven-plugin automatiza liberações canário para aplicações Spring Cloud, Dubbo e High-speed Service Framework (HSF) implantadas no Enterprise Distributed Application Service (EDAS). Em vez de atualizar todas as instâncias simultaneamente, a liberação canário aplica as alterações primeiro a um pequeno subconjunto de instâncias e, depois, promove gradualmente a atualização para as instâncias restantes em lotes.
Como funciona a liberação canário
A liberação canário com o toolkit-maven-plugin segue um processo de duas fases:
Fase canário: Implante a nova versão em um número especificado de instâncias (
gray). Essas instâncias recebem tráfego real, permitindo validar a nova versão antes da implantação completa.Fase de implantação em lotes: Distribua a nova versão para as instâncias restantes em lotes controlados (
batch), com um intervalo configurável (batchWaitTime) entre cada lote. Os lotes podem ser executados automaticamente ou exigir aprovação manual.
O tipo de estratégia de atualização do EDAS para esse processo é GrayBatchUpdate.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma aplicação Spring Cloud, Dubbo ou HSF implantada em um cluster Kubernetes do EDAS
Um AccessKey ID e AccessKey secret de um usuário do Resource Access Management (RAM) (recomendado em vez das credenciais da conta raiz)
O ID da aplicação (
appId) ou o ID do namespace de microsserviços (namespaceId) e o nome da aplicação (appName) da aplicação de destino
Configure uma liberação canário
Para configurar uma liberação canário, adicione a dependência do plug-in, crie os arquivos de configuração e execute o comando de implantação.
Etapa 1: Adicione a dependência do plug-in
Adicione a seguinte dependência ao seu arquivo pom.xml:
<build>
<plugins>
<plugin>
<groupId>com.alibaba.cloud</groupId>
<artifactId>toolkit-maven-plugin</artifactId>
<version>1.1.9</version>
</plugin>
</plugins>
</build>
Sempre use a versão mais recente do toolkit-maven-plugin.
Etapa 2: Crie os arquivos de configuração
Crie três arquivos YAML no diretório raiz do projeto empacotado. Se estiver implantando um submódulo Maven, crie o arquivo de configuração de pacote no diretório do submódulo.
Configuração de conta (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.
Configuração de pacote (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.
Configuração de implantação (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
A tabela a seguir descreve os parâmetros da liberação canário:
|
Parâmetro |
Descrição |
Exemplo |
|
|
ID da aplicação no EDAS |
|
|
|
ID do namespace de microsserviços |
|
|
|
Número de instâncias canário |
|
|
|
Quantidade de lotes de implantação |
|
|
|
|
|
|
|
Minutos entre os lotes |
|
Etapa 3: Execute o comando de implantação
Acesse o diretório que contém o arquivo pom.xml (ou o pom.xml do submódulo) e execute:
mvn clean package toolkit:deploy \
-Dtoolkit_profile=toolkit_profile.yaml \
-Dtoolkit_package=toolkit_package.yaml \
-Dtoolkit_deploy=toolkit_deploy.yaml
Quando a implantação for bem-sucedida, a saída exibirá BUILD SUCCESS.
Parâmetros do comando:
|
Parâmetro |
Descrição |
|
|
Implanta a aplicação após a conclusão do empacotamento Maven. |
|
|
Caminho para o arquivo de configuração de conta. |
|
|
Caminho para o arquivo de configuração de pacote. |
|
|
Caminho para o arquivo de configuração de implantação. |
|
|
(Opcional) Versão da implantação. Substitui a versão definida em |
Para omitir os parâmetros -Dtoolkit_profile, -Dtoolkit_package e -Dtoolkit_deploy, coloque os arquivos de configuração no mesmo diretório do pom.xml e prefixe cada nome de arquivo com um ponto (.toolkit_profile.yaml, .toolkit_package.yaml, .toolkit_deploy.yaml). O plug-in os detectará automaticamente.
Cenários de implantação
Implante com um pacote WAR ou FatJar local
Compile um pacote WAR ou FatJar localmente e implante-o em uma aplicação EDAS existente.
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
Implante com uma URL de imagem existente
Implante uma aplicação usando uma imagem de contêiner que já existe em um 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
Compile e envie uma imagem Docker local
Compile uma imagem Docker localmente, envie-a para um repositório de imagens de contêiner da Alibaba Cloud e implante-a.
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
Referência de configuração
Parâmetros de pacote
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