Examen 4: Implementación de sitios web en Kubernetes#
Objetivos#
- Crear imagenes de contenedores con Docker
- Instalar un cluster de Kubernetes
- Instalar un ingress controller en el cluster de Kubernetes
- Despliegue de sitios web en Kubernetes
- Configuración del certificado SSL en el ingress controller
Elementos de apoyo#
-
Docker
-
Kubernetes
-
KBE: Kubernetes by Example
- KBE: Container Fundamentals - Introduction to Containers 📝
- Introduction, Overview, Images, Registries, Hosts y Orchestration
- KBE: Container Fundamentals - Container images 📝
- Introduction, Layers & Repositories, URLs e Internals
- KBE: Container Fundamentals - Standards 📝
- Introduction, OCI Specifications, Image Specification y Runtime Specification
- KBE: Kubernetes Fundamentals 📝
kubectl
, Pods, ReplicaSets, Deployments, Labels y Services- Environment Variables, ConfigMaps, Secrets y Volumes
- Logs, Images, Resources, Requests y Limits
- Rolling Updates, Liveness Probes y Readiness Probes
- Taints, Affinity, Jobs, StatefulSets y DaemonSets
- KBE: Container Fundamentals - Introduction to Containers 📝
Restricciones#
Danger
- La evaluación de esta actividad corresponderá al cuarto examen parcial del curso
Warning
- Esta actividad depende de los recursos implementados en la práctica 8 y práctica 9
- Se recomienda que se realicen las actividades previas siguiendo la calendarización con el objeto de dejar suficiente tiempo para la elaboración de este proyecto
- La fecha límite de entrega es el domingo 18 de diciembre de 2022 a las 23:59 horas
¹
- Esta actividad debe ser entregada en equipo de acuerdo al flujo de trabajo para la entrega de tareas y prácticas
- Utilizar la carpeta
docs/proyectos/proyecto-kubernetes/Equipo-ABCD-EFGH-IJKL-MNOP
para entregar la práctica - Donde
Equipo-ABCD-EFGH-IJKL-MNOP
representa el nombre del equipo que debió anotarse previamente en la lista del grupo - Hacer un merge request a la rama
proyecto-kubernetes
del repositorio de tareas para entregar la actividad
- Utilizar la carpeta
Note
¹
: Se ajustó la fecha de entrega para dar un fin de semana adicional.
Procedimiento#
Note
- Revisa la fecha de caducidad de tu cuenta Azure for Students Starter o Azure Free Trial
- Si la cuenta caduca pronto tienes un par de opciones:
Warning
- RECOMENDADO: Crear otra infraestructura para entregar este proyecto:
- Que otro integrante del equipo haga una NUEVA cuenta Azure for Students, Azure for Students Starter o Azure Free Trial
- También deben que tramitar un NUEVO nombre de dominio para entregar el proyecto de Kubernetes en otra infraestructura.
- Anotar los datos de la nueva infraestructura en el formulario de recursos en la nube
Danger
- NO RECOMENDADO: Actualizar tu cuenta de Azure a Pay as You Go
- Necesita que se intriduzcan los datos de una tarjeta de crédito para hacer el cobro por los recursos que se utilizan. Aplican tarifas publicadas por Azure y los elementos denominados free forever (consultar la documentación de Azure para actualizar una subscripción o cambiar la modalidad de la cuenta)
Entregables#
-
Archivo
README.md
- Explicación del proceso de creación de las imagenes de contenedor
- Explicación del proceso de instalación de
k3s
en Debian 11 - Explicación del proceso de instalación del ingress controller en el cluster
- Explicación del proceso de despliegue de los sitios web en el cluster de Kubernetes
- Explicación de la configuración de SSL/TLS en el ingress controller
-
Carpeta
img
- Cada captura de pantalla tiene que ser referenciada en el archivo
README.md
- Capturas de pantalla donde se muestre la instalación de Docker Desktop
- Capturas de pantalla de los sitios web hospedados utilizando HTTP y HTTPS
- Cada captura de pantalla tiene que ser referenciada en el archivo
-
Carpeta
files
-
Cada archivo tiene que ser referenciado en el archivo
README.md
-
Archivos de configuración
- Incluir en un archivo
tar.gz
el contenido del directorio/etc/letsencrypt
- Incluir en un archivo
tar.gz
el contenido del directorio/etc/rancher
- Incluir en un archivo
-
Archivos de bitácora
- Preparación de la máqina virtual de Azure (reducción de uso de CPU y RAM)
- Instalación de
k3s
en Debian 11 - Instalación de
kubectl
ykrew
en el equipo local - Instalación de
krew
en el equipo remoto - Bitácora de conexión a los puertos
80
y443
del cluster de Kubernetes - Bitácora de conexión al puerto 443 utilizando
openssl s_client
- Bitácora de comprobación de la validez del certificado SSL emitido por Let's Encrypt
- Bitácira de conexión a los sitios web hospedados utilizando HTTP y HTTPS
-
Archivos de datos
- Archivos
Dockerfile
para los contenedoreslinux-doc
ytareas-redes
- Incluir en un archivo
tar.gz
el contenido del directorio/var/www/html
de la máquina virual de Azure - Archivo
cert.txt
que es la representación en texto del certificado SSL emitido por Let's Encrypt
- Archivos
-
Recursos de Kubernetes
- Exporta los recursos del cluster de Kubernetes utilizando
kubectl
- Quita los campos innecesarios utilizando el siguiente comando
kubectl neat < archivo.yaml > archivo.neat.yaml
- Anexa el archivo original (
archivo.yaml
) y el archivo sin campos extra (archivo.neat.yaml
) a tu reporte - Repite para todos los recursos de Kubernetes solicitados
- Explica cuales campos no necesarios se quitan en los recursos de tipo
deployment
,configmap
,secret
eingress
- Puedes utilizar el comando
diff -u archivo.yaml archivo.neat.yaml
para ver las diferencias
- Puedes utilizar el comando
- Exporta los recursos del cluster de Kubernetes utilizando
-
usuario@laptop ~ % kubectl get all --all-namespaces > recursos-kubernetes.log
usuario@laptop ~ % kubectl get all --all-namespaces -o yaml > recursos-kubernetes.yaml
usuario@laptop ~ % kubectl get nodes -o yaml
usuario@laptop ~ % kubectl get configmap index-equipo-aaaa-bbbb-cccc-dddd -n default -o yaml
usuario@laptop ~ % kubectl get deployment/root-nginx -n default -o yaml
usuario@laptop ~ % kubectl get deployment/linux-doc -n default -o yaml
usuario@laptop ~ % kubectl get deployment/tareas-redes -n default -o yaml
usuario@laptop ~ % kubectl get secret/nginx-ingress-tls -n default -o yaml
usuario@laptop ~ % kubectl get ingress ingress-nginx -n default -o yaml
usuario@laptop ~ % kubectl get deployment/ingress-nginx-controller -n ingress-nginx -o yaml
⇦ | ⇧ | ⇨ |
---|---|---|
Página anterior | Arriba | Página siguiente |