Rolling updates y Rollbacks

El cambio de versión de aplicaciones que se encuentran en producción, suele ser momento crítico, por lo que tener la opción de volver a la versión anterior, en caso de que algo falle, es un seguro de vida. En kubernetes, existe esta posibilidad.

Comenzamos creando un fichero llamado deploy.yaml, con el siguiente contenido:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy
  labels:
    app: deploy
spec:
  selector:
    matchLabels:
      app: deploy
  replicas: 2
  template:
  metadata:
    labels:
      app: deploy
  spec:
   containers:
     - image: anynou/contenedor1
     name: deploy
     ports:
     - containerPort: 80
     name: http

Aplicamos la configuración anterior ejecutando:

kubectl apply -f deploy.yaml

Ahora tenemos un deploy con 2 pods corriendo. Vamos a exponer este deploy a un puerto externo. Para ello, ejecutamos:

kubectl expose deployment deploy --type=NodePort

Ahora si vemos los servicios corriendo en el cluster veremos algo similar a lo siguiente:

Si hacemos un curl a la ip del servicio deploy, debemos obtener «contenedor1», que es el contenido de la imagen que hemos utilizado en el deploy.

Vamos a cambiar la verisón del contendor. Si queremos ver el cambio en tiempo real, podemos abrir otra terminal en el master y ejecutar lo siguiente:

while true; do curl 10.106.251.241; done

Debemos ver solo la palabra «contenedor1». Para ejecutar un rolling update, ejecutamos lo siguiente:

kubectl set image deployment deploy deploy=anynou/contenedor2

En la otra terminal, debemos ver como se intercalan las palabras «contendor1» y «contenedor2», hasta que solo nos aparece «contendor2». Si queremos ver el estado del rollupdate podemos ejecutar:

kubectl rollout status deployment deploy

También podemos ver las versiones del deployment con:

kubectl rollout history deploy

Si queremos volver a la versión anterior, podemos ejecutar:

kubectl rollout undo deployment deploy

 

Artículos relacionados