Inicio > Cursos > Docker & Kubernetes > ConfigMaps, Secrets y Volumes
Docker & KubernetesKubernetes FundamentosLección 9 de 12

ConfigMaps, Secrets y Volumes

En Kubernetes, la configuracion y los datos persistentes se manejan con recursos dedicados:

• ConfigMap: Almacena configuracion no sensible (variables de entorno, archivos de config). Se puede montar como archivo o inyectar como variable. • Secret: Similar a ConfigMap pero para datos sensibles (passwords, API keys, certificados). Se almacena codificado en base64 (no es encriptacion real sin configuracion extra). • PersistentVolume (PV): Almacenamiento real provisionado por el admin o el cloud provider. • PersistentVolumeClaim (PVC): Solicitud de almacenamiento por parte de un pod. K8s busca un PV que cumpla los requisitos. • StorageClass: Define tipos de almacenamiento disponibles (SSD, HDD, etc). Permite provisionar PVs automaticamente.

# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  DATABASE_HOST: "postgres-service"
  DATABASE_PORT: "5432"
  LOG_LEVEL: "info"
  nginx.conf: |
    server {
      listen 80;
      location / {
        proxy_pass http://api-service:3000;
      }
    }

---
# secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: app-secrets
type: Opaque
stringData:             # stringData acepta texto plano (K8s lo codifica)
  DATABASE_PASSWORD: "super-secreto-123"
  JWT_SECRET: "mi-jwt-key-segura"
  API_KEY: "sk-abc123def456"
# deployment con ConfigMap y Secret
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mi-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mi-app
  template:
    metadata:
      labels:
        app: mi-app
    spec:
      containers:
        - name: api
          image: mi-app:1.0
          envFrom:
            - configMapRef:
                name: app-config     # inyecta TODAS las keys como env vars
            - secretRef:
                name: app-secrets    # inyecta secrets como env vars
          volumeMounts:
            - name: nginx-config
              mountPath: /etc/nginx/conf.d
      volumes:
        - name: nginx-config
          configMap:
            name: app-config
            items:
              - key: nginx.conf
                path: default.conf
# persistent-volume-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pvc
spec:
  accessModes:
    - ReadWriteOnce       # un solo nodo puede leer/escribir
  storageClassName: standard
  resources:
    requests:
      storage: 10Gi

---
# Deployment de Postgres con volumen persistente
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:16-alpine
          env:
            - name: POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: app-secrets
                  key: DATABASE_PASSWORD
          volumeMounts:
            - name: pg-storage
              mountPath: /var/lib/postgresql/data
      volumes:
        - name: pg-storage
          persistentVolumeClaim:
            claimName: postgres-pvc
# Comandos para ConfigMaps, Secrets y Volumes

# Crear ConfigMap desde literal
kubectl create configmap app-config --from-literal=LOG_LEVEL=info

# Crear ConfigMap desde archivo
kubectl create configmap nginx-conf --from-file=nginx.conf

# Crear Secret desde literal
kubectl create secret generic app-secrets \
  --from-literal=DB_PASS=secreto123

# Ver ConfigMaps y Secrets
kubectl get configmaps
kubectl get secrets
kubectl describe configmap app-config

# Ver el valor de un secret (esta en base64)
kubectl get secret app-secrets -o jsonpath="{.data.DB_PASS}" | base64 -d

# Ver PersistentVolumeClaims
kubectl get pvc
kubectl get pv
ConsejoLos Secrets de K8s se almacenan en base64, no encriptados. Para seguridad real, usa herramientas como Sealed Secrets, HashiCorp Vault, o habilita encryption at rest en etcd.
← Services y Networking en KubernetesAuto Scaling y GitOps →

Practica esta lección

Resuelve los ejercicios del curso de Docker & Kubernetes en la app, gratis y con corrección automática.

Empezar a practicar