Kubernetes: Desplegando la aplicación Mediawiki
mediawiki
es una aplicación escrita en PHP que nos permite gestionar una wiki. Vamos a hacer un despliegue en nuestro cluster de kubernetes.
En este ejemplo vamos a crear el Deployment
sin utilizar su definición en Yaml, con la siguiente instrucción:
kubectl run mediawiki --image=mediawiki --record
deployment.apps "mediawiki" created
kubectl get deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
mediawiki 1 1 1 0 5s
kubectl get rs
NAME DESIRED CURRENT READY AGE
mediawiki-85bf9d6bd7 1 1 0 5s
kubectl get pods
NAME READY STATUS RESTARTS AGE
mediawiki-85bf9d6bd7-97bhg 1/1 Running 0 25s
Utilizando la instrucción kubectl run
se crea un Deployment
con un ReplicaSet
asociado que arranca un pod. La opción --record
nos va a permitir guardar las actualizaciones del Deployment
como annotations
en la definición Yaml del mismo. Por lo tanto si vemos la definición del Deployment
:
kubectl get deployments mediawiki -o yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
kubernetes.io/change-cause: kubectl run mediawiki --image=mediawiki --record=true
...
Accediendo a nuestra aplicación
La única forma que tenemos en estos momentos (sin haber estudiado el recurso de Kubernetes services
) para acceder a la aplicación es haciendo un proxy desde un puerto de nuestro cliente a un puerto del master
del cluster de Kubernetes. Voy a redirigir las peticiones al puerto 8080 de mi máquina al puerto 80 de la ip del cluster, con la siguiente instrucción:
kubectl port-forward deployment/mediawiki 8080:80
Y comprobamos que podemos acceder:
Gestionando las versiones de nuestra aplicación
Podemos obtener la lista de versiones y modificaciones que se ha realizado en el despliegue con la siguiente instrucción:
kubectl rollout history deployment/mediawiki
deployments "mediawiki"
REVISION CHANGE-CAUSE
1 kubectl run mediawiki --image=mediawiki --record=true
Vemos que sólo tenemos una revisión que se ha producido al crear el despliegue.
Actualmente tenemos desplegada la versión stable
(1.30) de la aplicación, para actualizar la versión de la aplicación a la lts
(1.27):
kubectl set image deployment/mediawiki mediawiki=mediawiki:1.27 --all
deployment.apps "mediawiki" image updated
kubectl get deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
mediawiki 1 1 1 0 27m
kubectl get rs
NAME DESIRED CURRENT READY AGE
mediawiki-69f8b7464c 1 1 0 5s
mediawiki-85bf9d6bd7 0 0 0 27m
kubectl get pods
NAME READY STATUS RESTARTS AGE
mediawiki-69f8b7464c-zxphb 1/1 Running 0 <invalid>
Se ha creado un nuevo ReplicaSet
y un nuevo pods.
Y comprobamos el historial de versiones del despliegue:
kubectl rollout history deployment/mediawiki
deployments "mediawiki"
REVISION CHANGE-CAUSE
1 kubectl run mediawiki --image=mediawiki --record=true
2 kubectl set image deployment/mediawiki mediawiki=mediawiki:1.27 --all=true
Podríamos volver a la versión anterior con la instrucción kubectl rollout undo
pero vamos a realizar una nueva modificando, indicando una versión de la imagen que no existe, por lo que se va producir un error al crear el pod y es entonces cuando vamos a realizar el rollback a la versión anterior.
kubectl set image deployment/mediawiki mediawiki=mediawiki:2 --all
deployment.apps "mediawiki" image updated
kubectl get pods
NAME READY STATUS RESTARTS AGE
mediawiki-69684f6ff-z9bvb 0/1 ErrImagePull 0 <invalid>
Y podemos ver la lista de modificaciones:
kubectl rollout history deployment/mediawiki
deployments "mediawiki"
REVISION CHANGE-CAUSE
1 kubectl run mediawiki --image=mediawiki --record=true
2 kubectl set image deployment/mediawiki mediawiki=mediawiki:1.27 --all=true
3 kubectl set image deployment/mediawiki mediawiki=mediawiki:2 --all=true
Para volver a la versión anterior de la aplicación:
kubectl rollout undo deployment/mediawiki
deployment.apps "mediawiki"
kubectl get pods
NAME READY STATUS RESTARTS AGE
mediawiki-69f8b7464c-w8vqn 1/1 Running 0 5s
kubectl rollout history deployment/mediawiki
deployments "mediawiki"
REVISION CHANGE-CAUSE
1 kubectl run mediawiki --image=mediawiki --record=true
3 kubectl set image deployment/mediawiki mediawiki=mediawiki:2 --all=true
4 kubectl set image deployment/mediawiki mediawiki=mediawiki:1.27 --all=true
Índice de entradas sobre Kubernetes
Este artículo corresponde a una serie de entradas donde he hablado sobre Kubernetes:
- Instalación de kubernetes con kubeadm
- Desplegando una aplicación en Kubernetes
- Recursos de Kubernetes: Pods
- Recursos de Kubernetes: ReplicaSet
- Recursos de Kubernetes: Deployment
- Kubernetes: Desplegando la aplicación Mediawiki
- Kubernetes: Desplegando la aplicación GuestBook (Parte 1)
- Recursos de Kubernetes: Services
- El servicio DNS en Kubernetes
- Kubernetes: Desplegando la aplicación GuestBook (Parte 2)
- Kubernetes: Desplegando la aplicación LetsChat
- Recursos de Kubernetes: Ingress
- Accediendo a nuestras aplicaciones Kubernetes con Ingress
- Recursos de Kubernetes: Namespaces
- Kubernetes. Configurando nuestras aplicaciones: variables de entornos, ConfigMap, Secrets
- Kubernetes. Desplegando WordPress con MariaDB
- Almacenamiento en Kubernetes. PersistentVolumen. PersistentVolumenClaims
- Kubernetes. Desplegando WordPress con MariaDB con almacenamiento persistente
- Integración de Kubernetes con OpenStack
Leave a Comment
Your email address will not be published. Required fields are marked *