Soy Oscar Mas y una de las cosas que más me gusta de Kubernetes, es la posibilidad de realizar la marcha atrás cuando desplegamos una nueva versión de nuestro sistema.
En esta parte, se da por hecho que ya tenemos montado un sistema de Kubernetes.
En este post os voy a explicar como retroceder de versión cuando sufrimos alguna incidencia grave en el despliegue de una nueva versión de nuestros pods. En concreto lo que haré es desplegar la versión de nginx 1.10.2, actualizaré a la versión 1.11.5 y posteriormente volver a la versión inicial 1.10.2 de nginx que teníamos antes de la actualización. Esta característica, nos la ofrece los Deployments de Kubernetes.
Primero desplegaremos tres pods de la versión de nginx 1.10.2 mediante un deployment:
rootdevel@ub-nodo0-sbd:~$ cat nginx.yaml
ApiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-test
spec:
replicas: 3
selector:
matchLabels:
service: http-server
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
minReadySeconds: 5
template:
metadata:
labels:
service: http-server
spec:
containers:
- name: nginx
image: nginx:1.10.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
Verificaremos que se han desplegado los pods correctamente:
rootdevel@ub-nodo0-sbd:~$ kubectl get pods -o wide
Nos meteremos en uno de los pods para verificar que la versión de nginx instalada es la deseada:
rootdevel@ub-nodo0-sbd:~$ kubectl exec -it nginx-test-5f9f9d8465-5s8dn -- /bin/bash root@nginx-test-5f9f9d8465-5s8dn:/# nginx -v root@nginx-test-5f9f9d8465-5s8dn:/# exit
Una vez verificada la versión de nginx, actualizaremos a la versión: 1.11.5. Podremos ver como borra los antiguos pods y crea los nuevos, una vez acabado observaremos lo siguiente:
rootdevel@ub-nodo0-sbd:~$ kubectl set image deployment nginx-test nginx=nginx:1.11.5 --record rootdevel@ub-nodo0-sbd:~$ kubectl get pods -o wide
Para verificar que tenemos la versión deseada, nos meteremos dentro de uno de los pods y verificaremos que se ha actualizado la versión de nginx:
rootdevel@ub-nodo0-sbd:~$ kubectl exec -it nginx-test-785c9d75bc-26fr8 -- /bin/bash root@nginx-test-785c9d75bc-26fr8:/# nginx -v root@nginx-test-785c9d75bc-26fr8:/# exit
Ahora viene el punto en que retrocedemos de la versión 1.11.5 a la versión 1.10.2:
rootdevel@ub-nodo0-sbd:~$ kubectl rollout history deployment nginx-test rootdevel@ub-nodo0-sbd:~$ kubectl rollout undo deployment nginx-test --to-revision=1
Y como hemos hecho anteriormente nos conectaremos a uno de los pods y verificaremos que hemos retrocedido de versión:
rootdevel@ub-nodo0-sbd:~$ kubectl get pods -o wide rootdevel@ub-nodo0-sbd:~$ kubectl exec -it nginx-test-5f9f9d8465-74mcs -- /bin/bash root@nginx-test-5f9f9d8465-74mcs:/# nginx -v root@nginx-test-5f9f9d8465-74mcs:/# exit
No te pierdas la serie completa sobre Kubernetes de Oscar Mas:
- Kubernetes – Introducción a Kubernetes
- Kubernetes – Instalación
- Kubernetes – RollingUpdate con Kubernetes
- Kubernetes – Dashboard
- Kubernetes – Volúmenes NFS
- Kubernetes – Registry
- Kubernetes – Traefik
- Kubernetes – Systemd con Traefik y Proxy de Kubernetes
- Kubernetes – Heapster Influx Grafana
- Kubernetes – Labels de Kubernetes
- Kubernetes – API: Swagger
- Kubernetes – API: Creando nuestro primer POD
- Kubernetes – API: Seguridad con Token

[…] Kubernetes – RollingUpdate con Kubernetes […]