Has llegado al final del recorrido técnico. Durante once módulos has construido, roto, arreglado, asegurado y escalado la plataforma Rutas Norte: desde el primer Pod suelto hasta un clúster de producción con Ingress, TLS, políticas de red, almacenamiento persistente, observabilidad completa y despliegues canario gobernados por GitOps. Ese conocimiento es exactamente el que mide la certificación CKA (Certified Kubernetes Administrator). Lo único que te separa del certificado es el formato: un examen práctico, en un terminal, contrarreloj, con un cronómetro que no perdona la duda.
Esta lección convierte el curso que acabas de hacer en un plan de estudio para el CKA. Vas a ver qué certifica exactamente, cómo es el examen por dentro, qué dominios entran y con qué peso, y —lo más importante— una tabla que mapea cada objetivo oficial del temario con la lección de este curso donde lo estudiaste. A partir de ahí tendrás un plan de seis semanas y una batería de ocho tareas tipo examen resueltas con el comando exacto y su tiempo objetivo.
Aviso imprescindible. Los datos concretos del examen (precio, duración exacta, número de intentos incluidos, porcentaje de aprobado y reparto de los dominios) cambian con el tiempo. Todo lo que leas aquí es orientativo y corresponde al momento de escribir esta lección. Antes de matricularte, consulta siempre el temario oficial vigente en la web de la Linux Foundation / CNCF (
training.linuxfoundation.orgycncf.io/certification/cka). El programa de certificación revisa los objetivos con cada versión de Kubernetes.
Contenido
- Qué certifica el CKA y a quién va dirigido
- El formato del examen por dentro
- Los dominios del temario y su peso orientativo
- Mapa completo: cada objetivo del CKA y su lección en este curso
- Habilidades específicas del CKA que conviene practicar aparte
- Plan de estudio de seis semanas
- Recursos oficiales y el simulador de prácticas
- Ocho tareas tipo CKA resueltas contrarreloj
- Qué certifica el CKA y a quién va dirigido
El CKA certifica que sabes administrar y operar un clúster de Kubernetes. No es una certificación sobre teoría de contenedores ni sobre desarrollo de aplicaciones: es la certificación del perfil que mantiene el clúster vivo.
1.1 El perfil que mide
La persona con CKA es la que, en una organización como Rutas Norte, se encarga de:
| Responsabilidad | Ejemplo en Rutas Norte |
|---|---|
| Instalar y mantener el clúster | Montar el clúster con kubeadm, unir nodos nuevos, actualizar de 1.30 a 1.31 |
| Gestionar el plano de control | Diagnosticar un kube-apiserver que no arranca, hacer copia de etcd |
| Operar nodos | Drenar nodo-3 para cambiar el disco, gestionar taints y cordones |
| Configurar el acceso | Crear el Role que permite al equipo de soporte leer logs en rutas-norte-pro |
| Dar servicio de red y almacenamiento | Publicar tienda-web con Ingress, aprovisionar el PVC de postgres-reservas |
| Resolver problemas | El worker-notificaciones está en CrashLoopBackOff y hay que averiguar por qué |
1.2 Su lugar entre las tres certificaciones
- CKA: administrar el clúster. Nodos, plano de control, etcd, RBAC, red, almacenamiento y diagnóstico.
- CKAD: desarrollar sobre el clúster; manifiestos de aplicación y velocidad con
kubectl(lección12-02). - CKS: asegurar el clúster; endurecimiento, políticas y detección (lección
12-03). Exige CKA vigente.
El CKA es el punto de entrada natural si tu trabajo es de plataforma, SRE o infraestructura.
1.3 Requisitos previos y qué NO entra
No hay requisitos formales: cualquiera puede matricularse. Los requisitos reales son prácticos: manejo cómodo de la línea de comandos de Linux (systemctl, journalctl, permisos de fichero, vim), comprensión de contenedores, y haber tocado un clúster de verdad —el kilometraje que te ha dado este curso.
Y conviene saber qué no cae. No hay preguntas tipo test: todo es práctico. No entran Helm, Kustomize ni Argo CD en profundidad, ni los proveedores gestionados (EKS/AKS/GKE), ni Prometheus o Grafana como productos —sí kubectl top y el metrics-server—, ni desarrollo de aplicaciones. El examen se centra en Kubernetes puro.
- El formato del examen por dentro
Este es el apartado que más gente subestima. Conocer Kubernetes y aprobar el CKA son cosas distintas, y la diferencia está aquí.
2.1 Características del examen
| Aspecto | Descripción orientativa |
|---|---|
| Tipo | 100 % práctico, sin preguntas teóricas |
| Entorno | Terminal en el navegador, supervisado remotamente |
| Duración | En torno a dos horas |
| Número de tareas | Aproximadamente entre 15 y 20 |
| Puntuación de aprobado | Aproximadamente un 66 % |
| Intentos | La matrícula suele incluir un segundo intento gratuito |
| Validez | En torno a dos años (ver lección 12-04) |
| Documentación permitida | Sí, la documentación oficial y solo esa |
Repito: todos estos números son orientativos. Verifica el temario y las condiciones vigentes en la web oficial antes de pagar la matrícula.
2.2 Varios clústeres y el cambio de contexto
Esta es la trampa número uno del examen y la que más puntos regala a los descuidados.
El examen no te da un clúster: te da varios, cada uno con un nombre de contexto distinto. Cada tarea empieza indicándote en qué contexto debes trabajar, con un comando que puedes copiar y pegar:
Si resuelves la tarea perfectamente en el clúster equivocado, la puntuación es cero. No hay puntuación parcial por buena intención.
Comandos que debes tener automatizados en el dedo:
# Ver todos los contextos disponibles
kubectl config get-contexts
# Ver en cuál estoy AHORA
kubectl config current-context
# Cambiar de contexto
kubectl config use-context <nombre>
# Fijar un namespace por defecto en el contexto actual
kubectl config set-context --current --namespace=rutas-norte-proHábito obligatorio: el primer comando de cada tarea es el use-context que te dan. Sin excepciones, ni siquiera cuando "es el mismo de antes".
2.3 Puntuación por tarea y puntuaciones parciales
Cada tarea tiene un peso en puntos que se muestra en el enunciado (por ejemplo, "Task weight: 7 %"). La suma de todas da 100.
Lo relevante:
- Existen puntuaciones parciales. Si una tarea pide crear un Deployment con 3 réplicas, exponerlo con un Service y añadirle una sonda, y solo haces las dos primeras cosas, te llevas parte de los puntos. Nunca dejes una tarea en blanco.
- La corrección es automática y por estado final del clúster. Nadie mira cómo lo hiciste. Si el objeto existe con la configuración pedida, puntúa; da igual si lo creaste con
kubectl create, con un YAML o editando a mano. - Eso significa que la vía imperativa es tan válida como la declarativa, y mucho más rápida.
2.4 La documentación permitida: el arma decisiva
Durante el examen puedes abrir una pestaña adicional del navegador para consultar:
https://kubernetes.io/docs/(incluida la referencia de la API y el blog)- La documentación de los subproyectos oficiales que se enlazan desde ahí (por ejemplo
kubernetes.io/docs/reference/kubectl/)
No puedes usar buscadores generales, foros, notas propias, otras webs ni herramientas de IA. Está supervisado.
Esto cambia por completo la estrategia de estudio: no necesitas memorizar YAML. Necesitas saber dónde está cada ejemplo y adaptarlo en segundos. Un manifiesto de PersistentVolume, una NetworkPolicy o un Ingress con TLS son largos de escribir y fáciles de copiar.
Páginas que conviene tener localizadas mentalmente (se detalla más en la lección 12-04):
| Necesito... | Buscar en kubernetes.io |
|---|---|
| Manifiesto de PV / PVC | "persistent volumes" |
| NetworkPolicy de ejemplo | "network policies" |
| Ingress con reglas de ruta | "ingress" |
| Backup de etcd | "operating etcd clusters for kubernetes" |
| Actualizar el clúster | "upgrading kubeadm clusters" |
| RBAC (Role/RoleBinding) | "using rbac authorization" |
| Static pods | "static pods" |
| Sondas | "configure liveness readiness startup probes" |
2.5 El entorno de trabajo
- El terminal es un navegador. Copiar y pegar funciona, pero con atajos particulares (habitualmente
Ctrl+Shift+C/Ctrl+Shift+Ven Linux). Practícalo. - El editor disponible es
vim(ynano). Si no manejasvimcon soltura mínima, dedícale un par de horas antes del examen. - Tienes acceso
sudoa los nodos víasshcuando la tarea lo requiere (por ejemplo, para arreglar el kubelet). - Hay un bloc de notas en la interfaz del examen para apuntar cosas; úsalo para llevar la lista de tareas pendientes.
- Los dominios del temario y su peso orientativo
El temario oficial del CKA se organiza en cinco dominios. Este es el reparto publicado en el momento de escribir esta lección; verifícalo en la web oficial, porque el programa se revisa periódicamente.
| Dominio | Peso orientativo | De qué va |
|---|---|---|
| Arquitectura, instalación y configuración del clúster | ~25 % | Montar el clúster, RBAC, actualizarlo, etcd, alta disponibilidad, gestores de paquetes de Helm/Kustomize a nivel básico |
| Carga de trabajo y planificación | ~15 % | Deployments, escalado, rollouts, ConfigMaps y Secrets, planificación de pods, autoescalado |
| Servicios y redes | ~20 % | Services, DNS, Ingress, CNI, NetworkPolicies |
| Almacenamiento | ~10 % | StorageClasses, PV, PVC, modos de acceso, volúmenes en pods |
| Resolución de problemas | ~30 % | Diagnóstico de aplicaciones, del clúster, de nodos, de red, logs y monitorización |
Fíjate bien en el reparto: resolución de problemas es el dominio más pesado, casi un tercio del examen. No es un tema que se estudie leyendo: se entrena rompiendo cosas y arreglándolas. Es exactamente lo que hiciste en el módulo 7 (07-06) y en el módulo 11 (11-06).
3.1 Cómo se traduce el peso en tiempo
Con dos horas y ~17 tareas, la media es de unos 7 minutos por tarea, pero el reparto real es muy desigual:
Tareas de 2-4 % → objetivo 3-4 minutos (crear un Secret, escalar un Deployment)
Tareas de 5-7 % → objetivo 6-8 minutos (Ingress con TLS, NetworkPolicy, PV+PVC+Pod)
Tareas de 8-10 % → objetivo 10-12 minutos (backup/restore de etcd, upgrade de nodo,
plano de control roto)Deja 10 minutos finales sin asignar para revisar. Es el mejor uso posible de esos minutos.
- Mapa completo: cada objetivo del CKA y su lección en este curso
Esta es la sección que convierte el curso en un plan de estudio. Cada objetivo del temario está enlazado con la lección donde lo trabajaste. Repasar el CKA es, literalmente, releer estas lecciones y volver a hacer sus ejercicios en un clúster real.
4.1 Arquitectura, instalación y configuración del clúster (~25 %)
| Objetivo oficial | Lección del curso |
|---|---|
| Gestionar el control de acceso basado en roles (RBAC) | 08-01-control-de-acceso-basado-en-roles |
| Preparar la infraestructura para instalar un clúster | 10-02-kubeadm, 01-04-configuracion-de-un-cluster-kubernetes |
| Crear y gestionar clústeres con kubeadm | 10-02-kubeadm |
| Gestionar el ciclo de vida del clúster (actualizaciones) | 10-02-kubeadm |
| Implementar y configurar una infraestructura de alta disponibilidad | 10-02-kubeadm, 09-05-alta-disponibilidad-y-pdb |
| Usar Helm y Kustomize para instalar componentes | 10-03-helm, 10-04-kustomize |
| Comprender la interfaz de extensión (CNI, CSI, CRI, ...) | 04-01-redes-de-cluster, 05-04-clases-de-almacenamiento, 01-02-arquitectura-de-kubernetes |
| CRDs, operadores y componentes de la API agregada | 06-06-definiciones-de-recursos-personalizados, 06-07-operadores-y-el-patron-controlador |
| ServiceAccounts y acceso a la API | 03-06-serviceaccounts-y-acceso-a-la-api |
4.2 Carga de trabajo y planificación (~15 %)
| Objetivo oficial | Lección del curso |
|---|---|
| Comprender los despliegues y realizar rollouts y rollbacks | 02-03-deployments, 02-04-actualizaciones-rollbacks-y-estrategias |
| Usar ConfigMaps y Secrets para configurar aplicaciones | 03-01-configmaps, 03-02-secrets, 03-03-variables-de-entorno |
| Configurar escalado de aplicaciones | 09-01-autoescalado-horizontal-de-pods, 02-03-deployments |
| Comprender las primitivas para crear cargas robustas | 02-01-pods, 02-02-replicasets, 06-01-statefulsets, 06-02-daemonsets |
| Configurar Pods y contenedores: recursos y límites | 03-04-cuotas-y-limites-de-recursos, 03-05-limitranges-y-clases-de-qos |
| Planificación: afinidad, taints, tolerations, nodeSelector | 06-05-planificacion-afinidad-taints-y-tolerations |
| Jobs y CronJobs | 06-03-trabajos-y-cronjobs |
| Etiquetas y selectores | 02-07-etiquetas-selectores-y-anotaciones |
4.3 Servicios y redes (~20 %)
| Objetivo oficial | Lección del curso |
|---|---|
| Comprender la conectividad entre pods | 04-01-redes-de-cluster |
| Tipos de Service y endpoints | 04-02-tipos-de-servicios |
| Usar el DNS del clúster | 04-03-dns-interno-y-descubrimiento-de-servicios |
| Configurar y usar Ingress y IngressClass | 04-04-controladores-de-ingress |
| Configurar TLS en Ingress | 04-05-tls-y-certificados-con-cert-manager |
| Usar NetworkPolicies | 04-06-politicas-de-red, 08-04-seguridad-de-red |
| Elegir e instalar un plugin CNI | 04-01-redes-de-cluster |
| Gateway API (conocimiento básico) | 04-04-controladores-de-ingress |
4.4 Almacenamiento (~10 %)
| Objetivo oficial | Lección del curso |
|---|---|
| Implementar StorageClasses y aprovisionamiento dinámico | 05-04-clases-de-almacenamiento, 05-05-aprovisionamiento-dinamico-expansion-y-snapshots |
| Configurar volúmenes: tipos, modos de acceso, reclaim policy | 05-01-volumenes, 05-02-volumenes-persistentes |
| Gestionar PersistentVolumeClaims | 05-03-reclamaciones-de-volumenes-persistentes |
| Usar almacenamiento en cargas de trabajo | 05-01-volumenes, 06-01-statefulsets |
| Copias de seguridad y restauración | 05-06-copias-de-seguridad-y-restauracion |
4.5 Resolución de problemas (~30 %)
| Objetivo oficial | Lección del curso |
|---|---|
| Depurar aplicaciones (pods, contenedores, eventos) | 07-06-depuracion-y-eventos-del-cluster |
| Monitorizar aplicaciones y componentes del clúster | 07-02-servidor-de-metricas-y-kubectl-top, 07-03-monitoreo-con-prometheus |
| Gestionar logs de contenedores | 07-05-registro-centralizado-con-efk, 07-06-depuracion-y-eventos-del-cluster |
| Diagnosticar fallos del clúster y de los nodos | 07-06-depuracion-y-eventos-del-cluster, 11-06-operacion-en-produccion |
| Resolver problemas de red y de servicios | 04-03-dns-interno-y-descubrimiento-de-servicios, 04-06-politicas-de-red |
| Verificaciones de salud y sondas | 07-01-verificaciones-de-salud-y-sondas |
| Incidencias y runbooks | 11-06-operacion-en-produccion |
- Habilidades específicas del CKA que conviene practicar aparte
El curso te ha dado el conocimiento, pero hay siete procedimientos que en el examen aparecen casi con seguridad y que hay que tener memorizados como una coreografía. Repásalos hasta que salgan sin pensar.
5.1 Montar un clúster con kubeadm y unir nodos
En el nodo de control:
# Inicializar el plano de control
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# Configurar kubectl para el usuario actual
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# Instalar el CNI (el manifiesto exacto lo da el enunciado)
kubectl apply -f https://raw.githubusercontent.com/.../calico.yamlEn el nodo trabajador:
Si el token caducó (dura 24 h), se regenera desde el nodo de control:
Comprobación: kubectl get nodes -o wide debe mostrar todos los nodos en Ready.
5.2 Actualizar la versión del clúster
Procedimiento canónico (siempre: plano de control primero, después los trabajadores, de uno en uno).
# --- En el nodo de control ---
# 1. Permitir la nueva versión en el repositorio (ajustar la minor en la URL del repo)
sudo apt-get update
sudo apt-cache madison kubeadm # ver versiones disponibles
# 2. Actualizar kubeadm
sudo apt-mark unhold kubeadm
sudo apt-get install -y kubeadm=1.31.1-1.1
sudo apt-mark hold kubeadm
# 3. Ver el plan y aplicar
sudo kubeadm upgrade plan
sudo kubeadm upgrade apply v1.31.1
# 4. Drenar el nodo, actualizar kubelet y kubectl, y devolverlo al servicio
kubectl drain nodo-control --ignore-daemonsets
sudo apt-mark unhold kubelet kubectl
sudo apt-get install -y kubelet=1.31.1-1.1 kubectl=1.31.1-1.1
sudo apt-mark hold kubelet kubectl
sudo systemctl daemon-reload
sudo systemctl restart kubelet
kubectl uncordon nodo-control# --- En cada nodo trabajador ---
sudo apt-get install -y kubeadm=1.31.1-1.1
sudo kubeadm upgrade node # ¡ojo: "node", no "apply"!
kubectl drain nodo-1 --ignore-daemonsets
sudo apt-get install -y kubelet=1.31.1-1.1 kubectl=1.31.1-1.1
sudo systemctl daemon-reload && sudo systemctl restart kubelet
kubectl uncordon nodo-1Trampas clásicas: olvidar --ignore-daemonsets en el drain (falla siempre, porque hay DaemonSets del CNI y de kube-proxy); usar upgrade apply en un trabajador; olvidar el uncordon final.
5.3 Copia y restauración de etcd
Es la tarea que más puntos vale y la que más gente falla. Memorízala.
Copia de seguridad:
ETCDCTL_API=3 etcdctl snapshot save /opt/backup-etcd.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.keyVerificar la copia:
Restauración:
# 1. Restaurar en un directorio NUEVO
sudo ETCDCTL_API=3 etcdctl snapshot restore /opt/backup-etcd.db \
--data-dir=/var/lib/etcd-restaurado
# 2. Apuntar el pod estático de etcd al nuevo directorio
sudo vim /etc/kubernetes/manifests/etcd.yaml
# En volumes: cambiar hostPath.path de /var/lib/etcd a /var/lib/etcd-restaurado
# 3. El kubelet recrea el pod solo. Esperar y comprobar.
sudo systemctl restart kubelet
kubectl get pods -n kube-systemClaves que se olvidan:
- Los certificados de
etcdestán en/etc/kubernetes/pki/etcd/, no en/etc/kubernetes/pki/. - Si el enunciado te da rutas de certificados distintas, usa las suyas.
- Hay que restaurar a un directorio nuevo, no sobre el existente.
- Lo que se modifica es el volumen
hostPath, no solo el argumento--data-dirdel contenedor. Cambia ambos si el manifiesto los tiene desalineados.
5.4 Gestión de certificados
sudo kubeadm certs check-expiration # caducidad de todos los certificados
sudo kubeadm certs renew all # renovar todos
sudo kubeadm certs renew apiserver # renovar solo unoTras renovar hay que reiniciar los pods estáticos del plano de control —moviendo temporalmente los manifiestos fuera de /etc/kubernetes/manifests/ o reiniciando el kubelet— y regenerar ~/.kube/config si ha cambiado el certificado de administración.
También puede pedirse aprobar una CSR para un usuario nuevo:
kubectl get csr
kubectl certificate approve soporte-rutas-norte
kubectl get csr soporte-rutas-norte -o jsonpath='{.status.certificate}' | base64 -d > soporte.crtEl manifiesto de la CertificateSigningRequest (grupo certificates.k8s.io/v1, con el campo request en base64, signerName: kubernetes.io/kube-apiserver-client y usages: ["client auth"]) se copia de la documentación buscando "certificate signing requests": es más rápido y más seguro que escribirlo.
5.5 Drenaje y mantenimiento de nodos
# Marcar como no planificable (los pods existentes siguen)
kubectl cordon nodo-2
# Vaciar el nodo (los DaemonSets no se pueden desalojar: hay que ignorarlos)
kubectl drain nodo-2 --ignore-daemonsets --delete-emptydir-data
# Devolverlo al servicio
kubectl uncordon nodo-2| Flag | Cuándo se necesita |
|---|---|
--ignore-daemonsets |
Casi siempre: hay DaemonSets de red y de logs |
--delete-emptydir-data |
Si algún pod usa emptyDir (por ejemplo el sidecar de logs) |
--force |
Si hay pods "huérfanos" sin controlador (un Pod suelto) |
--grace-period=0 |
Solo si el enunciado pide inmediatez |
5.6 Diagnóstico de un plano de control roto
Este es el escenario estrella del dominio de resolución de problemas. La secuencia mental es siempre la misma:
# 1. ¿Responde la API?
kubectl get nodes
# Si da "connection refused" → el apiserver no está arriba.
# 2. ¿Está el kubelet vivo? (en el nodo de control, por ssh)
sudo systemctl status kubelet
sudo journalctl -u kubelet -n 50 --no-pager
# 3. ¿Qué contenedores del plano de control corren?
sudo crictl ps -a
sudo crictl logs <container-id>
# 4. ¿Están bien los manifiestos de los pods estáticos?
ls -l /etc/kubernetes/manifests/
sudo cat /etc/kubernetes/manifests/kube-apiserver.yamlCausas típicas que te van a poner, y su síntoma:
| Causa introducida | Síntoma | Arreglo |
|---|---|---|
Error de sintaxis en kube-apiserver.yaml |
La API no responde, crictl ps no muestra apiserver |
Corregir el YAML; el kubelet lo recrea solo |
| Ruta equivocada en un volumen del manifiesto | El contenedor arranca y muere | Corregir hostPath |
--etcd-servers con puerto malo |
apiserver en bucle, logs de conexión | Corregir el argumento |
staticPodPath cambiado en /var/lib/kubelet/config.yaml |
Ningún pod estático arranca | Restaurar staticPodPath: /etc/kubernetes/manifests y reiniciar kubelet |
| kubelet parado o deshabilitado | Nodo NotReady |
sudo systemctl enable --now kubelet |
Permisos incorrectos en /etc/kubernetes/pki/* |
apiserver no lee sus claves | chmod/chown correctos (claves 600, root:root) |
kubeconfig del kubelet apuntando mal |
Nodo NotReady, logs de autenticación |
Corregir /etc/kubernetes/kubelet.conf |
Regla de oro: los pods estáticos no se gestionan con kubectl. Se gestionan editando ficheros en /etc/kubernetes/manifests/, y el kubelet reacciona en segundos.
5.7 RBAC
Aparece en prácticamente todos los exámenes. Estos cuatro comandos resuelven el 90 % de los casos:
# Role limitado a un namespace
kubectl create role lector-reservas \
--verb=get,list,watch --resource=pods,pods/log \
-n rutas-norte-pro
# Vincularlo a una ServiceAccount
kubectl create rolebinding lector-reservas-binding \
--role=lector-reservas \
--serviceaccount=rutas-norte-pro:soporte \
-n rutas-norte-pro
# ClusterRole y ClusterRoleBinding (ámbito de clúster)
kubectl create clusterrole lector-nodos --verb=get,list --resource=nodes
kubectl create clusterrolebinding lector-nodos-binding \
--clusterrole=lector-nodos --serviceaccount=rutas-norte-pro:soporteY la comprobación que siempre hay que dejar hecha:
kubectl auth can-i list pods \
--as=system:serviceaccount:rutas-norte-pro:soporte \
-n rutas-norte-pro
# yes
- Plan de estudio de seis semanas
Este plan asume entre 8 y 10 horas semanales y que ya has hecho el curso. La regla que lo gobierna: por cada hora de lectura, dos horas de teclado.
| Semana | Foco | Lecciones a repasar | Objetivo medible al terminar |
|---|---|---|---|
| 1 | Fundamentos y velocidad con kubectl | 01-05, 01-06, 02-01 a 02-07 |
Crear un Deployment de 3 réplicas, exponerlo, escalarlo y verificarlo en menos de 2 minutos |
| 2 | Cargas de trabajo, configuración y planificación | 03-01 a 03-05, 06-01 a 06-03, 06-05, 09-01 |
Consumir un ConfigMap y un Secret de las cuatro formas posibles sin abrir la documentación |
| 3 | Redes | 04-01 a 04-06 |
Escribir de memoria una NetworkPolicy de denegación por defecto y un Ingress con TLS |
| 4 | Almacenamiento y administración del clúster | 05-01 a 05-06, 10-02, 08-01 |
Montar un clúster con kubeadm desde cero en dos VMs y actualizarlo una versión menor completa |
| 5 | etcd, certificados y resolución de problemas | 07-01, 07-02, 07-06 y los apartados 5.3 a 5.7 de esta lección |
Backup y restore de etcd sin documentación; arreglar los siete fallos de la tabla del apartado 5.6 |
| 6 | Simulacros | Lección 12-05 y el simulador oficial |
Dos simulacros completos cronometrados, corregidos, con repaso dirigido de los dominios flojos |
Cómo usarlo. La semana 6 no es para aprender nada nuevo: es para medir, corregir y descansar. Deja el último día para preparar el entorno físico del examen (ver 12-04) y no toques temas nuevos en las últimas 48 horas.
- Recursos oficiales y el simulador de prácticas
7.1 Los que importan
| Recurso | Para qué |
|---|---|
| Página oficial del CKA (Linux Foundation) | Temario vigente, precio, condiciones, política de reintentos |
Curriculum en el repositorio cncf/curriculum de GitHub |
El PDF con los objetivos exactos por dominio |
kubernetes.io/docs |
La única documentación permitida en el examen: familiarízate con su buscador |
| Handbook del candidato (Candidate Handbook) | Requisitos del entorno, identificación, normas de la supervisión |
| Simulador de prácticas incluido con la matrícula | Entorno prácticamente idéntico al examen |
7.2 El simulador incluido
La matrícula suele incluir acceso a un simulador de examen (habitualmente dos sesiones de unas 36 horas cada una, en un entorno equivalente al real). Consejos de uso:
- No lo gastes pronto. Úsalo cuando ya te sientas razonablemente preparado, en la semana 6.
- Su dificultad suele ser superior a la del examen real. Si sacas un 60 % ahí, vas bien.
- Lo valioso no es la nota, sino el solucionario: léelo entero, incluidas las tareas que acertaste, porque casi siempre hay una forma más rápida.
7.3 Entorno de práctica propio
No hace falta nada de pago. Con kind tienes un clúster de un nodo de control y dos trabajadores en menos de un minuto (repasa 10-01):
kind create cluster --name cka --config kind-cka.yaml # 1 control-plane + 2 workers
kubectl get nodesAhora bien, para practicar kubeadm, etcd y el plano de control roto necesitas máquinas de verdad (VMs con Multipass, Vagrant o similar): kind ejecuta el plano de control dentro de contenedores y no reproduce fielmente ni systemctl ni los pods estáticos del host.
- Ocho tareas tipo CKA resueltas contrarreloj
Practica estas ocho como si fueran el examen: cronómetro en marcha, solo kubernetes.io abierto. Los escenarios son de Rutas Norte.
Tarea 1 — Crear un Deployment y exponerlo (peso ~4 %, objetivo: 4 min)
Contexto:
kubectl config use-context rutas-norte-devEn el namespace
rutas-norte-dev, crea un Deployment llamadotienda-webcon la imagennginx:1.27-alpiney 3 réplicas. Expónlo con un ServiceClusterIPllamadotienda-web-svcen el puerto 80.
kubectl config use-context rutas-norte-dev
kubectl create deployment tienda-web \
--image=nginx:1.27-alpine --replicas=3 -n rutas-norte-dev
kubectl expose deployment tienda-web \
--name=tienda-web-svc --port=80 --target-port=80 -n rutas-norte-devComprobación:
NAME READY UP-TO-DATE AVAILABLE
deployment.apps/tienda-web 3/3 3 3
NAME TYPE CLUSTER-IP PORT(S)
service/tienda-web-svc ClusterIP 10.96.140.22 80/TCP
NAME ENDPOINTS
endpoints/tienda-web-svc 10.244.1.5:80,10.244.2.7:80,10.244.2.8:80La trampa: si endpoints sale vacío, el selector no casa. kubectl expose lo hereda bien; escribirlo a mano es donde se rompe.
Tarea 2 — Copia de seguridad y restauración de etcd (peso ~8 %, objetivo: 10 min)
Contexto:
kubectl config use-context rutas-norte-proHaz una copia de seguridad de etcd en
/opt/etcd-rutas-norte.db. Después, restaura la copia previa/opt/snapshot-anterior.dben el directorio/var/lib/etcd-restore. Los certificados están en/etc/kubernetes/pki/etcd/.
# Copia
sudo ETCDCTL_API=3 etcdctl snapshot save /opt/etcd-rutas-norte.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key
# Verificación de la copia
sudo ETCDCTL_API=3 etcdctl --write-out=table snapshot status /opt/etcd-rutas-norte.db
# Restauración
sudo ETCDCTL_API=3 etcdctl snapshot restore /opt/snapshot-anterior.db \
--data-dir=/var/lib/etcd-restore
# Reapuntar el pod estático
sudo vim /etc/kubernetes/manifests/etcd.yamlEn el manifiesto, el volumen queda así:
volumes:
- hostPath:
path: /var/lib/etcd-restore # antes: /var/lib/etcd
type: DirectoryOrCreate
name: etcd-dataComprobación:
La trampa: snapshot save no necesita sudo si tu usuario lee los certificados, pero restore escribe en /var/lib, así que sí. Y hay que cambiar el hostPath del volumen, no basta con el --data-dir del contenedor.
Tarea 3 — Drenar un nodo para mantenimiento (peso ~4 %, objetivo: 3 min)
Contexto:
kubectl config use-context rutas-norte-proEl nodo
nodo-2va a recibir mantenimiento. Vacíalo de cargas de trabajo sin eliminar los DaemonSets, y asegúrate de que no se planifiquen pods nuevos en él.
Comprobación:
NAME STATUS ROLES VERSION
nodo-1 Ready <none> v1.30.4
nodo-2 Ready,SchedulingDisabled <none> v1.30.4kubectl get pods -A -o wide --field-selector spec.nodeName=nodo-2
# Solo deben quedar pods de DaemonSets (CNI, kube-proxy)La trampa: drain ya hace cordon. Si falla por un pod suelto sin controlador, añade --force.
Tarea 4 — RBAC para el equipo de soporte (peso ~6 %, objetivo: 6 min)
Contexto:
kubectl config use-context rutas-norte-proCrea la ServiceAccount
soporteenrutas-norte-pro. Concédele permiso para ver pods y leer sus logs en ese namespace, y nada más. Verifica el resultado.
kubectl create serviceaccount soporte -n rutas-norte-pro
kubectl create role soporte-lectura \
--verb=get,list,watch \
--resource=pods,pods/log \
-n rutas-norte-pro
kubectl create rolebinding soporte-lectura-binding \
--role=soporte-lectura \
--serviceaccount=rutas-norte-pro:soporte \
-n rutas-norte-proComprobación:
kubectl auth can-i get pods --as=system:serviceaccount:rutas-norte-pro:soporte -n rutas-norte-pro
# yes
kubectl auth can-i delete pods --as=system:serviceaccount:rutas-norte-pro:soporte -n rutas-norte-pro
# no
kubectl auth can-i get pods --as=system:serviceaccount:rutas-norte-pro:soporte -n rutas-norte-dev
# noLa trampa: pods/log es un subrecurso independiente. Sin él, kubectl logs falla aunque puedas listar pods.
Tarea 5 — PV, PVC y Pod que lo usa (peso ~7 %, objetivo: 8 min)
Contexto:
kubectl config use-context rutas-norte-preCrea un PersistentVolume
pv-informesde 2Gi, modoReadWriteOnce,hostPathen/mnt/informes, constorageClassName: manual. Crea un PVCpvc-informesde 1Gi que lo consuma, y un Podinformes-ocupacioncon imagenbusybox:1.36que lo monte en/datosy ejecutesleep 3600.
# informes.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-informes
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
hostPath:
path: /mnt/informes
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-informes
namespace: rutas-norte-pre
spec:
accessModes:
- ReadWriteOnce
storageClassName: manual
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:
name: informes-ocupacion
namespace: rutas-norte-pre
spec:
containers:
- name: informes
image: busybox:1.36
command: ["sleep", "3600"]
volumeMounts:
- name: datos
mountPath: /datos
volumes:
- name: datos
persistentVolumeClaim:
claimName: pvc-informesComprobación:
NAME CAPACITY ACCESS MODES STATUS CLAIM
persistentvolume/pv-informes 2Gi RWO Bound rutas-norte-pre/pvc-informes
NAME STATUS VOLUME CAPACITY
persistentvolumeclaim/pvc-informes Bound pv-informes 2GiLa trampa: si el storageClassName no coincide exactamente entre PV y PVC, el PVC se queda en Pending para siempre. Y el PV es de ámbito de clúster: no lleva namespace.
Tarea 6 — Nodo NotReady (peso ~8 %, objetivo: 8 min)
Contexto:
kubectl config use-context rutas-norte-proEl nodo
nodo-3aparece comoNotReady. Investiga y devuélvelo al estadoReadysin reinstalar nada.
kubectl get nodes
kubectl describe node nodo-3 | tail -20
# Entrar al nodo
ssh nodo-3
sudo systemctl status kubelet
sudo journalctl -u kubelet -n 40 --no-pagerSalida típica del diagnóstico:
● kubelet.service - kubelet: The Kubernetes Node Agent
Loaded: loaded (/lib/systemd/system/kubelet.service; disabled)
Active: inactive (dead)La trampa: enable además de start. Si solo haces start, el corrector puede reiniciar el nodo y volverás a suspender. Si el kubelet arranca pero muere, mira journalctl: suele ser una ruta mal puesta en /var/lib/kubelet/config.yaml o un kubeconfig inválido.
Tarea 7 — NetworkPolicy de aislamiento (peso ~7 %, objetivo: 7 min)
Contexto:
kubectl config use-context rutas-norte-proEn
rutas-norte-pro,postgres-reservassolo debe aceptar tráfico entrante en el puerto 5432 desde pods con la etiquetaapp=api-reservasdel mismo namespace. Todo lo demás, denegado.
# np-postgres.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: postgres-solo-api
namespace: rutas-norte-pro
spec:
podSelector:
matchLabels:
app: postgres-reservas
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: api-reservas
ports:
- protocol: TCP
port: 5432Comprobación:
# Debe funcionar
kubectl run test-ok --rm -it --image=busybox:1.36 \
--labels=app=api-reservas -n rutas-norte-pro --restart=Never \
-- nc -zv postgres-reservas 5432
# Debe fallar (timeout)
kubectl run test-ko --rm -it --image=busybox:1.36 \
--labels=app=intruso -n rutas-norte-pro --restart=Never \
-- nc -zv -w 3 postgres-reservas 5432La trampa: declarar policyTypes: [Ingress] es lo que hace que la política deniegue todo lo no permitido. Si lo omites y no hay reglas de egress, el comportamiento no es el que esperas. Y el CNI debe soportar NetworkPolicies (Calico sí; el CNI por defecto de kind, no).
Tarea 8 — Actualizar un nodo trabajador (peso ~9 %, objetivo: 12 min)
Contexto:
kubectl config use-context rutas-norte-proActualiza el nodo trabajador
nodo-1de la versión 1.30.4 a la 1.31.1. El plano de control ya está en 1.31.1.
# Desde el nodo de control
kubectl drain nodo-1 --ignore-daemonsets --delete-emptydir-data
# En nodo-1 por ssh
ssh nodo-1
sudo apt-get update
sudo apt-mark unhold kubeadm
sudo apt-get install -y kubeadm=1.31.1-1.1
sudo apt-mark hold kubeadm
sudo kubeadm upgrade node
sudo apt-mark unhold kubelet kubectl
sudo apt-get install -y kubelet=1.31.1-1.1 kubectl=1.31.1-1.1
sudo apt-mark hold kubelet kubectl
sudo systemctl daemon-reload
sudo systemctl restart kubelet
exit
# De vuelta en el nodo de control
kubectl uncordon nodo-1Comprobación:
La trampa: en trabajadores es kubeadm upgrade node, nunca upgrade apply. Y si el repositorio de paquetes está pinneado a la minor 1.30, primero hay que cambiar la URL del repositorio de pkgs.k8s.io a v1.31, o apt no verá la versión nueva.
Errores Comunes y Consejos
Errores que cuestan puntos en el examen
| Error | Consecuencia | Prevención |
|---|---|---|
No ejecutar el use-context de la tarea |
Cero puntos en una tarea perfecta | Primer comando de cada tarea, siempre |
Olvidar el -n <namespace> pedido |
El objeto se crea en default y no puntúa |
Usar kubectl config set-context --current --namespace=X |
| Escribir YAML desde cero | Se te va el tiempo y metes errores de indentación | Usar --dry-run=client -o yaml o copiar de la documentación |
| Perseverar en una tarea difícil | Dejas 4 tareas fáciles sin hacer | Límite de tiempo por tarea; marcar y saltar |
| No verificar lo hecho | Crees que puntúas y no | Un kubectl get/describe de cierre por tarea |
| Dejar la tarea en blanco | Pierdes la puntuación parcial | Haz siempre la parte que sepas |
Usar apt-get upgrade en vez de instalar la versión exacta |
Rompes el clúster | apt-get install -y kubelet=<version> |
Restaurar etcd sobre /var/lib/etcd |
La restauración falla o corrompe | Restaurar a un directorio nuevo |
drain sin --ignore-daemonsets |
El comando falla y pierdes minutos | Ponlo siempre |
Consejos de preparación
- Practica en un clúster real, no leyendo. El CKA se aprueba con las manos.
- Cronometra desde el día uno. Saber hacer algo en 15 minutos no sirve si el objetivo son 6.
- Domina
kubectl explain.kubectl explain pod.spec.containers.livenessProbe --recursivete ahorra abrir el navegador. - Ten la documentación en la cabeza como un mapa. No memorices YAML: memoriza en qué página está.
- Aprende a leer eventos.
kubectl describe podykubectl get events --sort-by=.lastTimestampresuelven la mitad del dominio de troubleshooting. - Trabaja con
sudocómodo. Muchas tareas de administración son en el nodo, no enkubectl. - Simula el entorno del examen. Mismo navegador, mismo terminal, mismo teclado. Reduce fricción el día D.
Ejercicios
Ejercicio 1 — Construye tu propio mapa de estudio
Toma el temario oficial vigente del CKA (descárgalo del repositorio cncf/curriculum) y, para cada objetivo, anota en una tabla propia tres cosas: la lección de este curso donde se cubre, tu nivel de confianza del 1 al 5, y si sabrías resolverlo sin documentación. Ordena la tabla por confianza ascendente: ese orden es tu plan de repaso.
Ejercicio 2 — Bloque cronometrado de administración
En un clúster de tres nodos montado con kubeadm (o VMs), resuelve en 30 minutos seguidos y sin pausas:
- Copia de seguridad de etcd en
/opt/backup.dby verificación consnapshot status. - Drenar
nodo-1, actualizar su kubelet a la siguiente versión de parche, devolverlo al servicio. - Crear la ServiceAccount
auditorcon permisos de solo lectura sobrepodsyservicesen todos los namespaces, y demostrarlo conauth can-i.
Ejercicio 3 — Rompe y arregla el plano de control
Provoca deliberadamente estos tres fallos, de uno en uno, y arregla cada uno midiendo el tiempo:
- Cambia el puerto de
--secure-porten/etc/kubernetes/manifests/kube-apiserver.yamla6444. - Renombra
/etc/kubernetes/pki/etcd/server.keyaserver.key.bak. - Cambia
staticPodPathen/var/lib/kubelet/config.yamla/etc/kubernetes/manifiestos.
Objetivo: diagnosticar y arreglar cada uno en menos de 6 minutos.
Soluciones
Solución al Ejercicio 1
No hay solución única, pero tu tabla debe parecerse a esta (extracto); el criterio decisivo es la última columna:
| Objetivo | Lección | Confianza | ¿Sin docs? |
|---|---|---|---|
| Backup/restore de etcd | 05-06 + apartado 5.3 |
2 | No |
| Crear un Deployment y escalarlo | 02-03 |
5 | Sí |
| NetworkPolicy de denegación | 04-06 |
3 | No |
| Actualizar el clúster | 10-02 |
2 | No |
| Diagnosticar un pod en CrashLoop | 07-06 |
4 | Sí |
Todo lo que tenga confianza ≤ 3 y "No" en la última columna va a las semanas 4 y 5 del plan. La trampa habitual es puntuarse alto en lo que se entiende pero nunca se ha ejecutado: si no lo has hecho con las manos esta semana, la confianza es 3 como mucho.
Solución al Ejercicio 2
Bloque de etcd (objetivo 8 min):
sudo ETCDCTL_API=3 etcdctl snapshot save /opt/backup.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key
sudo ETCDCTL_API=3 etcdctl --write-out=table snapshot status /opt/backup.db+----------+----------+------------+------------+
| HASH | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| 8f2e91ac | 41207 | 1382 | 5.9 MB |
+----------+----------+------------+------------+Bloque de nodo (objetivo 15 min):
kubectl drain nodo-1 --ignore-daemonsets --delete-emptydir-data
ssh nodo-1 '
sudo apt-get update &&
sudo apt-mark unhold kubelet kubectl &&
sudo apt-get install -y kubelet=1.30.5-1.1 kubectl=1.30.5-1.1 &&
sudo apt-mark hold kubelet kubectl &&
sudo systemctl daemon-reload && sudo systemctl restart kubelet'
kubectl uncordon nodo-1
kubectl get nodesPara un cambio solo de parche (1.30.4 → 1.30.5) basta con actualizar el kubelet; en un cambio de versión menor haría falta además sudo kubeadm upgrade node.
Bloque de RBAC (objetivo 7 min): al ser "todos los namespaces", exige ClusterRole + ClusterRoleBinding:
kubectl create serviceaccount auditor -n rutas-norte-pro
kubectl create clusterrole auditor-lectura --verb=get,list,watch --resource=pods,services
kubectl create clusterrolebinding auditor-lectura-binding \
--clusterrole=auditor-lectura --serviceaccount=rutas-norte-pro:auditor
kubectl auth can-i list services --as=system:serviceaccount:rutas-norte-pro:auditor -A # yes
kubectl auth can-i create pods --as=system:serviceaccount:rutas-norte-pro:auditor -A # noEl error clásico es usar Role+RoleBinding: solo cubriría un namespace. El segundo error es ClusterRole con RoleBinding, que restringe los permisos a un namespace concreto —útil en otros casos, pero no es lo pedido.
Solución al Ejercicio 3
| Fallo provocado | Síntoma | Arreglo |
|---|---|---|
--secure-port=6444 en el apiserver |
kubectl responde The connection to the server ... was refused; el contenedor arranca y muere |
Devolver 6443 y ajustar también el puerto en livenessProbe y readinessProbe: el manifiesto lo repite en tres sitios y cambiar solo uno deja el pod en bucle |
server.key de etcd renombrada |
La API no responde; los logs de etcd muestran no such file or directory |
Restaurar el nombre y dejarlo en chmod 600, root:root. Con permisos incorrectos el síntoma es idéntico, y el arreglo es solo el chmod/chown |
staticPodPath cambiado |
Todos los pods del plano de control desaparecen a la vez; esa simultaneidad lo delata frente a un fallo aislado | Restaurar staticPodPath: /etc/kubernetes/manifests en /var/lib/kubelet/config.yaml y reiniciar el kubelet |
La secuencia de diagnóstico es siempre la misma, y merece la pena automatizarla:
kubectl get nodes # ¿responde la API?
sudo systemctl status kubelet # ¿vive el kubelet?
sudo journalctl -u kubelet -n 40 --no-pager
sudo crictl ps -a # ¿qué contenedores del plano de control hay?
sudo crictl logs <container-id>
ls -l /etc/kubernetes/manifests/Diferencia clave que este ejercicio graba: los manifiestos de /etc/kubernetes/manifests/ los relee el kubelet solo, en segundos; /var/lib/kubelet/config.yaml sí requiere sudo systemctl restart kubelet para surtir efecto.
Conclusión
El CKA no mide si sabes Kubernetes en abstracto: mide si sabes operar un clúster con las manos y con prisa. Después de once módulos construyendo Rutas Norte, el conocimiento ya lo tienes; lo que esta lección te ha dado es la traducción de ese conocimiento al lenguaje del examen.
Los puntos que debes llevarte:
- El CKA certifica el perfil de administración: nodos, plano de control, etcd, red, almacenamiento, RBAC y, sobre todo, diagnóstico (el dominio de mayor peso, en torno al 30 %).
- El examen es práctico, cronometrado y con varios clústeres. El
use-contextes el primer comando de cada tarea, sin excepción. - Hay puntuación parcial: nunca dejes una tarea vacía.
- Puedes consultar la documentación oficial y solo esa. Estudia dónde está cada cosa, no memorices YAML.
- La tabla del apartado 4 convierte este curso en tu plan de estudio: cada objetivo oficial tiene su lección.
- Siete procedimientos hay que tenerlos automatizados: kubeadm, upgrade, etcd, certificados, drain, plano de control roto y RBAC.
- Consulta siempre el temario oficial vigente en la web de la Linux Foundation / CNCF antes de matricularte: pesos, duración y condiciones cambian.
En la siguiente lección cambiamos de perfil. Si el CKA es la certificación de quien mantiene el clúster, el CKAD es la de quien construye sobre él: menos etcd y más manifiestos de aplicación, menos administración y mucha más velocidad con kubectl. Veremos en qué se diferencian, qué dominios entran y cómo se entrena la competencia que decide ese examen: hacer muchas cosas correctas en muy poco tiempo.
Curso de Kubernetes
Módulo 1: Introducción a Kubernetes
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- La CLI de Kubernetes: kubectl
- Objetos, Manifiestos YAML y el Modelo Declarativo
- El Proyecto del Curso: la Plataforma Rutas Norte
Módulo 2: Componentes Principales de Kubernetes
- Pods
- ReplicaSets
- Deployments
- Actualizaciones, Rollbacks y Estrategias de Despliegue
- Servicios
- Namespaces
- Etiquetas, Selectores y Anotaciones
Módulo 3: Gestión de Configuración y Secretos
- ConfigMaps
- Secrets
- Variables de Entorno
- Cuotas y Límites de Recursos
- LimitRanges y Clases de Calidad de Servicio (QoS)
- ServiceAccounts y Acceso a la API desde los Pods
Módulo 4: Redes en Kubernetes
- Redes de Clúster
- Tipos de Servicios
- DNS Interno y Descubrimiento de Servicios
- Controladores de Ingress
- TLS y Gestión de Certificados con cert-manager
- Políticas de Red
Módulo 5: Almacenamiento en Kubernetes
- Volúmenes
- Volúmenes Persistentes
- Reclamaciones de Volúmenes Persistentes
- Clases de Almacenamiento
- Aprovisionamiento Dinámico, Expansión y Snapshots
- Copias de Seguridad y Restauración de Datos
Módulo 6: Conceptos Avanzados de Kubernetes
- StatefulSets
- DaemonSets
- Trabajos y CronJobs
- Init Containers, Sidecars y Patrones Multi-Contenedor
- Planificación: Afinidad, Taints y Tolerations
- Definiciones de Recursos Personalizados (CRDs)
- Operadores y el Patrón Controlador
Módulo 7: Monitoreo y Registro
- Verificaciones de Salud y Sondas
- Servidor de Métricas y kubectl top
- Monitoreo con Prometheus
- Visualización y Alertas con Grafana y Alertmanager
- Registro Centralizado con Elasticsearch, Fluentd y Kibana (EFK)
- Depuración de Aplicaciones y Eventos del Clúster
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Contextos de Seguridad y Endurecimiento del Contenedor
- Políticas de Seguridad de Pods y Pod Security Standards
- Seguridad de Red
- Seguridad de Imágenes
- Auditoría, Escaneo y Gestión de Vulnerabilidades
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Escalado por Eventos y Métricas Personalizadas con KEDA
- Alta Disponibilidad: PodDisruptionBudgets y Topología
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
- Minikube y Entornos Locales con kind
- Kubeadm
- Helm
- Kustomize
- GitOps con Argo CD y Flux
- Kubernetes Gestionado: EKS, AKS y GKE
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- Ejecución de Aplicaciones con Estado
- CI/CD con Kubernetes
- Estrategias de Despliegue: Blue-Green y Canary
- Gestión Multi-Clúster
- Operación en Producción: Incidencias, Runbooks y Costes
