0% encontró este documento útil (0 votos)
22 vistas6 páginas

Kubernetes

Cargado por

coroline24
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
22 vistas6 páginas

Kubernetes

Cargado por

coroline24
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

SISTEMAS EN LA NUBE

Guía Laboratorio 3
Docker - Kubernetes
Objetivo

Comprender el funcionamiento y uso de herramientas de Orquestación de contenedores mediante


aplicaciones reales.

Duración
Ciento veinte (120) minutos.

Introducción

Docker es una plataforma creada con el fin de desarrollar, implementar y ejecutar aplicaciones dentro
de contenedores. Lo cual permite a los desarrolladores realizar el empaquetado de nuestras
aplicaciones junto a sus correspondientes dependencias dentro de unas unidades estandarizadas
conocidas bajo el término de contenedores de software.

Aunque existen distintos tipos de implementaciones de contenedores, el más famoso motor para crear
contenedores de software es Docker.

Además, hay que matizar que dentro del contenedor se definen una serie de instrucciones (dockerfile)
que permiten crear una imagen (docker image) con la que poder arrancar a dicho contenedor.

 Dockerfile: es el documento de texto sobre el que podemos agrupar una serie de comandos
con el fin que se ejecuten todos a la vez evitando así tener que ejecutarlos uno a uno
manualmente con el fin de que el proceso de crear una imagen de Docker sea mucho más
rápido y eficiente.

 Docker image: una imagen de Docker contiene las librerías, junto al código de la aplicación que
contiene todo lo necesario para ejecutar nuestra aplicación.

 Container: es una imagen de Docker cuando empieza a funcionar, es decir, cuando cobra
vida).
SISTEMAS EN LA NUBE

Orquestación de contenedores

1. Instalacion de Minikube y Kubectl. Vaya línea por linea

curl -LO https://dl.k8s.io/release/v1.24.0/bin/linux/amd64/kubectl


sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client
curl -LO
https://storage.googleapis.com/minikube/releases/latest/minikube-linux-
amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
sudo minikube start --force
sudo kubectl get po -A

2. Abra otra pestaña de consola, corra el siguiente comando y deje abierta esa ventana.
sudo minikube tunnel

3. Regrese a la pestaña principal. Correr el siguiente contenedor, muestra por pantalla el identificador
del contenedor. Verificar que el resultado es el mismo identificador que el mostrado en docker ps.

sudo docker run -d --name kubappTest -p 5001:5000


serrodcal/kubapp

4. Adjuntar captura del resultado de http://localhost:5000

5. Eliminar el contenedor recien creado.


sudo docker rm -f kubapp
6. Para comenzar, vamos a desplegar la aplicación en K8s, en este primer paso mediante comandos:
sudo kubectl run kubapp --image=serrodcal/kubapp:latest --port=5000 --
image-pull-policy=IfNotPresent --labels="app=kubapp"
7. Para asegurarnos que el pod está ejecutándose ejecutar y comprobar que el estado es Runing
hacemos lo siguiente
sudo kubectl get pods
8. Una vez que tenemos el pod ejecutándose en estado RUNNING con nuestra aplicación, en
concreto, un recurso de tipo deployment, vamos a exponer nuestra aplicación para tener un servicio
disponible al que llamar
sudo kubectl expose pod kubapp --type=LoadBalancer --port=5000 --
SISTEMAS EN LA NUBE

name=kubapp-http
9. Ya podemos recuperar la IP y puerto para hacer la petición a nuestra aplicación. Esto corresponde
al valor asignado en la columna EXTERNAL_IP
sudo kubectl get Service

10. Adjuntar captura de pantalla de la respuesta al comando anterior

11. Podemos recuperar toda la información de cualquier tipo de recurso mediante la inspección. En este
caso, vamos a inspeccionar nuestro pod.
sudo kubectl describe pod kubapp
12. Adjuntar captura del resultado del comando anterior.

13. Así como vimos en el laboratorio anterior, podemos describir servicios (contenedores) de forma
sencilla mediante archivos en formato YAML. (Recordar Docker-compose). Si tenemos un
recurso creado, como es nuestro caso, podemos recuperar su descripción en formato YAML.
Por ejemplo, para uno de nuestros pods
sudo kubectl get pod kubapp -o yaml
14. Adjuntar salida del commando anterior
status: conditions: - lastProbeTime: null lastTransitionTime: "2024-06-17T19:11:02Z"
status: "True" type: Initialized - lastProbeTime: null lastTransitionTime: "2024-06-
17T19:11:12Z" status: "True" type: Ready - lastProbeTime: null lastTransitionTime:
"2024-06-17T19:11:12Z" status: "True" type: ContainersReady - lastProbeTime: null
lastTransitionTime: "2024-06-17T19:11:02Z" status: "True" type: PodScheduled
containerStatuses: - containerID:
docker://2ff66835f19415662d8186e8cb4b6d6cad50ca0bc601864fd97b3aee5463da6d image:
serrodcal/kubapp:latest imageID: docker-
pullable://serrodcal/kubapp@sha256:d50c9d8d3056c85f7de8d2ce5d760036a53207a741e5503
14cacd4816e007fb6 lastState: {} name: kubapp ready: true restartCount: 0 started:
true state: running: startedAt: "2024-06-17T19:11:12Z" hostIP: 192.168.49.2 phase:
Running podIP: 10.244.0.32 podIPs: - ip: 10.244.0.32 qosClass: BestEffort startTime: "2024-
06-17T19:11:02Z"
SISTEMAS EN LA NUBE

El YAML es la representación de en qué estado se encuentra nuestra aplicación. En adelante,


cuando trabajamos con K8s desplegando desde ficheros YAML lo que estamos indicando a
K8s es el estado en el que queremos que se quede el clúster, dándonos igual cómo lo haga.

15. Vamos a borrar el servicio y el pod creados


sudo kubectl delete pod kubapp
sudo kubectl delete service kubapp-http

16. Como pudo observar en la salida del paso 13, ese YAML contiene mucha información que por
defecto configura el clúster. Sin embargo, nosotros podemos escribir nuestro propio YAML con
los parámetros configurables de importancia.
En un directorio conocido, cree el archivo kubapp-deployment.yaml con el siguiente contenido.
ADVERTENCIA: En los archivos YAML es muy importante la indentación
apiVersion: apps/v1
kind: Deployment
metadata:
name: kubapp
labels:
app: kubapp
spec:
replicas: 1
selector:
matchLabels:
app: kubapp
template:
metadata:
labels:
app: kubapp
spec:
containers:
- name: kubapp
image: serrodcal/kubapp
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5000

17. Correr el archivo de Kubernetes con el comando sudo kubectl apply -f kubapp-deployment.yaml
18. Exponga el pod como se lo hizo en el paso 8.
19. Inspeccione el Servicio creado para obtener la ip/puerto asignado con el comando:
sudo kubectl get service
20. Acceda a http://localhost:puerto y adjunte captura
SISTEMAS EN LA NUBE

21. Como podrá observar, el resultado de la pagina web mostraba el nombre del pod en el cual se
estaba ejecutando la aplicación. En aplicaciones del mundo real con gran afluencia de tráfico,
nosotros deberíamos configurar replicas para que todas las peticiones puedan ser procesadas.
Vamos a aumentar el valor de replicas en nuestro archivo kubeapp_deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: kubapp
labels:
app: kubapp
spec:
replicas: 5
selector:
matchLabels:
app: kubapp
template:
metadata:
labels:
app: kubapp
spec:
containers:
- name: kubapp
image: serrodcal/kubapp
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5000

22. Para aplicar los cambios, no es necesario reiniciar el deployment, basta correr el siguiente
comando para que el estado deseado se actualice
sudo kubectl apply -f kubapp-deployment.yaml
23. Ahora, recargue varias veces la aplicación web para ver como cambia el pod donde se ejecuta
la petición. Adjunte al menos dos capturas distintas
SISTEMAS EN LA NUBE

Conclusiones

 Docker permite empaquetar aplicaciones con todas sus dependencias dentro de contenedores.
Esto facilita el desarrollo, despliegue y ejecución de aplicaciones de manera eficiente y
consistente, eliminando problemas de compatibilidad y configuración entre diferentes
entornos de desarrollo y producción.
 Kubernetes es una plataforma poderosa que ayuda a gestionar contenedores. Facilita la
automatización del despliegue, el escalado y la operación de aplicaciones que se ejecutan en
contenedores.
 Al usar archivos YAML, se puede definir de manera clara y sencilla cómo se debe configurar
y mantener el clúster, permitiendo que las aplicaciones se ajusten automáticamente para
manejar más tráfico cuando sea necesario.

Recomendaciones
 Asegúrate de seguir cada paso en el orden indicado para evitar errores y garantizar que todo
funcione correctamente.
 Comprueba los resultados después de cada comando para asegurarte de que los servicios y
contenedores se están ejecutando como se espera.
 Toma capturas de pantalla de los resultados clave y guárdalas para poder revisar y solucionar
problemas más adelante.

También podría gustarte