Kubernetes: RollingUpdate y RollBacks de Contenedores
Una de las mayores ventajas que veo al usar Kubernetes, es la facilidad de hacer despliegues de nuevas versiones de aplicaciones (Updates) y poder volver a atrás (Rollbacks) relativamente rápido si hay un problema.
Lo vamos a explicar con un despliegue clásico a través de un Deployment de Nginx. Imaginaros que tenéis corriendo un contenedor Nginx. Generamos un contenedor mediante un Deployment que se llama «nginx»:
raulunzue@KBMASTER:~$ kubectl create deployment nginx --image=nginx:1.17.9
deployment.apps/nginx created
Revisamos en el propio contenedor que la versión es la adecuada:
raulunzue@KBMASTER:~$ kubectl exec -it nginx-5c95c56f6f-h4767 -- /bin/bash
root@nginx01-nginx-5c95c56f6f-h4767:/# nginx -v
nginx version: nginx/1.17.9
Ahora vamos a forzar un update a la versión 1.17.10:
raulunzue@KBMASTER:~$ kubectl set image deploy nginx nginx=nginx:1.17.10 --record
deployment.apps/nginx image updated
Si observamos el comportamiento, la versión antigua del contenedor, se muere y arranca un nuevo contenedor con la nueva versión:
raulunzue@KBMASTER:~$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-5c95c56f6f-h4767 1/1 Terminating 0 3m3s 10.69.2.132 kubernetes02
nginx-5df596bbf9-rmrx9 1/1 Running 0 14s 10.69.5.63 kubernetes01
Comprobamos la versión nuevamente, pero del nuevo contenedor:
raulunzue@KBMASTER:~$ kubectl exec -it nginx-5df596bbf9-rmrx9 -- /bin/bash
root@nginx01-nginx-5df596bbf9-rmrx9:/# nginx -v
nginx version: nginx/1.17.10
Si queremos volver a la versión anterior, podemos consultar el histórico mediante:
raulunzue@KBMASTER:~$ kubectl rollout history deployment nginx
deployment.apps/nginx
REVISION CHANGE-CAUSE
1
2 kubectl set image deploy nginx nginx=nginx:1.17.10 --record=true
Observaremos al hacer el rollback con el siguiente comando, que el proceso es a la inversa, se termina el nuevo contenedor y se ejecuta otro con la versión antigua:
raulunzue@KBMASTER:~$ kubectl rollout undo deployment nginx --to-revision=1
deployment.apps/nginx rolled back
Volvemos a comprobar la versión de Nginx:
raulunzue@KBMASTER:~$ kubectl exec -it nginx-5c95c56f6f-8rd49 -- /bin/bash
root@nginx-5c95c56f6f-8rd49:/# nginx -v
nginx version: nginx/1.17.9
Si os parece interesante, el poder es que lo podéis hacer con otros objetos como deployments, daemonset…
Espero os parezca interesante…
¿Te ha gustado la entrada SÍGUENOS EN TWITTER?
La entrada Kubernetes: RollingUpdate y RollBacks de Contenedores se publicó primero en Blog Virtualizacion.