# MinIO — Ephemeral object storage for integration tests # Namespace is substituted at runtime via envsubst # No persistence — uses emptyDir # Credentials: minioadmin/minioadmin (hardcoded for ephemeral sandbox) # Bucket creation is handled by seed_minio.py (no separate init job needed) --- apiVersion: apps/v1 kind: Deployment metadata: name: minio namespace: ${NAMESPACE} labels: app: minio tier: infra app.kubernetes.io/part-of: stonks-oracle spec: replicas: 1 selector: matchLabels: app: minio template: metadata: labels: app: minio tier: infra spec: automountServiceAccountToken: false imagePullSecrets: - name: dockerhub-credentials securityContext: runAsNonRoot: true runAsUser: 1000 runAsGroup: 1000 fsGroup: 1000 seccompProfile: type: RuntimeDefault containers: - name: minio image: minio/minio:latest imagePullPolicy: IfNotPresent args: ["server", "/data"] ports: - containerPort: 9000 protocol: TCP - containerPort: 9001 protocol: TCP env: - name: MINIO_ROOT_USER value: "minioadmin" - name: MINIO_ROOT_PASSWORD value: "minioadmin" securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] resources: requests: cpu: 100m memory: 256Mi limits: cpu: 500m memory: 512Mi readinessProbe: httpGet: path: /minio/health/ready port: 9000 initialDelaySeconds: 5 periodSeconds: 5 timeoutSeconds: 3 failureThreshold: 6 livenessProbe: httpGet: path: /minio/health/live port: 9000 initialDelaySeconds: 15 periodSeconds: 10 timeoutSeconds: 3 failureThreshold: 3 volumeMounts: - name: data mountPath: /data volumes: - name: data emptyDir: sizeLimit: 1Gi --- apiVersion: v1 kind: Service metadata: name: minio namespace: ${NAMESPACE} labels: app: minio tier: infra app.kubernetes.io/part-of: stonks-oracle spec: selector: app: minio ports: - port: 9000 targetPort: 9000 protocol: TCP