¿Qué vamos a ver?
Basado en la documentación oficial de K8s (licencia CC-BY-4.0).
>_.source <(kubectl completion bash)
Comprueba que funciona escribiendo kubectl y presionando la tecla "TAB" 2 veces.Crea un namespace para aislar los recursos de este ejercicio del resto de recursos en tu clúster:
kubectl create namespace lab-guestbook
Vamos a desplegar un clúster de Redis con un despliegue para el máster y otro para los trabajadores.
deployments/demo-guestbook-redis-master.yaml con el siguiente manifiesto:apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-redis-master
labels:
app: redis
spec:
selector:
matchLabels:
app: redis
role: master
tier: backend
replicas: 1
template:
metadata:
labels:
app: redis
role: master
tier: backend
spec:
containers:
- name: master
image: k8s.gcr.io/redis:e2e
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 6379
kubectl apply -f deployments/demo-guestbook-redis-master.yaml -n lab-guestbook
[NOMBRE_POD]:kubectl get pods -n lab-guestbook
kubectl logs -f [NOMBRE_POD] -n lab-guestbook
kubectl describe deployment demo-redis-master -n lab-guestbook
services/demo-guestbook-redis-master.yaml con el siguiente manifiesto:apiVersion: v1
kind: Service
metadata:
name: demo-redis-master
labels:
app: redis
role: master
tier: backend
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
role: master
tier: backend
kubectl apply -f services/demo-guestbook-redis-master.yaml -n lab-guestbook
kubectl get services -n lab-guestbook
kubectl describe services demo-redis-master -n lab-guestbook
deployments/demo-guestbook-redis-slaves.yaml con el siguiente manifiesto:apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-redis-slaves
labels:
app: redis
spec:
selector:
matchLabels:
app: redis
role: slave
tier: backend
replicas: 2
template:
metadata:
labels:
app: redis
role: slave
tier: backend
spec:
containers:
- name: slave
image: gcr.io/google_samples/gb-redisslave:v3
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 6379
kubectl apply -f deployments/demo-guestbook-redis-slaves.yaml -n lab-guestbook
kubectl get pods -n lab-guestbook
Verás las 2 réplicas de los trabajadores y 1 réplica del máster de Redis.kubectl describe deployment demo-redis-slaves -n lab-guestbook
services/demo-guestbook-redis-slaves.yaml con el siguiente manifiesto:apiVersion: v1
kind: Service
metadata:
name: demo-redis-slaves
labels:
app: redis
role: slave
tier: backend
spec:
ports:
- port: 6379
selector:
app: redis
role: slave
tier: backend
kubectl apply -f services/demo-guestbook-redis-slaves.yaml -n lab-guestbook
kubectl get services -n lab-guestbook
Verás el Servicio del máster y los trabajadores de Redis.kubectl describe services demo-redis-slaves -n lab-guestbook
El frontend de la aplicación del libro de visitras está escrito en PHP y está configurado para usar el máster de Redis para escribir datos y los trabajadores de Redis para las lecturas.
deployments/demo-guestbook-frontend.yaml con el siguiente manifiesto:apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-frontend
labels:
app: guestbook
spec:
selector:
matchLabels:
app: guestbook
tier: frontend
replicas: 3
template:
metadata:
labels:
app: guestbook
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google-samples/gb-frontend:v4
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 80
kubectl apply -f deployments/demo-guestbook-frontend.yaml -n lab-guestbook
kubectl get pods -n lab-guestbook
Verás las 2 réplicas de los trabajadores y 1 réplica del máster de Redis.kubectl describe deployment demo-frontend -n lab-guestbook
services/demo-guestbook-frontend.yaml con el siguiente manifiesto:apiVersion: v1
kind: Service
metadata:
name: demo-frontend
labels:
app: guestbook
tier: frontend
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: guestbook
tier: frontend
kubectl apply -f services/demo-guestbook-frontend.yaml -n lab-guestbook
[IP_EXTERNA] (puede tardar hasta 5 minutos):kubectl get services -n lab-guestbook -w
Verás el Servicio del máster y los trabajadores de Redis, junto al del frontend.kubectl describe services demo-frontend -n lab-guestbook
curl:https://[IP_EXTERNA]
Escalar el nº de réplicas del frontend es fácil, puesto que la aplicación se define como un único punto de entrada, el Servicio, que redirige las peticiones a diferentes réplicas del frontend.
kubectl scale deployment frontend --replicas 5 -n lab-guestbook
kubectl get pods -n lab-guestbook -l app=guestbook
kubectl scale deployment frontend --replicas 3 -n lab-guestbook
kubectl get pods -n lab-guestbook -l app=guestbook
Elimina el namespace, lo cual eliminará todos los recursos:
kubectl delete namespace lab-guestbook
En esta práctica hemos visto cómo: