Tema 2 de 10
El temario dedica media docena de puntos a la operación diaria de GKE: ver el inventario del clúster, configurar el acceso a Artifact Registry, trabajar con grupos de nodos, con recursos de Kubernetes como Pods, Services y StatefulSets, gestionar el autoescalado horizontal y vertical de Pods, las peticiones de recursos en Autopilot y el reparto de tráfico.
Contenido
Google separa dos tipos de herramientas: las de Google Cloud (consola y gcloud container) para gestionar el clúster, y las de Kubernetes (kubectl) para lo que pasa dentro. En la consola, la página de GKE muestra clústeres, nodos y cargas de trabajo.
gcloud container clusters list gcloud container clusters get-credentials CLUSTER --location=us-central1 kubectl get nodes kubectl get pods --all-namespaces kubectl get services kubectl describe pod POD_NAME
Cada nodo lleva la etiqueta cloud.google.com/gke-nodepool con el nombre de su grupo de nodos, útil para filtrar.
GKE descarga imágenes directamente de los repositorios Docker de Artifact Registry. La clave es la identidad de los nodos:
iam.automaticIamGrantsForDefaultServiceAccounts se aplica por defecto en organizaciones creadas desde el 3 de mayo de 2024), hay que darle Artifact Registry Reader (roles/artifactregistry.reader).Google recomienda sustituir el rol Editor de la cuenta predeterminada por roles menos permisivos, usando Policy Simulator para ver el impacto.
Un grupo de nodos es un conjunto de nodos de un clúster Standard con la misma configuración. En Autopilot no se configuran: GKE gestiona los nodos.
cos_containerd.nodeSelector o taints.gcloud container node-pools create highmem-pool --cluster=CLUSTER \ --location=us-central1 --machine-type=n2-highmem-4 --service-account=SA_EMAIL gcloud container clusters resize CLUSTER --node-pool=highmem-pool --num-nodes=2 --location=us-central1 gcloud container node-pools update highmem-pool --cluster=CLUSTER --location=us-central1 ... gcloud container node-pools delete highmem-pool --cluster=CLUSTER --location=us-central1
Ajusta automáticamente el número de nodos de un grupo entre un mínimo y un máximo. Se basa en las peticiones de recursos de los Pods, no en su uso real:
--min-nodes/--max-nodes son por zona; --total-min-nodes/--total-max-nodes son para todo el grupo.gcloud container node-pools update default-pool --cluster=CLUSTER --location=us-central1 \ --enable-autoscaling --total-min-nodes=3 --total-max-nodes=12
| Recurso | Para qué |
|---|---|
| Pod | La unidad mínima: uno o varios contenedores que comparten red y almacenamiento |
| Deployment | Aplicaciones sin estado con réplicas, actualizaciones graduales y rollback |
| StatefulSet | Pods con identidad persistente, nombre de host estable y un volumen persistente por réplica. Se empareja con un Service headless |
| Service | Punto de acceso estable a un grupo de Pods |
En un StatefulSet, las IP de las réplicas pueden cambiar si GKE reprograma un Pod: hay que usar Services en lugar de IP fijas. Para aplicaciones sin estado, Google indica usar Deployments.
| Tipo | Cómo llegan los clientes |
|---|---|
| ClusterIP (por defecto) | Clientes internos, a una IP interna estable |
| NodePort | A la IP de un nodo en un puerto concreto. Extiende ClusterIP |
| LoadBalancer | A la IP de un balanceador de carga de red. Extiende NodePort |
| ExternalName | El nombre DNS del Service es un alias de un nombre DNS externo |
| Headless | Agrupa Pods sin IP estable; usado por los StatefulSets |
Aumenta o reduce el número de Pods de una carga. No cambia el número de nodos: para eso está el cluster autoscaler.
Uso de recursos
CPU o memoria, en valor absoluto o como porcentaje de lo que pide el Pod.
Métricas personalizadas
Métricas de objetos del clúster, como peticiones por segundo.
Métricas externas
De fuera del clúster, como el tamaño de una cola de Pub/Sub.
kubectl autoscale deployment nginx --cpu-percent=50 --min=1 --max=10 kubectl get hpa kubectl scale deployment nginx --replicas=3 # escalado manual
Analiza el uso histórico y ajusta las peticiones y límites de CPU y memoria de los contenedores. Funciona mejor con cargas homogéneas de larga duración; para picos repentinos Google recomienda el HPA. Está activado por defecto en los clústeres Autopilot.
| Modo (updateMode) | Comportamiento |
|---|---|
| Auto / Recreate (por defecto) | Desaloja y recrea el Pod para aplicar las nuevas peticiones. Conviene limitarlo con un Pod disruption budget |
| Initial | Asigna las peticiones solo al crear el Pod; nunca las cambia después |
| Off | No aplica cambios: solo muestra recomendaciones para aplicarlas a mano |
| InPlaceOrRecreate (vista previa) | Intenta cambiar los recursos sin recrear el Pod; si no puede, lo recrea |
La implementación de GKE tiene en cuenta el tamaño máximo de nodo y las cuotas, avisa al cluster autoscaler y usa datos históricos de antes de activarlo.
En Autopilot se paga por lo que piden los Pods, así que las peticiones importan. Autopilot usa esas peticiones para configurar los nodos y las valida:
Rolling update del Deployment
maxUnavailable y maxSurge (25 % por defecto) controlan cuántos Pods pueden faltar o sobrar durante el despliegue.kubectl rollout undo deployment/NOMBRE vuelve a la revisión anterior (o a otra con --to-revision).Gateway API
env: canary pueden ir a otra versión.| Situación | Respuesta | Por qué |
|---|---|---|
| Pods de una carga necesitan mucha memoria y el resto no | Un grupo de nodos aparte con nodeSelector | Todos los nodos de un grupo son idénticos. |
| Hay Pods pendientes porque no caben en los nodos | Cluster autoscaler | Añade nodos según las peticiones de los Pods. |
| Escalar réplicas según los mensajes pendientes en Pub/Sub | HPA con métrica externa | El HPA admite métricas de fuera del clúster. |
| No sabes qué CPU y memoria pedir para un servicio estable | VPA en modo Off | Da recomendaciones sin aplicarlas. |
| Base de datos con identidad estable y un disco por réplica | StatefulSet con Service headless | Identidad persistente y volúmenes por Pod. |
| Los nodos no pueden descargar imágenes de Artifact Registry | Dar Artifact Registry Reader a la cuenta de servicio de los nodos | Es la identidad que usan para leer. |
| Mandar el 10 % del tráfico a la versión nueva | Gateway API con pesos en HTTPRoute | Reparto de tráfico por pesos. |
| Una nueva versión del Deployment falla | kubectl rollout undo | Vuelve a la revisión anterior. |
❓ ¿El HPA añade nodos al clúster?
No. Solo cambia el número de Pods; los nodos los añade el cluster autoscaler.
❓ ¿El cluster autoscaler mira el uso real de CPU?
No. Decide según las peticiones de recursos de los Pods.
❓ ¿Se puede configurar un solo nodo de un grupo?
No. Los cambios afectan a todos los nodos del grupo.
❓ ¿Qué hace Autopilot si un Pod pide más del máximo permitido?
Rechaza la carga. Si pide menos del mínimo, sube las peticiones automáticamente.
❓ ¿Qué modo de VPA solo da recomendaciones?
Off. Auto/Recreate es el modo por defecto y recrea los Pods.
❓ ¿Por qué un HPA por porcentaje de CPU no escala?
Probablemente porque algún contenedor no tiene petición de CPU; sin ella no puede calcular el porcentaje.
¿Entendiste este tema?
Pon a prueba lo que acabas de aprender
En un clúster GKE Standard, el HPA crea más réplicas durante un pico, pero los Pods nuevos quedan en estado Pending porque no caben en los nodos. ¿Qué hace?
Preguntas originales, cada una con su explicación.
Empezar un simulacro