Una forma simple y segura de automatizar las implementaciones de Canary con Helm

Una forma simple y segura de automatizar las implementaciones de Canary con Helm

La implementación de Canary es una forma muy eficaz de probar código nuevo en un subconjunto de usuarios. Reduce significativamente la carga de tráfico que puede resultar problemática durante el proceso de implementación, ya que sólo ocurre dentro de un subconjunto específico. Esta nota está dedicada a cómo organizar dicha implementación utilizando Kubernetes y la automatización de la implementación. Suponemos que sabe algo sobre los recursos de Helm y Kubernetes..

Una forma simple y segura de automatizar las implementaciones de Canary con Helm

Una implementación canary simple en Kubernetes incluye dos recursos clave: el servicio en sí y la herramienta de implementación. La implementación de Canary funciona a través de un único servicio que interactúa con dos recursos diferentes que atienden el tráfico de actualizaciones. Uno de estos recursos funcionará con la versión "canary" y el segundo funcionará con la versión estable. En esta situación, podemos regular la cantidad de versiones canary para reducir la cantidad de tráfico necesario para servir. Si, por ejemplo, prefiere utilizar Yaml, se verá así en Kubernetes:

kind: Deployment
metadata:
  name: app-canary
  labels:
    app: app
spec:
  replicas: 1
  ...
    image: myapp:canary
---
kind: Deployment
metadata:
  name: app
  labels:
    app: app
spec:
  replicas: 5
  ...
    image: myapp:stable
---
kind: Service
selector:
  app: app # Selector will route traffic to both deployments.

Es aún más fácil imaginar esta opción usando kubectl, y en Documentación de Kubernetes Incluso hay un tutorial completo sobre este escenario. Pero la pregunta principal de esta publicación es cómo vamos a automatizar este proceso usando Helm.

Automatización del despliegue canario.

En primer lugar, necesitamos un mapa del gráfico Helm, que ya incluye los recursos que comentamos anteriormente. Debería verse así:

~/charts/app
├── Chart.yaml
├── README.md
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   └── service.yaml
└── values.yaml

La base del concepto Helm es la gestión de lanzamientos de múltiples versiones. La versión estable es nuestra principal rama estable del código del proyecto. Pero con Helm podemos implementar una versión canary con nuestro código experimental. Lo principal es mantener el intercambio de tráfico entre la versión estable y la versión canary. Todo esto lo gestionaremos mediante un selector especial:

selector:
  app.kubernetes.io/name: myapp

Nuestros recursos de implementación estable y "canario" indicarán esta etiqueta en los módulos. Si todo está configurado correctamente, durante la implementación de la versión canary de nuestro mapa de gráfico Helm veremos que el tráfico se dirigirá a los módulos recién implementados. La versión estable de este comando se verá así:

helm upgrade
  --install myapp 
  --namespace default 
  --set app.name=myapp       # Goes into app.kubernetes.io/name
  --set app.version=v1       # Goes into app.kubernetes.io/version
  --set image.tag=stable 
  --set replicaCount=5

Ahora revisemos nuestra versión canary. Para implementar la versión canary, debemos recordar dos cosas. El nombre de la versión debe ser diferente para que no implementemos una actualización a la versión estable actual. La versión y la etiqueta también deben ser diferentes para que podamos implementar otro código e identificar diferencias mediante etiquetas de recursos.

helm upgrade
  --install myapp-canary 
  --namespace default 
  --set app.name=myapp       # Goes into app.kubernetes.io/name
  --set app.version=v2       # Goes into app.kubernetes.io/version
  --set image.tag=canary 
  --set replicaCount=1

¡Eso es todo! Si hace ping al servicio, podrá ver que la actualización canary enruta el tráfico solo una parte del tiempo.

Si está buscando herramientas de automatización de implementación que incluyan la lógica descrita, preste atención a robot de entrega y Herramientas de automatización de Helm en GitHub. Los gráficos de Helm utilizados para implementar el método descrito anteriormente están en Github, aquí. En general, esta fue una descripción teórica de cómo implementar la automatización del despliegue de versiones canarias en la práctica, con conceptos y ejemplos específicos.

Fuente: habr.com

Añadir un comentario