refactor(medusa): migrar a base+overlay de platform-templates
Reemplaza medusa.yaml (Deployment+Service en un solo archivo) por un overlay de Kustomize sobre el base remoto de platform-templates (workloads/ecommerce/commerce/medusa/). Agrega securityContext, incluyendo runAsUser: 1000 explicito desde el arranque (confirmado con 'docker run ... id node' contra la imagen real antes de asumir el UID -- ya se aprendio en la migracion de frontend que runAsNonRoot solo no alcanza si el USER de la imagen es un nombre). El podAffinity del workaround de MTU/PMTUD y los 2 initContainers (wait-for-postgres, migrations) se preservan igual, son campos aditivos que no forman parte del base. El Ingress generico del base se excluye via $patch:delete -- medusa no tiene Ingress propio, comparte commerce-ingress. Validado con kubectl kustomize contra el arbol completo de workloads/ecommerce antes de aplicar. Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_011FqYP3Wf1W63Qmh7qgXAAT
This commit is contained in:
1 parent
4da96a8314
commit
8c79a045fd
4 files changed
+102
-25
No files matched your search
@@ -0,0 +1,128 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: app-deployment
|
||||
labels:
|
||||
app: medusa
|
||||
spec:
|
||||
replicas: 1
|
||||
strategy:
|
||||
type: RollingUpdate
|
||||
rollingUpdate:
|
||||
maxUnavailable: 0
|
||||
maxSurge: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: medusa
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: medusa
|
||||
spec:
|
||||
# runAsNonRoot solo no alcanza si el USER de la imagen es un
|
||||
# nombre, no un UID -- confirmado en vivo migrando frontend
|
||||
# (mismo problema exacto, error real: "cannot verify user is
|
||||
# non-root"). Acá el Dockerfile usa el usuario "node" que ya trae
|
||||
# la imagen base node:22.18.0-bookworm-slim -- confirmado con
|
||||
# `docker run ... id node` antes de asumir el UID: 1000.
|
||||
securityContext:
|
||||
runAsUser: 1000
|
||||
# Workaround del blackhole MTU/PMTUD cross-node (ver
|
||||
# docs/known-issues.md en apps-registry) -- ya no es
|
||||
# estrictamente necesario (el fix real de fondo se aplicó
|
||||
# 2026-08-16), pero se deja como red de contención a propósito.
|
||||
# No es un campo del base -- se agrega entero acá, es aditivo,
|
||||
# no pisa nada.
|
||||
affinity:
|
||||
podAffinity:
|
||||
requiredDuringSchedulingIgnoredDuringExecution:
|
||||
- labelSelector:
|
||||
matchLabels:
|
||||
app: commerce-postgres
|
||||
topologyKey: kubernetes.io/hostname
|
||||
|
||||
initContainers:
|
||||
- name: wait-for-postgres
|
||||
image: postgres:17-alpine
|
||||
imagePullPolicy: IfNotPresent
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- |
|
||||
until pg_isready -h postgres-svc -p 5432 -U "$POSTGRES_USER" -d "$POSTGRES_DB" -t 5; do
|
||||
echo "postgres no disponible aun, reintentando..."
|
||||
sleep 2
|
||||
done
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: commerce-secrets
|
||||
resources:
|
||||
requests:
|
||||
cpu: 25m
|
||||
memory: 32Mi
|
||||
limits:
|
||||
cpu: 100m
|
||||
memory: 64Mi
|
||||
|
||||
- name: migrations
|
||||
image: gitea.cruzcloud.net/devops/ecommerce-medusa:v1.0.112
|
||||
imagePullPolicy: IfNotPresent
|
||||
command:
|
||||
- node
|
||||
- node_modules/@medusajs/cli/dist/index.js
|
||||
- db:migrate
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: commerce-config
|
||||
- secretRef:
|
||||
name: commerce-secrets
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 256Mi
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 768Mi
|
||||
|
||||
containers:
|
||||
- name: app
|
||||
image: gitea.cruzcloud.net/devops/ecommerce-medusa:v1.0.112
|
||||
imagePullPolicy: IfNotPresent
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: commerce-config
|
||||
- secretRef:
|
||||
name: commerce-secrets
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: http
|
||||
initialDelaySeconds: 20
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 18
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: http
|
||||
initialDelaySeconds: 60
|
||||
periodSeconds: 20
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 6
|
||||
# Puerto 9000, no privilegiado -- a diferencia de
|
||||
# frontend/docs-portal, acá el drop: ALL del base no
|
||||
# necesita ningún add de vuelta. Medusa ya corre como
|
||||
# usuario "node" no-root (ver Dockerfile de commerce-backend).
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
readOnlyRootFilesystem: false
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
resources:
|
||||
requests:
|
||||
cpu: 150m
|
||||
memory: 384Mi
|
||||
limits:
|
||||
cpu: 750m
|
||||
memory: 1Gi
|
||||
@@ -0,0 +1,11 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: app-svc
|
||||
spec:
|
||||
selector:
|
||||
app: medusa
|
||||
ports:
|
||||
- name: http
|
||||
port: 9000
|
||||
targetPort: 9000
|
||||
Reference in new issue
Block a user