Crear containers (Docker) sobre Kubernetes
El otro día os explicamos cómo crear un cluster de Kubernetes sobre Debian. Partimos de 3 nodos:
- KBMASTER: Master del clúster de Kubernetes
- KUBERNETES01: Nodos del clúster de Kubernetes
- KUBERNETES02: Nodo del clúster de Kubernetes
Hoy vamos a explicar las operaciones básicas para gestionar contenedores o containers sobre dicha plataforma de Kubernetes.
Lo primero sería hacer un pequeño resumen de los diferentes componentes, os dejo el enlace de la entrada sobre conceptos básicos en Kubernetes:
Para el despliegue de una aplicación utilizaremos el comando kubectl que es el equivalente a docker-compose.
Crear un Pod en Kubernetes
Lo primero que generaremos es un Pod, que como ya explicamos es uno o varios containers unidos entre sí para su administración y creación de redes.
Para esta prueba utilizaremos el más básico que existe como es hello-app, que constará de un solo container. Lo generaremos con el comando kubectl run:
kubectl run hello-world-pod-elblogdenegu --image=gcr.io/google-samples/hello-app:2.0 --generator=run-pod/v1
Podemos verificar su estado con el siguiente comando:
kubectl get pods -o wide
También nos dará una IP y en qué nodo corre:
Si queremos saber más datos del Pod podemos usar:
kubectl describe pod hello-world-pod-elblogdenegu
Pero existen dos “pegas” con este Pod:
- Por una parte dispone de una IP interna. Y sólo podremos verificar su estado internamente, por ejemplo con CURL. Lo haremos desde el nodo donde corre:
curl http://10.69.2.8:8080
- No se ha generado un Deployment, y eso implica que somos responsables del estado del Pod y sus containers (y para olvidarnos un poco de esto queremos usar Kubernetes)
Eliminar Pod en Kubernetes
Podemos eliminar un Pod en Kubernetes de la siguiente forma:
kubectl delete pod hello-world-pod-elblogdenegu
Así que seguimos…
Crear deployment de Kubernetes
Si generamos un Pod, necesitaremos un sistema que vigile que funcione constantemente. Lo que nos va a permitir un deployment es verificar ese Pod y reiniciar automáticamente los containers que lo componen si finalizan. Esto nos va a permitir escalar de forma correcta los Pods que construyamos.
Os explico cómo generar un Deployment en Kubernetes y que se genere un Pod automáticamente. Generamos y comprobamos tanto que existe un deployment como un pod:
raulunzue@KBMASTER:~$ kubectl create deployment hello-world-deployment-elblogdenegu --image=gcr.io/google-samples/hello-app:2.0
deployment.apps/hello-world-deployment-elblogdenegu created
raulunzue@KBMASTER:~$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
hello-world-deployment-elblogdenegu 1/1 1 1 5s
raulunzue@KBMASTER:~$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
hello-world-deployment-elblogdenegu-6dbbf956cf-q6879 1/1 Running 0 10s 10.69.2.10 kubernetes02
Eliminar Deployment en Kubernetes
Podemos eliminar un Deployment en Kubernetes de la siguiente forma:
kubectl delete deployment hello-world-deployment-elblogdenegu
Ver eventos en el cluster de Kubernetes
Podemos revisar todo lo que pasa en el cluster a través del siguiente comando:
kubectl get events
Crear Service en Kubernetes
De nada sirve tener una plataforma que sólo podamos ver desde la red interna, ya que no podremos trabajar con nuestros despliegues o aplicaciones. Para eso tenemos que tener claro otro concepto como son los Service.
Los cuales nos permiten exponer nuestras apps independientemente donde corran dentro del clúster de Kubernetes. Si revisamos qué services tenemos actualmente en el clúster, veremos que no existe ninguna app:
kubectl get services
La idea es publicar la que hemos generado en el deployment, y lo haremos con el siguiente comando:
kubectl expose deployment hello-world-deployment-elblogdenegu --type=LoadBalancer --name=hello-world-service-elblogdenegu --port=8082
Volvemos a revisar los services y la IP del Cluster asociada al service. Si EXTERNAL-IP se queda en pending, hay que esperar unos minutos:
Podemos extraer los datos del service de la siguiente forma:
kubectl describe services hello-world-service-elblogdenegu
Comprobaríamos el acceso de la siguiente forma:
curl http://<external-ip>:<port>
Eliminar Service en Kubernetes
Para eliminar el service usáis el siguiente comando:
kubectl delete service hello-world-service-elblogdenegu
¿Te ha gustado la entrada SÍGUENOS EN TWITTER?
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?