Skip to content

Commit 5b21fcb

Browse files
author
Eduard Tomàs
committed
Escenarios prácticos
1 parent 7737285 commit 5b21fcb

File tree

10 files changed

+145
-0
lines changed

10 files changed

+145
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
name: ejercicio
5+
labels:
6+
name: ejercicio
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: backend
5+
namespace: ejercicio
6+
labels:
7+
app: backend
8+
created-by: backend-team
9+
spec:
10+
containers:
11+
- name: main
12+
image: lemoncodersbc/go-hello-world:v1
13+
ports:
14+
- containerPort: 80
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Pistas
2+
3+
# 1.1 Que arranque el pod
4+
5+
El pod entra en `ImgPullBackoff` que significa que no encuentra la imagen. Quizá mirar la página de DockerHub de la imagen te pueda ayudar... https://hub.docker.com/r/lemoncodersbc/go-hello-world
6+
7+
## 1.2 Réplicas
8+
9+
Recuerdas como crear réplicas de un pod? No te basta solo con el pod... Prueba a crear un `ReplicaSet` o mejor aún un `Deployment` en su lugar!
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Ejercicio 1: El pod que no arranca
2+
3+
Parece que el equipo de backend tiene un problema con un pod: El contenedor no arranca. Puedes ayudarles y mirar lo que ocurre?
4+
5+
## 1.1 Que arranque el pod
6+
7+
Tu objetivo es recrear el pod y que arranque
8+
9+
## 1.2 Réplicas
10+
11+
Una vez el pod ha arrancado, como podríamos hacerlo para tener 3 réplicas de él en todo momento?
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
name: ejercicio
5+
labels:
6+
name: ejercicio
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: backend
5+
labels:
6+
app: backend
7+
created-by: backend-team
8+
namespace: ejercicio
9+
spec:
10+
selector:
11+
matchLabels:
12+
app: backend
13+
created-by: backend-team
14+
template:
15+
metadata:
16+
labels:
17+
app: backend
18+
created-by: backend-team
19+
spec:
20+
containers:
21+
- name: main
22+
image: lemoncodersbc/go-hello-world
23+
ports:
24+
- containerPort: 80
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: backend
5+
namespace: ejercicio
6+
spec:
7+
selector:
8+
app: back
9+
ports:
10+
- port: 80
11+
targetPort: 8080
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Pistas del ejercicio 2
2+
3+
# 2.1 Haz los pods accesibles
4+
5+
- ¿Cuales son los endpoints del servicio?
6+
- No todos los problemas son siempre el selector...
7+
8+
- Para lanzar el pod de busybox el comando ideal es: `kubectl run -it bb --image busybox --rm --restart Never -- /bin/sh`
9+
10+
# 2.2 Ofrece acceso desde el exterior
11+
12+
Aunque podrías usar serviciod `NodePort` o `LoadBalancer`, en general para exponer servicios HTTP/HTTPS existe una opción mejor: ingress
13+
14+
- Recuerda habilitar el controlador de ingress de minikube: `minikube addons enable ingress`
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Ejercicio 2: No puedo acceder!
2+
3+
El equipo de backend ha desplegado su pod replicado, pero parece que otros equipos se quejan que el pod no responde.
4+
5+
El equipo de backend afirma que su servicio debería responder en http://backend pero parece ser que no es así
6+
7+
¿Qué está ocurriendo?
8+
9+
## 2.1 Haz los pods accesibles
10+
11+
Asegúrate que se puede acceder al pod desde dentro del clúster. Para probarlo crea un pod de busybox y enlázate a él para desde el shell de busybox ejecutar un `wget -qO- http://backend` y obtener la respuesta.
12+
13+
# 2.2 Ofrece acceso desde el exterior
14+
15+
El equipo de frontend al final decide hacer una SPA, lo que implica que las llamadas al backend las realizará un navegdor. Por ello no basta que el backend sea accesible, debe serlo desde fuera del cluster. ¿Como harías el backend accesible desde un DNS?
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Ejercicios de Kubernetes
2+
3+
Venga! Os propongo algunos ejercicios de Kuberentes para ir "engrasando la máquina :D". Para hacerlo divertido serán ejercicios prácticos.
4+
5+
Cada carpeta tiene:
6+
7+
- Un `readme.md` que describe el escenario
8+
- Unos yamls que crean el escenario
9+
10+
La forma de proceder es sencilla:
11+
12+
- Con el terminal os colocáis en la carpeta del ejercicio a realizar (`cd <carpeta-ejercicio>`)
13+
- Creais el escenario: `kubectl apply -f .`
14+
- Leeis el fichero `readme.md` e intentais resolver el escenario.
15+
- Una vez resuelto elimináis el escenario (`kubectl delete ns ejercicio`)
16+
17+
** Todos los ejercicios se ejecutan en el espacio de nombres `ejercicio`.** Por lo tanto...
18+
19+
- Acuérdate de añadir `-n ejercicio` en todos tus comandos de `kubectl` o bien...
20+
- Cambia tu contexto para acceder al namespace `ejercicio` de forma automática: `kubectl config set-context --current --namespace ejercicio`
21+
- Elimina el namespace ejercicio al finalizar, para dejar todo limpio (`kubectl delete ns ejercicio`)
22+
23+
## Si necesitáis alguna ayuda podéis...
24+
25+
- Mirar los ficheros YAML del ejercicio por si os dan una pista. **Aunque es posible resolverlo todo sin mirar los YAML**
26+
- Mirar el fichero `pistas.md` de cada ejercicio.
27+
- **Dejar un mensaje en Slack :)**
28+
29+
Y, para terminar, algunas pistas generales:
30+
31+
- Recordad que podéis obtener el YAML de un comando imperativo mediante los modificadores `--dry-run -o yaml` en kubectl (p. ej. `kubectl run bb --image busybox --dry-run -o yaml > pod_bb.yaml`)
32+
- Recordad que podéis obtener el YAML de un objeto existente mediante el comando `kubectl get <tipo> <nombre> -o yaml` (p. ej. `kubectl get pod my-pod -o yaml > my_pod.yaml`). En este caso el YAML obtenido tiene más campos que los que usaríamos nosotros al crearlo ya que es la descripción entera que tiene el cluster (incluyendo valores por defecto y campos de solo lectura como `status`).
33+
34+
**Cualquier duda la podéis comentar en Slack!!!**
35+

0 commit comments

Comments
 (0)