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.