Skip to content

Commit 4a952e9

Browse files
authored
Update Kubernetes manifest structure and commands
1 parent 9911d2c commit 4a952e9

1 file changed

Lines changed: 36 additions & 73 deletions

File tree

docs/kubernetes.md

Lines changed: 36 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,24 @@ Además:
2626
## 2) Estructura de manifiestos
2727

2828
Los manifests del portfolio viven bajo:
29+
```text
2930
k8s/portfolio/
3031
├── backend/
31-
│ ├── deployment.yaml
32-
│ ├── service.yaml
33-
│ ├── configmap.yaml
34-
│ ├── secret.yaml
35-
│ └── job-migrations.yaml
32+
├── deployment.yaml
33+
├── service.yaml
34+
├── configmap.yaml
35+
├── secret.yaml
36+
└── job-migrations.yaml
3637
├── frontend/
37-
│ ├── deployment.yaml
38-
│ └── service.yaml
38+
├── deployment.yaml
39+
└── service.yaml
3940
├── postgres/
40-
│ ├── deployment.yaml
41-
│ ├── service.yaml
42-
│ └── pvc.yaml
41+
├── deployment.yaml
42+
├── service.yaml
43+
└── pvc.yaml
4344
└── traefik/
44-
└── (opcional) CRDs / IngressRoute / Middleware si se usan
45+
└── (opcional) CRDs / IngressRoute / Middleware si se usan
46+
```
4547

4648
> Nota: el objetivo de esta estructura es separar el trabajo propio del contenido upstream y mantener una evolución por fases.
4749
@@ -53,9 +55,11 @@ Namespace:
5355
- `portfolio`
5456

5557
Comandos útiles:
58+
```bash
5659
kubectl get ns
5760
kubectl -n portfolio get pods,svc,ingress,ingressroute,middleware,job
5861
kubectl -n portfolio describe deploy backend
62+
```
5963

6064
## 4) Estructura de manifiestos
6165
Imágenes y versionado (tags inmutables)
@@ -64,9 +68,10 @@ Las imágenes se publican en GHCR.
6468
Para despliegues “reproducibles”, los deployments usan tags inmutables (ej: sha-...) en lugar de latest, para evitar latest en producción.
6569

6670
Ver imagen actual:
67-
71+
```bash
6872
kubectl -n portfolio get deploy backend -o=jsonpath='{.spec.template.spec.containers[0].image}{"\n"}'
6973
kubectl -n portfolio get deploy frontend -o=jsonpath='{.spec.template.spec.containers[0].image}{"\n"}'
74+
```
7075

7176
## 5) Variables de entorno (ConfigMap/Secret)
7277

@@ -79,9 +84,10 @@ backend-secret (Secret)
7984
Se inyectan vía envFrom en el deployment.
8085

8186
Ver qué hay definido:
82-
87+
```bash
8388
kubectl -n portfolio get cm backend-config -o yaml
8489
kubectl -n portfolio get secret backend-secret -o yaml
90+
```
8591

8692
Importante: no versionar secretos reales. En el repo se deja un ejemplo o placeholders si corresponde.
8793

@@ -94,7 +100,7 @@ Job:
94100
k8s/portfolio/backend/job-migrations.yaml
95101

96102
Ejecutar migraciones (manual / on-demand):
97-
103+
```bash
98104
kubectl -n portfolio delete job backend-migrations --ignore-not-found
99105
kubectl -n portfolio apply -f k8s/portfolio/backend/job-migrations.yaml
100106
kubectl -n portfolio get jobs
@@ -103,93 +109,50 @@ kubectl -n portfolio logs "$POD"
103109

104110
Salida esperada:
105111
✅ migrations + initial_data OK
112+
```
106113

107114
## 7) Exposición pública (Traefik / Ingress)
108115
Este cluster usa Traefik (incluido en k3s) como Ingress Controller.
109116

117+
```text
110118
Reglas de ruteo:
111119
112120
/ → frontend (service:80)
113121
114122
/api → backend (service:8000)
115123
116124
/docs → manejado por backend (FastAPI)
117-
125+
```
118126
Ver recursos de entrada:
119127

128+
```bash
120129
kubectl -n portfolio get ingress
121130
kubectl -n portfolio get ingressroute,middleware
122-
123-
Si se usa IngressRoute/Middleware (CRDs de Traefik), asegurarse de que existan los CRDs instalados:
124-
131+
```
132+
Nota > Si se usa IngressRoute/Middleware (CRDs de Traefik), asegurarse de que existan los CRDs instalados:
133+
```bash
125134
kubectl get crd | grep -i traefik
126-
135+
```
127136
## 8) Operación y troubleshooting
128137
Rollouts
138+
```bash
129139
kubectl -n portfolio rollout status deploy/backend
130140
kubectl -n portfolio rollout status deploy/frontend
131-
141+
```
132142
Logs
143+
```bash
133144
kubectl -n portfolio logs deploy/backend --tail=200
134145
kubectl -n portfolio logs deploy/frontend --tail=200
135-
146+
```
136147
ImagePullBackOff / ErrImagePull
137148

138149
Checklist:
139150

140-
- el tag existe en GHCR.
141-
142-
- el owner en ghcr.io/<owner>/... está en minúsculas
143-
144-
el deployment apunta al tag correcto (no duplicado/concatenado)
145-
146-
si el package es privado: configurar imagePullSecret
147-
148-
9) Próximas mejoras (Kubernetes)
149-
150-
Healthchecks (liveness/readiness) para backend/frontend
151-
152-
Requests/limits
153-
154-
HPA (si aplica)
155-
156-
TLS (HTTPS) con certificados
157-
158-
Automatizar CD (deploy automático) y/o GitOps
159-
160-
161-
---
162-
163-
## Paso 2 — Actualizar los README chicos (para que no mientan)
164-
165-
### A) `k8s/portfolio/README.md`
166-
Tu texto está bien como “principios”. Yo le agregaría 3 líneas para guiar:
167-
168-
**Pegá esto abajo** del texto que ya tenés:
169-
170-
```md
171-
Estructura:
172-
- `backend/`, `frontend/`, `postgres/`: recursos por servicio (Deployment/Service/PVC/Job)
173-
- `traefik/`: recursos de entrada (Ingress/IngressRoute/Middleware si aplica)
174-
175-
Aplicación:
176-
```bash
177-
kubectl -n portfolio apply -f k8s/portfolio/postgres
178-
kubectl -n portfolio apply -f k8s/portfolio/backend
179-
kubectl -n portfolio apply -f k8s/portfolio/frontend
180-
kubectl -n portfolio apply -f k8s/portfolio/traefik # si existe
181-
182-
183-
### B) `.github/workflows/README.md`
184-
Ahí hay una inconsistencia: tu README dice “CD al mergear a main”, pero vos venís trabajando en `master`. En tu README principal también se menciona CD como “próximo paso”.
185-
186-
Propongo dejarlo así, neutro y cierto:
151+
- [x] el tag existe en GHCR.
187152

188-
```md
189-
# Workflows (portfolio)
153+
- [x] el owner en ghcr.io/<owner>/... está en minúsculas
190154

191-
- `ci.yml`: build y validaciones en PRs y/o pushes (checks obligatorios con branch protection).
192-
- `cd.yml` (pendiente): deploy automático cuando se mergea a la rama protegida (master/main).
155+
- [x] el deployment apunta al tag correcto (no duplicado/concatenado)
193156

194-
> Nota: la rama protegida puede ser `master` o `main` según la configuración del repo.
157+
- [x] si el package es privado: configurar imagePullSecre
195158

0 commit comments

Comments
 (0)