Apéndice D — Kubernetes básico

Objetivo del apéndice

Suficiente Kubernetes para desplegar Backstage: Pod, Deployment, Service, Ingress, kubectl. Sin entrar en Operators ni Helm charts avanzados.

Conceptos

  • Pod: 1+ contenedores corriendo juntos en el mismo nodo.

  • Deployment: controladora que mantiene N réplicas de un Pod.

  • Service: punto de acceso estable a un Deployment (ClusterIP, NodePort, LoadBalancer).

  • Ingress: reglas HTTP/S externas (host + path → service).

  • Namespace: aislamiento lógico.

  • ConfigMap / Secret: config y secretos inyectados como env o archivos.

kubectl esencial

kubectl get pods -A
kubectl get svc,ing -A
kubectl describe pod <name>
kubectl logs -f <pod>
kubectl exec -it <pod> -- bash
kubectl apply -f deployment.yaml
kubectl delete -f deployment.yaml
kubectl rollout status deployment/backstage
kubectl rollout undo deployment/backstage    # rollback
kubectl top pod                                # uso de recursos

Deployment mínimo

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backstage
  namespace: backstage
spec:
  replicas: 2
  selector:
    matchLabels: { app: backstage }
  template:
    metadata:
      labels: { app: backstage }
    spec:
      containers:
        - name: backstage
          image: ghcr.io/sazon-foods/backstage:1.31.0
          ports: [{ containerPort: 7007 }]
          envFrom:
            - secretRef: { name: backstage-secrets }

Service e Ingress

apiVersion: v1
kind: Service
metadata: { name: backstage, namespace: backstage }
spec:
  selector: { app: backstage }
  ports: [{ port: 80, targetPort: 7007 }]
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata: { name: backstage, namespace: backstage }
spec:
  rules:
    - host: backstage.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: backstage
                port: { number: 80 }
Debugging
  • :code:`kubectl describe` > :code:`kubectl get` para problemas (te dice Events).

  • :code:`kubectl logs --previous` para el contenedor que crasheó.

  • :code:`kubectl port-forward svc/backstage 7007:80 -n backstage` para acceso local sin Ingress.