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