saltar al contenido
volver al mapa
técnica
etapa: provision
2 min de lectura

Fundamentos de Kubernetes

Kubernetes ejecuta contenedores en un clúster y los mantiene en el estado que declaraste. Aprende los pocos objetos que importan y los ajustes que evitan que un pod malo tumbe todo.

kubectlHelm / Kustomizek9skind / minikubeKyverno / OPA GatekeeperArgo CD

Los objetos principales

  • Pod: uno o más contenedores que corren juntos y comparten una identidad de red. La unidad más pequeña que despliegas, y desechable.
  • Deployment: declara cuántas réplicas de un pod ejecutar y cómo desplegar los cambios. Un ReplicaSet por debajo mantiene la cuenta.
  • Service: un nombre y una dirección estables que balancean carga hacia los pods correspondientes, que van y vienen.
  • Ingress o Gateway: enruta el tráfico externo por host y ruta hacia los services.
  • ConfigMap y Secret: configuración y valores sensibles inyectados como variables de entorno o archivos. Un Secret está codificado, no cifrado por defecto; protégelo con cifrado en reposo y acceso restringido.
  • Namespace: un ámbito para nombres, cuotas y reglas de acceso, usado para separar equipos o entornos.
  • El control loop: tú declaras el estado deseado; los controllers hacen que el estado real coincida de forma continua.

Un deployment que vale la pena ejecutar

Define requests y limits de recursos, probes de salud, una estrategia de rollout y un security context restringido. Esa es la diferencia entre un pod que se porta bien y uno que te sorprende.

deployment.yamlyaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 3
  selector:
    matchLabels: { app: api }
  strategy:
    rollingUpdate: { maxUnavailable: 0, maxSurge: 1 }
  template:
    metadata:
      labels: { app: api }
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile: { type: RuntimeDefault }
      containers:
        - name: api
          image: registry.example.com/api@sha256:<digest>
          ports: [{ containerPort: 8080 }]
          resources:
            requests: { cpu: 100m, memory: 128Mi }
            limits: { memory: 256Mi }
          readinessProbe:
            httpGet: { path: /ready, port: 8080 }
          livenessProbe:
            httpGet: { path: /health, port: 8080 }
          securityContext:
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
            capabilities: { drop: ["ALL"] }

Comandos del día a día

Prefiere cambiar el clúster mediante control de versiones y un controller GitOps, y deja kubectl para lectura y emergencias.

kubectlbash
kubectl get pods -n prod -o wide
kubectl describe pod api-7c9d -n prod           # los eventos explican la mayoría de las fallas
kubectl logs deploy/api -n prod --tail=100 -f
kubectl rollout status deploy/api -n prod
kubectl rollout undo deploy/api -n prod          # vuelve a la revisión anterior
kubectl top pods -n prod

Errores comunes

  • Sin límites de recursos: un pod deja sin recursos a sus vecinos.
  • Liveness probes que dependen de servicios externos, reiniciando pods sanos durante una caída.
  • Usar tags latest o mutables, de modo que reiniciar un pod cambia la versión.
  • Todo en el namespace default, con permisos a nivel de clúster para cada workload.
  • Tratar el clúster como aquello que operas, en lugar de la plataforma que usan tus equipos.

conexiones en el mapa

actualizado el 14/10/2026 · fuentes para profundizar · reportar un error

en otros dominios

Estudia antes

Desbloquea

pon a prueba lo que entendiste

Cargando preguntas…