Ejercicios de K8s II.

Segundo taller de la unidad de Kubernetes.

Creado en February 11, 2023.


Tabla de Contenido.


Como indicamos en el contenido de este módulo, no se va a trabajar directamente con los Pods (realmente tampoco vamos a trabajar directamente con los ReplicaSet, en el siguiente módulo explicaremos los Deployments que serán el recurso con el que trabajaremos). En este ejercicio vamos a crear un ReplicaSet que va a controlar un conjunto de Pods. Para ello, realiza los siguientes pasos:

Crea un fichero yaml con la descripción del recurso ReplicaSet, teniendo en cuenta los siguientes aspectos:

  • Indica nombres distintos para el ReplicaSet y para el contenedor de los Pods que va a controlar.

  • El ReplicaSet va a crear 3 réplicas.

  • La imagen que debes desplegar es iesgn/test_web:latest.

  • Indica de manera adecuada una etiqueta en la especificación del Pod que vas a definir que coincida con el selector del ReplicaSet.

El fichero es el siguiente:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replicaset-t2
labels:
service: web
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: iesgn/test_web:latest
name: contenedor-t2

Crea el ReplicaSet.

Usamos el siguiente comando para crear el ReplicaSet:

alemd@debian:~/minikube$ kubectl apply -f pod-t2.yaml
replicaset.apps/replicaset-t2 created

Comprueba que se ha creado el ReplicaSet y los 3 Pods.

El comando para ver los pods es el siguiente:

alemd@debian:~/minikube$ kubectl get rs
NAME DESIRED CURRENT READY AGE
replicaset-t2 3 3 3 4m2s
alemd@debian:~/minikube$ kubectl get pods
NAME READY STATUS RESTARTS AGE
replicaset-t2-56w4m 1/1 Running 0 116s
replicaset-t2-9jnsp 1/1 Running 0 116s
replicaset-t2-mbhkx 1/1 Running 0 116s

Obtén información detallada del ReplicaSet creado.

Usamos el siguiente comando para ver información detallada del ReplicaSet:

alemd@debian:~/minikube$ kubectl describe rs replicaset-t2
Name: replicaset-t2
Namespace: default
Selector: app=nginx
Labels: service=web
Annotations: <none>
Replicas: 3 current / 3 desired
Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: app=nginx
Containers:
contenedor-t2:
Image: iesgn/test_web:latest
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 4m49s replicaset-controller Created pod: replicaset-t2-9jnsp
Normal SuccessfulCreate 4m49s replicaset-controller Created pod: replicaset-t2-56w4m
Normal SuccessfulCreate 4m49s replicaset-controller Created pod: replicaset-t2-mbhkx

Vamos a probar la tolerancia a fallos: Elimina uno de los 3 Pods, y comprueba que inmediatamente se ha vuelto a crear un nuevo Pod.

Borramos un pod y acto seguido lo mostramos y veremos que se ha creado otro automáticamente:

alemd@debian:~/minikube$ kubectl delete pod replicaset-t2-56w4m
pod "replicaset-t2-56w4m" deleted
alemd@debian:~/minikube$ kubectl get pods
NAME READY STATUS RESTARTS AGE
replicaset-t2-9jnsp 1/1 Running 0 5m38s
replicaset-t2-mbhkx 1/1 Running 0 5m38s
replicaset-t2-zt5dx 1/1 Running 0 10s

Vamos a comprobar la escalabilidad: escala el ReplicaSet para tener 6 Pods de la aplicación.

Cambiamos el número de réplicas y mostramos los pods que tenemos:

alemd@debian:~/minikube$ kubectl scale rs replicaset-t2 --replicas=6
replicaset.apps/replicaset-t2 scaled
alemd@debian:~/minikube$ kubectl get pods
NAME READY STATUS RESTARTS AGE
replicaset-t2-5fgnq 0/1 ContainerCreating 0 13s
replicaset-t2-8fzgx 0/1 ContainerCreating 0 13s
replicaset-t2-9jnsp 1/1 Running 0 7m1s
replicaset-t2-chxc9 0/1 ContainerCreating 0 13s
replicaset-t2-mbhkx 1/1 Running 0 7m1s
replicaset-t2-zt5dx 1/1 Running 0 93s

Elimina el ReplicaSet y comprueba que se han borrado todos los Pods.

Los eliminamos y los mostramos, como vemos tarda un poco ya que al hacer el primer get pods el estado de las réplicas era Terminating.

alemd@debian:~/minikube$ kubectl delete rs replicaset-t2
replicaset.apps "replicaset-t2" deleted
alemd@debian:~/minikube$ kubectl get pods
NAME READY STATUS RESTARTS AGE
replicaset-t2-5fgnq 1/1 Terminating 0 63s
replicaset-t2-8fzgx 1/1 Terminating 0 63s
replicaset-t2-9jnsp 1/1 Terminating 0 7m51s
replicaset-t2-chxc9 1/1 Terminating 0 63s
replicaset-t2-mbhkx 1/1 Terminating 0 7m51s
replicaset-t2-zt5dx 1/1 Terminating 0 2m23s
alemd@debian:~/minikube$ kubectl get pods
No resources found in default namespace.

Documento realizado por:

✒️ Alejandro Montes Delgado - 2º ASIR

Siguiente post

Ejercicios de K8s III.

Post anterior.

Cortafuegos I: De nodo con iptables.