Lecciones en español / CKA / Hoja de repaso · English
Hoja de repaso de CKA CKA (Kubernetes v1.35 curriculum)
Dominio 1: Cluster Architecture, Installation and Configuration (25%)
Consejos para el examen
- Relaciona el síntoma con el componente: Pods atascados en Pending sin eventos apuntan al scheduler; réplicas que no se crean apuntan al controller-manager; kubectl rechazado en el 6443 apunta al API server; un solo nodo NotReady apunta a su kubelet o a su runtime.
- Una discrepancia de cgroup driver no siempre detiene la instalación; aparece más tarde como Pods que se reinician intermitentemente o errores del kubelet. Verifica
SystemdCgroup = trueen la configuración de containerd y reinicia containerd cada vez que la modifiques. - Nodos NotReady y CoreDNS en Pending justo después del init casi siempre significan que todavía no hay un plugin CNI instalado, no que el clúster esté roto.
- Para cambiar un flag del control plane, edita el manifiesto en /etc/kubernetes/manifests de ese nodo, nunca el mirror Pod mediante kubectl. Guarda una copia de respaldo del manifiesto fuera de ese directorio, porque cada archivo YAML que haya dentro se trata como un Pod.
- Actualizar el paquete no basta: olvidar
systemctl daemon-reload && systemctl restart kubeletdeja al nodo reportando la versión anterior. Recuerda también:upgrade applysolo en el primer nodo del control plane yupgrade nodeen todos los demás. - snapshot save falla con un error de TLS o de deadline si omites --cacert, --cert o --key; copia las rutas directamente del manifiesto de etcd en lugar de adivinarlas. Para la restauración, recuerda que el volumen hostPath es lo que realmente decide qué directorio del host ve etcd.
- Domina las cuentas del quorum: 3 miembros sobreviven a 1 falla, 5 sobreviven a 2, y agregar un cuarto miembro a tres no mejora la tolerancia a fallas. Recuerda también que el scheduler y el controller-manager son activo/pasivo, mientras que los API servers son activo/activo.
- Un RoleBinding que referencia un ClusterRole igual solo otorga acceso en el namespace del RoleBinding. Recuerda también que, al suplantar, los sujetos ServiceAccount se escriben como system:serviceaccount:<namespace>:<name>.
- El examen a menudo quiere
kubectl drain <node> --ignore-daemonsets(más --delete-emptydir-data si hace falta). Si drain da error por Pods gestionados por un DaemonSet, olvidaste --ignore-daemonsets; si se queja de Pods no gestionados, necesita --force. - Los releases de Helm pertenecen a un namespace:
helm listmuestra solo el namespace actual, así que usahelm list -Acuando parezca que falta un release. Y --version se refiere a la versión del chart, no a la de la aplicación. - Si kubectl no está disponible, crictl es tu forma de ver lo que pasa en el nodo. Recuerda que Flannel por sí solo no aplica NetworkPolicy; una política que parece ignorada puede simplemente no tener un CNI que la haga cumplir.
- Si
kubectl applydice 'no matches for kind', falta la CRD o su group/version no coincide con el apiVersion del objeto. Usakubectl api-resourcespara ver exactamente qué kinds y groups conoce el clúster.
Términos clave
- kube-apiserver
- La API REST central del clúster; el único componente que lee y escribe en etcd, y con el que se comunican todos los demás componentes.
- etcd
- Un almacén clave-valor consistente y distribuido que guarda todo el estado del clúster.
- kube-scheduler
- Asigna los Pods no programados a nodos filtrando y puntuando los nodos candidatos.
- kube-controller-manager
- Un único binario que ejecuta muchos bucles de reconciliación, como los controladores de ReplicaSet, Node y Job.
- kubelet
- El agente del nodo, ejecutado por systemd, que inicia los Pods a través del container runtime y reporta su estado.
- kube-proxy
- El componente por nodo que programa las reglas de reenvío para las IP virtuales de los Services.
- cgroup driver (controlador de cgroups)
- La forma en que el kubelet y el runtime crean los grupos de control; ambos deben usar el mismo, normalmente systemd.
- br_netfilter
- Un módulo del kernel que permite que iptables vea el tráfico que atraviesa un bridge de Linux.
- net.ipv4.ip_forward
- El sysctl que permite al kernel enrutar paquetes entre interfaces, necesario para el tráfico de los Pods.
- Preflight checks (verificaciones previas)
- Pruebas que kubeadm ejecuta antes de init o join para detectar errores de configuración del host.
- --pod-network-cidr
- El rango de IP reservado para las direcciones de los Pods, del cual asigna el plugin CNI.
- --control-plane-endpoint
- Una dirección compartida y estable para el API server, necesaria para expandir a HA más adelante.
- Bootstrap token (token de arranque)
- Un token de corta duración que permite a un nodo que se une autenticarse para solicitar su certificado de kubelet.
- discovery-token-ca-cert-hash
- Un hash de la clave pública de la CA del clúster que el nodo que se une usa para verificar el control plane.
- Static Pod (Pod estático)
- Un Pod gestionado directamente por un kubelet a partir de un archivo en su staticPodPath, no por el API server.
- Mirror Pod (Pod espejo)
- El objeto de API de solo lectura que crea el kubelet para que un static Pod sea visible con kubectl.
- kubeadm certs check-expiration
- Lista cada certificado gestionado por kubeadm y cuándo vence.
- Kubeconfig context (contexto)
- Una combinación con nombre de un cluster, un user y un namespace por defecto.
- kubeadm upgrade plan
- Verifica si se puede actualizar y lista las versiones objetivo sin cambiar nada.
- kubeadm upgrade apply
- Actualiza los componentes del primer nodo del control plane a una versión dada.
- kubeadm upgrade node
- Actualiza los nodos adicionales del control plane o la configuración del kubelet de un worker.
- Version skew policy (política de desfase de versiones)
- Reglas sobre cuánto pueden diferir las versiones de los componentes; los kubelets nunca pueden ser más nuevos que el API server.
- etcdctl
- El cliente de red para un etcd en ejecución; se usa para snapshot save, member list y endpoint health.
- etcdutl
- La utilidad offline de etcd para trabajar con archivos de datos, incluidos snapshot restore y status.
- Data directory (directorio de datos)
- La ubicación en disco de la base de datos de etcd, definida por --data-dir y montada mediante un volumen hostPath.
- etcd PKI
- La CA y los certificados separados en /etc/kubernetes/pki/etcd que se usan para el TLS mutuo de etcd.
- Stacked etcd (etcd apilado)
- Topología en la que cada nodo del control plane también ejecuta un miembro de etcd.
- External etcd (etcd externo)
- Topología en la que etcd se ejecuta en hosts separados del control plane.
- Quorum
- Una mayoría de miembros de etcd, floor(n/2)+1, necesaria para confirmar escrituras.
- --certificate-key
- La clave usada para descifrar los certificados del control plane subidos con --upload-certs al unirse como nodo del control plane.
- Leader election (elección de líder)
- Mecanismo que mantiene activos un solo scheduler y un solo controller-manager entre los nodos del control plane.
- Role / ClusterRole
- Conjuntos de reglas de permisos, de namespace o de alcance de clúster respectivamente.
- RoleBinding / ClusterRoleBinding
- Objetos que otorgan un rol a users, groups o ServiceAccounts, en un namespace o en todo el clúster.
- Aggregated ClusterRole (ClusterRole agregado)
- Un ClusterRole cuyas reglas se ensamblan automáticamente a partir de otros ClusterRoles que coinciden con un selector de etiquetas.
- CertificateSigningRequest
- Un objeto de API que le pide a un firmante, como el signer kube-apiserver-client, que emita un certificado.
- Cordon (acordonar)
- Marca un nodo como no programable sin tocar los Pods en ejecución.
- Drain (vaciar)
- Hace cordon de un nodo y desaloja sus Pods para que se reprogramen en otro lugar.
- PodDisruptionBudget (presupuesto de interrupción)
- Una política que limita cuántos de los Pods seleccionados pueden estar caídos a la vez por interrupciones voluntarias.
- Eviction API (API de desalojo)
- La API que usa drain para quitar Pods, y que respeta los PodDisruptionBudgets.
- Chart
- Un paquete de Helm con manifiestos de Kubernetes en plantillas y valores por defecto.
- Release
- Una instancia instalada y con nombre de un chart en un namespace, con su propio historial de revisiones.
- helm upgrade --install
- Instala un release si no existe o lo actualiza si ya existe.
- kustomization.yaml
- El archivo de Kustomize que lista recursos y transformaciones; se aplica con kubectl apply -k.
- CRI
- La interfaz gRPC que usa el kubelet para controlar container runtimes como containerd y CRI-O.
- crictl
- Un cliente de línea de comandos para runtimes CRI, usado para depurar a nivel de nodo.
- CNI
- La especificación y los plugins que configuran las interfaces de red y las direcciones IP de los Pods.
- CSI
- La interfaz estándar para drivers de almacenamiento externos al árbol de Kubernetes que aprovisionan, adjuntan y montan volúmenes.
- CustomResourceDefinition
- Un objeto que registra un nuevo tipo de recurso en el API server.
- Custom resource (recurso personalizado)
- Una instancia de un tipo definido por una CRD, guardada en etcd como cualquier objeto.
- Operator
- Un controlador más CRDs que automatiza la operación de una aplicación específica.
- Finalizer
- Una clave en un objeto que bloquea su borrado hasta que un controlador realiza la limpieza y la quita.
Dominio 2: Workloads and Scheduling (15%)
Consejos para el examen
- Editar el número de réplicas de un Deployment no crea una nueva revisión; solo lo hacen los cambios en la plantilla de Pod. Y nunca edites directamente un ReplicaSet que pertenece a un Deployment, porque el Deployment lo sobrescribirá.
- Cuando un DaemonSet tiene menos Pods que nodos, antes que nada compara los taints de los nodos (
kubectl describe node | grep -i taint) con las tolerations y el nodeSelector de la plantilla de Pod. - El consumo como variable de entorno nunca se actualiza en vivo; el consumo como volumen sí (excepto con subPath). Si una tarea dice 'haz que los Pods usen el nuevo valor', reinicia la carga de trabajo.
- Si los Pods no existen en absoluto, normalmente la admisión los rechazó (cuota o LimitRange), así que mira los eventos del ReplicaSet. Si los Pods existen pero están en Pending, normalmente la programación falló por requests insuficientes.
- Los términos se combinan con OR y las expresiones dentro de un término con AND. Y una etiqueta faltante con affinity required o nodeSelector significa Pending para siempre, nunca una alternativa.
- Una toleration por sí sola no pondrá un Pod en el nodo con el taint; combínala con nodeSelector o affinity. Para quitar un taint se usa el mismo comando con un signo menos al final.
- Lee la topologyKey con cuidado: hostname significa por nodo, zone significa por zona. El mismo selector con una clave distinta da una ubicación completamente diferente.
- PriorityClass es de alcance de clúster y los Pods la referencian por nombre; un error de tipeo en priorityClassName hace que la creación del Pod falle en la admisión. Solo se pueden desplazar Pods de menor prioridad.
- Los objetivos
<unknown>significan que metrics-server falta o no funciona, o que los Pods no tienen request para ese recurso. Revisa primerokubectl topy luego los requests. - Pending con un evento FailedScheduling significa que el scheduler se ejecutó y no encontró nodo. Pending sin ningún evento sugiere que el scheduler no está en ejecución o que el Pod indica un scheduler que no existe.
Términos clave
- ReplicaSet
- Un controlador que mantiene en ejecución un número especificado de Pods idénticos.
- Deployment
- Un controlador que gestiona ReplicaSets para ofrecer rolling updates y rollbacks declarativos.
- maxSurge / maxUnavailable
- Ajustes de RollingUpdate para los Pods extra permitidos y los Pods que pueden faltar durante una actualización.
- kubectl rollout restart
- Desencadena un reemplazo gradual de todos los Pods cambiando una anotación en la plantilla de Pod.
- DaemonSet
- Un controlador que ejecuta una copia de un Pod en cada nodo elegible.
- StatefulSet
- Un controlador que da a los Pods nombres ordinales estables, DNS estable y almacenamiento persistente por Pod.
- Headless Service
- Un Service con clusterIP None que publica registros DNS individuales de los Pods, requerido por los StatefulSets.
- Control plane taint (taint del control plane)
- node-role.kubernetes.io/control-plane:NoSchedule, que mantiene los Pods ordinarios fuera de los nodos del control plane.
- ConfigMap
- Un objeto que guarda configuración no confidencial como pares clave-valor.
- Secret
- Un objeto para datos sensibles; por defecto los valores están codificados en base64, no cifrados.
- envFrom
- Importa todas las claves de un ConfigMap o Secret como variables de entorno.
- Immutable ConfigMap/Secret (inmutable)
- Un objeto con immutable: true cuyos datos no se pueden cambiar después de crearlo.
- Request (solicitud)
- La cantidad de CPU o memoria reservada para un contenedor y usada en las decisiones de programación.
- Limit (límite)
- El máximo de CPU (se estrangula) o de memoria (se termina por OOM) que puede usar un contenedor.
- LimitRange
- Una política de admisión de namespace para valores por defecto, mínimos y máximos por contenedor o por Pod.
- ResourceQuota
- Un tope por namespace sobre el uso agregado de recursos y la cantidad de objetos.
- QoS class (clase QoS)
- Guaranteed, Burstable o BestEffort, derivada de los requests y limits y usada para el orden de desalojo.
- nodeName
- Un campo del Pod que lo fija directamente a un nodo, evitando al scheduler.
- nodeSelector
- Un mapa simple de etiquetas que un nodo debe cumplir por completo para que el Pod se programe ahí.
- Required node affinity (afinidad obligatoria)
- Una regla estricta de programación; el Pod se queda en Pending si ningún nodo la cumple.
- Preferred node affinity (afinidad preferida)
- Una regla flexible con peso que influye en la puntuación pero no bloquea la programación.
- Taint (marca de repulsión)
- Una clave, un valor y un efecto en un nodo que repelen a los Pods sin una toleration coincidente.
- Toleration (tolerancia)
- Un ajuste del Pod que permite, pero no obliga, la programación en nodos con taints coincidentes.
- NoExecute
- Un efecto de taint que desaloja los Pods en ejecución que no lo toleran, además de bloquear los nuevos.
- tolerationSeconds
- Cuánto tiempo puede quedarse un Pod que tolera un taint NoExecute antes de ser desalojado.
- topologyKey
- Una etiqueta de nodo cuyo valor define un dominio de topología, como un nodo o una zona.
- Pod anti-affinity (anti-afinidad de Pods)
- Una regla que mantiene un Pod alejado de los dominios que ya ejecutan Pods que coinciden con un selector.
- topologySpreadConstraints
- Reglas que limitan qué tan desigual es la distribución de los Pods coincidentes entre dominios.
- maxSkew
- La diferencia máxima permitida en la cantidad de Pods coincidentes entre dos dominios cualesquiera.
- PriorityClass
- Un objeto de alcance de clúster que asigna una prioridad entera a los Pods que lo referencian.
- Preemption (desplazamiento)
- El scheduler desaloja Pods de menor prioridad para hacer espacio a un Pod en Pending de mayor prioridad.
- globalDefault
- Un indicador de PriorityClass que la convierte en la clase por defecto para los Pods que no indican ninguna.
- preemptionPolicy: Never
- Da a una clase prioridad en la cola sin permitirle desalojar a otros Pods.
- HorizontalPodAutoscaler
- Un controlador que ajusta el número de réplicas de una carga de trabajo para cumplir un objetivo de métrica.
- metrics-server
- Un complemento que recolecta el uso de CPU y memoria de los kubelets y sirve la Resource Metrics API.
- averageUtilization
- Un objetivo expresado como porcentaje de los requests de recursos de los Pods.
- Vertical Pod Autoscaler
- Un complemento que recomienda o define los requests de los contenedores según el uso observado.
- Cluster Autoscaler
- Un complemento que agrega o elimina nodos según los Pods en Pending y la utilización de los nodos.
- Binding (asignación)
- El acto de asignar un Pod a un nodo, registrado al definir spec.nodeName.
- Mirror Pod (Pod espejo)
- La representación en la API de un static Pod, que pertenece al Node y no se puede editar.
- schedulerName
- Un campo del Pod que indica qué scheduler debe ubicarlo; por defecto, default-scheduler.
Dominio 3: Services and Networking (20%)
Consejos para el examen
- Recuerda qué componente es dueño de cada rango: el Pod CIDR lo usan el CNI y el controller-manager; el Service CIDR, el API server y kube-proxy. No deben solaparse entre sí ni con la subred de los nodos.
- No uses ping para probar un ClusterIP; prueba el puerto. Si un nodo no puede llegar a los Services mientras los demás sí, sospecha primero del Pod de kube-proxy de ese nodo.
- port es el puerto del Service, targetPort es el puerto del contenedor y nodePort es el puerto del nodo. Confundir port con targetPort es la causa más común de un Service que existe pero rechaza las conexiones.
- Una EndpointSlice vacía significa que el selector no coincide con ningún Pod Ready; revisa las etiquetas y la readiness antes de culpar a kube-proxy. Para externalTrafficPolicy, recuerda: Local conserva la IP de origen, Cluster reparte la carga.
- Cuenta los guiones: podSelector y namespaceSelector bajo un mismo guion se combinan con AND; bajo guiones separados, con OR. Y un deny de egress sin una excepción para DNS lo rompe todo.
- Si una ruta se ignora, revisa ambos lados de la vinculación: parentRefs (incluidos sectionName y namespace) y los allowedRoutes del listener. Las condiciones de estado te dicen qué lado la rechazó.
- La coincidencia Prefix es por segmento de ruta, no por prefijo de cadena: /app coincide con /app/x pero no con /application. Y el Secret de TLS debe estar en el mismo namespace que el Ingress.
- El Service se llama kube-dns, pero los Pods y el ConfigMap se llaman coredns. dnsPolicy Default no es el predeterminado; el predeterminado es ClusterFirst.
- Prueba siempre desde un Pod con el mismo namespace y las mismas etiquetas que el cliente real, o los resultados de las NetworkPolicies te engañarán. Y busybox tiene wget, no curl.
Términos clave
- Pod CIDR
- El rango de direcciones del que se asignan las IP de los Pods, definido al crear el clúster.
- Service CIDR
- El rango de direcciones para los ClusterIP de los Services, definido por --service-cluster-ip-range.
- Pause container (contenedor pause)
- El contenedor sandbox que mantiene el network namespace compartido de un Pod.
- Overlay network (red overlay)
- Una encapsulación (como VXLAN) que transporta el tráfico de los Pods entre nodos a través de la red de los nodos.
- ClusterIP
- Una IP virtual para un Service, implementada como reglas de reenvío y no como una interfaz real.
- iptables mode (modo iptables)
- Modo de kube-proxy que usa cadenas NAT (KUBE-SERVICES, KUBE-SVC, KUBE-SEP) para reenviar el tráfico de los Services.
- IPVS mode (modo IPVS)
- Modo de kube-proxy que usa el balanceador de carga basado en hash IP Virtual Server del kernel.
- nftables mode (modo nftables)
- Modo de kube-proxy que programa las reglas con el framework nftables.
- NodePort
- Un tipo de Service que además abre un puerto del rango 30000–32767 en todos los nodos.
- LoadBalancer
- Un tipo de Service que solicita un balanceador de carga externo a un cloud controller o a MetalLB.
- Headless Service
- Un Service con clusterIP None cuyo nombre DNS se resuelve directamente en las IP de los Pods.
- ExternalName
- Un Service que devuelve un CNAME de DNS hacia un hostname externo, sin proxy.
- EndpointSlice
- Un objeto que lista un subconjunto de las direcciones, puertos y condiciones de readiness de los backends de un Service.
- Selectorless Service (Service sin selector)
- Un Service sin selector cuyas EndpointSlices gestionas manualmente.
- externalTrafficPolicy: Local
- Solo los Pods locales del nodo reciben el tráfico externo, conservando la IP de origen del cliente.
- sessionAffinity: ClientIP
- Enruta de forma consistente una IP de cliente dada al mismo Pod de backend.
- NetworkPolicy (política de red)
- Un objeto de namespace que define una lista de permisos para el tráfico de ingress y egress de los Pods seleccionados.
- Default deny (denegación por defecto)
- Una política que selecciona todos los Pods sin reglas de permiso, bloqueando todo el tráfico en las direcciones indicadas.
- namespaceSelector
- Un selector de pares que coincide con todos los Pods de los namespaces cuyas etiquetas coinciden.
- ipBlock
- Un par definido por un rango CIDR, con excepciones opcionales.
- GatewayClass
- Un recurso de alcance de clúster que indica el controlador que implementa los Gateways de esa clase.
- Gateway
- Una solicitud de un punto de entrada de tráfico con uno o más listeners.
- HTTPRoute
- Reglas de enrutamiento que se adjuntan a listeners de un Gateway mediante parentRefs y reenvían a backendRefs.
- allowedRoutes
- Ajuste del listener que controla qué namespaces y tipos de ruta pueden adjuntarse.
- ReferenceGrant
- Un objeto que permite referencias entre namespaces, como una ruta hacia el Service de otro namespace.
- Ingress controller (controlador de Ingress)
- Un proxy que se ejecuta en el clúster y que implementa los objetos Ingress.
- IngressClass
- Un objeto de alcance de clúster que vincula un Ingress con un controlador específico.
- Default IngressClass (IngressClass predeterminada)
- La clase con la anotación is-default-class en true, usada cuando un Ingress no define ingressClassName.
- pathType
- Coincidencia de rutas Exact, Prefix (por elementos) o ImplementationSpecific.
- Corefile
- La configuración de CoreDNS, guardada en el ConfigMap coredns, formada por bloques de servidor y plugins.
- forward plugin (plugin forward)
- Envía a los resolvers upstream las consultas para las que CoreDNS no es autoritativo.
- Stub zone (zona stub)
- Un bloque de servidor que reenvía un dominio específico a servidores DNS designados.
- dnsPolicy
- Ajuste del Pod que elige el comportamiento de DNS ClusterFirst, Default, ClusterFirstWithHostNet o None.
- kubectl run --rm -it
- Crea un Pod temporal interactivo que se borra cuando termina la sesión.
- busybox
- Una imagen mínima con herramientas básicas como nslookup, wget y nc, pero sin curl.
- nicolaka/netshoot
- Una imagen de troubleshooting con muchas herramientas de red, incluidas curl, dig y tcpdump.
- Connection refused vs timeout (conexión rechazada frente a tiempo agotado)
- Refused significa que nada escucha en el puerto; timeout normalmente significa que el tráfico se descarta o no es enrutable.
Dominio 4: Storage (10%)
Consejos para el examen
- Los PVCs en Pending casi siempre se deben a una discrepancia en storageClassName, modo de acceso, tamaño o selector. Compara los campos del PVC y del PV lado a lado con kubectl get -o yaml.
- RWO es por nodo, no por Pod. Si la pregunta dice que solo un Pod puede usar el volumen en todo momento, la respuesta es ReadWriteOncePod.
- El aprovisionamiento dinámico usa Delete por defecto. Si el examen te pide conservar los datos de un claim aprovisionado dinámicamente, cambia el PV a Retain con patch antes de borrar el PVC.
- Omitir storageClassName significa 'usa la predeterminada'; definirlo como cadena vacía significa 'sin clase'. Se comportan de forma muy distinta.
- Pending con 'waiting for first consumer' es el estado esperado hasta que un Pod use el claim. No definas nodeName en esos Pods, porque omite al scheduler que desencadena la vinculación.
- Expande el PVC, nunca el PV, y solo hacia arriba. Si la edición se rechaza, revisa primero allowVolumeExpansion en la StorageClass del claim.
- El API server rechaza un PV local sin nodeAffinity. Y los datos de hostPath se quedan en un nodo; si el Pod se mueve, sus datos no.
- La retención predeterminada es Retain tanto para whenDeleted como para whenScaled, así que borrar un StatefulSet no borra sus datos. Los nombres de los PVCs siguen el patrón plantilla-statefulset-ordinal.
Términos clave
- PersistentVolume
- Un objeto de alcance de clúster que representa una porción de almacenamiento y sus propiedades.
- PersistentVolumeClaim
- Una solicitud de almacenamiento de namespace que se vincula a un PV coincidente.
- Released (liberado)
- Fase del PV después de que se borra su claim, antes de que el almacenamiento se recupere o se libere manualmente.
- emptyDir
- Un volumen temporal con alcance de Pod que se elimina cuando el Pod sale del nodo.
- ReadWriteOnce (RWO)
- Lectura-escritura por un solo nodo; varios Pods en ese nodo pueden compartirlo.
- ReadOnlyMany (ROX)
- Solo lectura por muchos nodos.
- ReadWriteMany (RWX)
- Lectura-escritura por muchos nodos; requiere almacenamiento de archivos compartido.
- ReadWriteOncePod (RWOP)
- Lectura-escritura por exactamente un Pod en todo el clúster; se admite para volúmenes CSI.
- persistentVolumeReclaimPolicy
- El campo del PV que decide qué pasa con el volumen después de que se borra su claim.
- Retain (conservar)
- Conserva el PV y los datos después de borrar el claim; el PV pasa a Released.
- Delete (borrar)
- Elimina el PV y su almacenamiento de respaldo cuando se borra el claim.
- Recycle (reciclar)
- Una política obsoleta que limpiaba el volumen y lo volvía a dejar Available.
- StorageClass
- Una descripción de alcance de clúster de un tipo de almacenamiento y de cómo aprovisionarlo.
- Provisioner (aprovisionador)
- El componente, normalmente un driver CSI, que crea volúmenes para una StorageClass.
- Dynamic provisioning (aprovisionamiento dinámico)
- La creación automática de un PV cuando un PVC solicita una StorageClass.
- Default StorageClass (StorageClass predeterminada)
- La clase con la anotación is-default-class en true, que se aplica a los PVCs sin storageClassName.
- volumeBindingMode
- Campo de la StorageClass que controla cuándo se vinculan los PVCs: Immediate o WaitForFirstConsumer.
- Immediate
- Vincula o aprovisiona en cuanto se crea el PVC, sin importar dónde se ubique el Pod.
- WaitForFirstConsumer
- Retrasa la vinculación hasta que se programa un Pod que usa el claim, respetando la topología.
- Volume node affinity conflict (conflicto de afinidad de nodo del volumen)
- Una falla de programación en la que el Pod no puede ejecutarse en ningún nodo al que llegue el volumen vinculado.
- allowVolumeExpansion
- Flag de la StorageClass que permite agrandar los PVCs de esa clase.
- Online expansion (expansión en línea)
- Hacer crecer el sistema de archivos de un volumen mientras el Pod que lo usa sigue ejecutándose.
- FileSystemResizePending
- Una condición del PVC que indica que el sistema de archivos se redimensionará la próxima vez que un Pod lo monte.
- Static provisioning (aprovisionamiento estático)
- Crear objetos PV manualmente para almacenamiento existente.
- hostPath
- Un tipo de volumen que monta un directorio del sistema de archivos del nodo; adecuado solo para laboratorios.
- local volume (volumen local)
- Un PV para almacenamiento conectado a un nodo que requiere nodeAffinity para fijar los Pods a ese nodo.
- NFS volume (volumen NFS)
- Almacenamiento de archivos en red identificado por servidor y ruta, utilizable en lectura-escritura desde muchos nodos.
- CSI driver (driver CSI)
- Un plugin de almacenamiento del proveedor, dividido en componentes de controlador y por nodo, que implementa CSI.
- volumeClaimTemplates
- Campo del StatefulSet que crea un PVC por cada ordinal de Pod.
- persistentVolumeClaimRetentionPolicy
- Ajuste del StatefulSet que controla si los PVCs se borran cuando el conjunto se borra o se reduce su escala.
- VolumeAttachment
- Un objeto que registra que un volumen CSI está adjuntado a un nodo concreto.
Dominio 5: Troubleshooting (30%)
Consejos para el examen
- Ready Unknown significa que el kubelet dejó de reportar; Ready False significa que reporta un problema. En ambos casos,
systemctl status kubeletyjournalctl -u kubeleten el nodo son tus dos primeros comandos. - Si no hay ningún contenedor en crictl ps -a, el manifiesto no se pudo analizar (revisa el journal del kubelet); si el contenedor se cae, el componente arrancó pero rechazó su configuración (revisa crictl logs).
- Lee el mensaje FailedScheduling completo: los conteos te dicen por qué se rechazó cada grupo de nodos, y la solución es distinta en cada caso. Recuerda que el scheduler usa los requests, no el uso en vivo.
- kubectl top muestra el uso real; describe node muestra requests y limits. Las decisiones de programación se basan en los requests, así que 'uso bajo pero los Pods no se programan' es un problema de requests.
- En un CrashLoopBackOff, la salida útil casi siempre está en
kubectl logs <pod> --previous. En los Pods con varios contenedores, especifica siempre -c. - Los eventos no se ordenan por tiempo por defecto y expiran después de aproximadamente una hora; agrega --sort-by y filtra con --field-selector type=Warning para eliminar el ruido rápidamente.
- Endpoints vacíos significa selector o readiness; endpoints presentes pero conexión rechazada significa targetPort o la aplicación; funciona en un nodo pero no en otro significa kube-proxy o el CNI de ese nodo.
- CoreDNS en CrashLoopBackOff con una línea de log 'Loop detected' es el problema del stub de systemd-resolved; corrige el resolvConf del kubelet o el destino de forward, no el plugin loop.
- Refused significa que nada escucha (API server caído o dirección equivocada); x509 significa certificados; Unauthorized significa credenciales; Forbidden significa RBAC. El error te dice qué capa arreglar.
- Pon las expresiones jsonpath entre comillas simples, revisa la estructura del objeto con -o yaml antes de escribir la ruta y haz siempre cat del archivo de respuesta al final.
- Los Pods de StatefulSet en un nodo perdido no se reemplazan automáticamente; el borrado forzado (o el taint out-of-service) es la solución, pero solo después de confirmar que el nodo está realmente caído.
Términos clave
- NotReady
- Estado del nodo cuando la condición Ready es False o Unknown.
- journalctl -u kubelet
- Muestra los logs del servicio kubelet, la fuente principal de errores a nivel de nodo.
- Node conditions (condiciones del nodo)
- Indicadores de estado como Ready, MemoryPressure, DiskPressure y PIDPressure que reporta el kubelet.
- KubeletConfiguration
- El archivo de configuración del kubelet, normalmente /var/lib/kubelet/config.yaml.
- crictl ps -a
- Lista todos los contenedores de un nodo desde el runtime, incluidos los terminados.
- crictl logs
- Lee los logs de un contenedor directamente desde el runtime; útil cuando el API server está caído.
- etcdctl endpoint health
- Verifica si un miembro de etcd está respondiendo.
- /var/log/pods
- Directorio en disco donde el kubelet guarda los archivos de log de los contenedores por Pod.
- FailedScheduling
- Motivo de evento que se registra cuando el scheduler no encuentra un nodo adecuado.
- Insufficient cpu/memory
- Mensaje del scheduler que significa que los requests del Pod superan la capacidad allocatable libre de todos los nodos.
- Untolerated taint (taint no tolerado)
- Mensaje del scheduler que significa que el taint de un nodo no tiene una toleration coincidente en el Pod.
- Unbound immediate PersistentVolumeClaims
- Mensaje del scheduler que significa que un PVC que necesita el Pod no está vinculado.
- kubectl top
- Muestra el uso actual de CPU y memoria de nodos o Pods usando metrics-server.
- Allocatable
- Los recursos del nodo disponibles para los Pods después de las reservas del sistema; los usa el scheduler.
- Allocated resources (recursos asignados)
- El resumen de describe node con el total de requests y limits de los Pods del nodo.
- Overcommitment (sobreasignación)
- Cuando la suma de los limits de un nodo supera su capacidad allocatable.
- kubectl logs --previous
- Muestra los logs de la última instancia terminada de un contenedor.
- /var/log/containers
- Directorio del nodo con enlaces simbólicos a los archivos de log de los contenedores, que los agentes de logs suelen seguir.
- Streaming sidecar (sidecar de streaming)
- Un contenedor auxiliar que lee el archivo de log de una aplicación desde un volumen compartido y lo escribe en stdout.
- Event (evento)
- Un registro de namespace de algo que le ocurrió a un objeto, con type, reason y message.
- involvedObject
- El objeto al que se refiere un evento; un objetivo común de los field selectors.
- --field-selector
- Filtrado del lado del servidor sobre campos admitidos del objeto, como type o reason.
- --sort-by
- Ordena la salida de kubectl por un campo JSONPath, como .metadata.creationTimestamp.
- Empty EndpointSlice (EndpointSlice vacía)
- Un Service sin backends, normalmente por una discrepancia de selector o por Pods que no están listos.
- Readiness probe (sonda de disponibilidad)
- Una verificación que decide si un Pod recibe tráfico del Service.
- Pod sandbox
- El network namespace y el contenedor pause del Pod, configurados mediante el CNI antes de que arranquen los contenedores.
- Cross-node traffic (tráfico entre nodos)
- Tráfico entre Pods de distintos nodos, transportado por el overlay o el enrutamiento del CNI.
- loop plugin (plugin loop)
- Plugin de CoreDNS que detecta bucles de reenvío y detiene CoreDNS si encuentra uno.
- systemd-resolved stub
- Un resolver local en 127.0.0.53 que causa bucles si CoreDNS le reenvía consultas.
- resolvConf
- Ajuste del kubelet que indica el archivo resolv.conf que se pasa a los Pods con la política Default y a CoreDNS.
- k8s-app=kube-dns
- La etiqueta que selecciona los Pods de CoreDNS y los backends del Service kube-dns.
- Context (contexto)
- Una entrada del kubeconfig que combina un cluster, un user y un namespace opcional.
- KUBECONFIG
- Variable de entorno que lista los archivos kubeconfig que kubectl debe combinar.
- Unauthorized vs Forbidden
- 401 significa que falló la autenticación; 403 significa autenticado pero no permitido por RBAC.
- kubeadm certs renew
- Comando que renueva los certificados gestionados por kubeadm, incluidos los incrustados en los kubeconfigs.
- -o jsonpath
- Modo de salida que imprime los valores seleccionados por una plantilla JSONPath.
- range ... end
- Construcción de JSONPath para recorrer una lista, usada comúnmente para imprimir un elemento por línea.
- -o custom-columns
- Modo de salida que imprime una tabla con nombres de columna definidos por el usuario y valores JSONPath.
- Terminating
- Estado del Pod que se muestra cuando hay una marca de tiempo de borrado pero el borrado no se ha confirmado.
- Force deletion (borrado forzado)
- Eliminar un objeto Pod de inmediato con --grace-period=0 --force, sin confirmación del kubelet.
- out-of-service taint (taint de fuera de servicio)
- Un taint de nodo que lo marca como apagado para que se limpien sus Pods y las conexiones de sus volúmenes.
- Grace period (período de gracia)
- El tiempo permitido entre SIGTERM y SIGKILL para que un contenedor se detenga; 30 segundos por defecto.
Estudia CKA gratis
Plan semana a semana con lecciones, cuestionarios, simulaciones de examen y práctica, en español.
Abrir el plan de estudioPlan semana a semana con lecciones, cuestionarios, simulaciones de examen y práctica, en español.