Para realizar los TPs vas a necesitar un cluster de kubernetes y el archivo de config para poder usar kubectl
y comunicarte con el cluster. Hay varias alternativas a la hora de levantar un cluster:
- User un servicio manejado: la mayoria de los cloud providers ofrecen un servicio de kubernetes manejado. Manejado quiere decir que ellos se encargan de mantener el cluster de masters (etcd, api server y demas) por vos. Ademas de eso, suelen prohibirte (algunos te lo permiten) hacer
ssh
a los nodos workers. Lo bueno de estos servicios es que son muy faciles de configurar y para lo que vamos a estar haciendo no van a tener mucho costo. El mas barato que hemos visto es Digital Ocean, por ~20usd mensuales pueden tener un cluster con mas que suficientes recursos para los TPs, de todas maneras se paga por uso y no necesitan tenerlo siempre levantado, pueden crear/eliminar para cada TP, si hacen eso les va a salir practicamente nada. - Cluster local: una alternativa gratis es levantar kubernetes en su maquina. Al estar en su maquina van a haber un par de cosas que no van a poder hacer, pero para el primer TP alcanza. Pueden usar kind, el unico requerimiento es tener Docker instalado. Una vez que lo instalan pueden crear un cluster con
kind create cluster --name k8s
y eso ya les va a dar un config file para usar conkubectl
. Si no quieren usar kind pueden usar minikube, la diferencia principal es queminikube
levanta una maquina virtual y corre los componentes del cluster ahi dentro. - Crear un cluster con kubeadm: si se sienten aventureros/as pueden crear el cluster de kubernetes desde cero por su cuenta usando
kubeadm
. Esto va a requerir crear un par de maquinas virtuales (en un cloud provider o localmente), inicializar el cluster en el nodo master y unir los workers al cluster.
En este TP la idea es familiarizarse con kubectl
y el ciclo de vida básico de la creación de un pod y deployment. Tambíen se pide
crear un pod multi-container para así aprender cómo los containers dentro del mismo interactúan entre sí.
- Listar todos los namespaces en un cluster
- Listar todos los PODS en todos los namespaces
- Listar los pods en un namespace en particular
- Crear un POD con 3 containers busybox que realizen los iguiente:
ls; sleep 3600
echo "Hello World"; sleep 3600
echo "Este es el 3er contenedor"; sleep 3600
- Una vez creados los mismos chequear su estado
- Crear un deployment llamado
webapp
con una imagen de nginx con 2 replicas. Luego:- Obtener el deployment creado y mostrar tus labels
- Obtener el archivo yaml del deployment creado
- Mostrar los pods corriendo del deployment
- Escalar el deployment de 2 a 5 replicas y verificar que funciona correctamente
- Obtener el estado del scale-up del deployment
- Mostrar el replicaset creado por el deployment
En este TP vamos a seguir metiendonos en profundo con kubectl
para seguir aprendiendo como manejar nuestros recursos. La idea es que sepan como acceder a un servicio del cluster que no tenga acceso desde afuera, aprendan a hacer nuevos rollouts, customizar estrategias de rolling update y definir probes de liveness y readiness para indicarle a k8s como validar el estado de su servicio. Para algunos de estos ejercicios van a usar Service
de tipo NodePort
para exponer a internet su servicio, si estan usando kind
o minikube
localmente pueden crearlo igual y accederlo desde su compu.
- Crear un
Deployment
con la imagen denginx
que escuche en el puerto 8080, - Creen un
Service
que solo acepte trafico interno para su deployment de nginx, - Hagan un
port-forward
al servicio para poder accederlo localmente, - Modifiquen el
Service
para que ahora seaNodePort
y accedan a su servicio sin usar port-forward (obtengan la info del nodo y el puerto), - Actualizen el
Deployment
para que tenga una version distinta de nginx. Pueden buscar las versiones disponibles aca. Mientras hacen esa actualizacion, chequeen el status de los pods y replicasets, - Actualizen ese deployment con una imagen invalida. Luego de ver que los pods no se pueden crear aborten el rollout actual,
- Escalen su
Deployment
a 6 replicas y:- Configuren el rolling update para que reemplaze de a 2 containers a la vez,
- Actualizen la imagen y analizen como los pods y replicasets van cambiando,
- Configuren el rolling update para que reemplaze un 50% de containers a la vez,
- Vuelvan a actualizar la imagen y validen los cambios de pods y replicasets.
- Editen su
Deployment
y configuren distintos tipos de probes:- Agreguen un readiness probe de
http
que se ejecute despues de 1 segundo cada 5 segundos, - Agreguen un liveness probe de
tcp
que se ejecute despues de 5 segundos cada 3 segundos y que considere el servicio como no healthy despues de 3 fallas,
- Agreguen un readiness probe de