Saltar al contenido principal

Capítulo 3.2 - Declaración YAML de Pods

Objetivos de Aprendizaje​

Al final de este capítulo, usted será capaz de:

  • Comprender la estructura YAML de un Pod
  • Crear Pods con kubectl
  • Definir los recursos (CPU, memoria)
  • Configurar las variables de entorno
  • Montar volúmenes

Estructura YAML de un Pod​

Estructura Básica​

apiVersion: v1
kind: Pod
metadata:
name: my-pod
labels:
app: my-app
env: production
spec:
containers:
- name: my-container
image: nginx:1.20
ports:
- containerPort: 80

Secciones Principales​

  1. apiVersion: Versión de la API de Kubernetes
  2. kind: Tipo de recurso (Pod)
  3. metadata: Metadatos (nombre, labels, anotaciones)
  4. spec: Especificación del Pod

Ejemplo Completo​

apiVersion: v1
kind: Pod
metadata:
name: web-server
namespace: default
labels:
app: web
tier: frontend
version: v1
spec:
containers:
- name: nginx
image: nginx:1.20
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
protocol: TCP
env:
- name: ENV_VAR
value: "production"
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
volumeMounts:
- name: config
mountPath: /etc/nginx/conf.d
volumes:
- name: config
configMap:
name: nginx-config
restartPolicy: Always

Recursos (CPU y Memoria)​

Requests y Limits​

resources:
requests: # Recursos garantizados
cpu: "100m" # 0.1 CPU core
memory: "128Mi" # 128 Mebibytes
limits: # Recursos máximos
cpu: "500m" # 0.5 CPU core
memory: "512Mi" # 512 Mebibytes

Unidades de CPU:

  • 100m = 0.1 CPU
  • 1 = 1 CPU core
  • 2.5 = 2.5 CPU cores

Unidades de Memoria:

  • 128Mi = 128 Mebibytes
  • 1Gi = 1 Gibibyte
  • 500M = 500 Megabytes

Variables de Entorno​

Método 1: Directo​

env:
- name: DATABASE_URL
value: "postgresql://localhost:5432/mydb"
- name: LOG_LEVEL
value: "info"

Método 2: Desde ConfigMap​

env:
- name: CONFIG_VALUE
valueFrom:
configMapKeyRef:
name: my-config
key: config-key

Método 3: Desde Secret​

env:
- name: PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: password

Volúmenes​

Tipos de Volúmenes​

volumes:
# Volumen desde ConfigMap
- name: config
configMap:
name: my-config

# Volumen desde Secret
- name: secrets
secret:
secretName: my-secret

# Volumen temporal
- name: temp
emptyDir: {}

# Volumen persistente
- name: data
persistentVolumeClaim:
claimName: my-pvc

Montaje en el Contenedor​

volumeMounts:
- name: config
mountPath: /etc/config
readOnly: true

Comandos kubectl​

Crear un Pod​

# Desde un archivo YAML
kubectl apply -f pod.yaml

# Desde la línea de comandos
kubectl run my-pod --image=nginx:1.20

# Crear y mostrar el YAML
kubectl run my-pod --image=nginx:1.20 --dry-run=client -o yaml > pod.yaml

Gestionar los Pods​

# Listar los Pods
kubectl get pods

# Ver los detalles
kubectl describe pod my-pod

# Ver los logs
kubectl logs my-pod

# Ejecutar un comando
kubectl exec -it my-pod -- /bin/bash

# Eliminar un Pod
kubectl delete pod my-pod

Resumen​

En este capítulo, usted ha aprendido:

Estructura YAML: apiVersion, kind, metadata, spec
Recursos: Requests (garantizados) y Limits (máximos)
Variables de entorno: Directas, ConfigMap, Secret
Volúmenes: ConfigMap, Secret, emptyDir, PVC
Comandos: kubectl apply, get, describe, logs, exec, delete


Próximos Pasos​

Ahora que usted sabe crear Pods:

Capítulo 3.3: Labels y Selectors
Lab 3.1: Creación y Gestión de Pods


Capítulo creado el: Diciembre 2024