# FlowerCore.DeviceManagement Web. # # Source repo is expected to ship FlowerCore.DeviceManagement.Web in a later # Sprint 9+ lane. This manifest is static-valid without requiring the image to # exist yet; import localhost/fc-devicemgmt-web: to all schedulable RKE2 # nodes before letting ArgoCD sync a live rollout. # # SCALED TO 0 — 2026-05-19 morning-routine cleanup. # The Web pod cannot start until TWO upstream gaps close: # 1. MySQL DB instance `flowercore_devicemgmt` (user `fc_devicemgmt`) is # provisioned via fc-mysql Manager. The cluster currently has ZERO # MySqlInstanceCrds and no `mysql.fc-mysql.svc:3306` Service, so the # deployment-web container env `FlowerCore__Database__Host=mysql.fc-mysql.svc` # points at nothing. Provision via the fc-mysql Manager UI/REST/MCP. # 2. 1Password vault item `IAmWorkin/FlowerCore DeviceManagement Runtime` # with 5 fields (DB-Password, mtls-ca.pem, mtls-client.crt, mtls-client.key, # mtls-chain.pem) — see apps/fc-devicemgmt/1password-item.yaml. Mint mTLS # from step-ca-agent ClusterIssuer per ADR-126; DB-Password must match the # password configured for the MySQL user. # Re-enable: change replicas back to 2 after both gaps close. The image tag # in this file (v20260512-cx5) MAY also need a refresh — it predates the # Sprint 34 Cl-3 operator fix; Web may have an analogous bug. apiVersion: apps/v1 kind: Deployment metadata: name: fc-devicemgmt-web namespace: fc-devicemgmt labels: app: fc-devicemgmt-web app.kubernetes.io/name: fc-devicemgmt-web app.kubernetes.io/component: web app.kubernetes.io/part-of: flowercore app.kubernetes.io/managed-by: argocd flowercore.io/tenant-id: system flowercore.io/created-by: bluejay-infra annotations: flowercore.io/traceability-standard: k8s-pod-ownership-and-traceability-standard spec: replicas: 0 revisionHistoryLimit: 3 selector: matchLabels: app: fc-devicemgmt-web template: metadata: labels: app: fc-devicemgmt-web app.kubernetes.io/name: fc-devicemgmt-web app.kubernetes.io/component: web app.kubernetes.io/part-of: flowercore app.kubernetes.io/managed-by: argocd flowercore.io/tenant-id: system flowercore.io/created-by: bluejay-infra annotations: prometheus.io/scrape: "true" prometheus.io/port: "8080" prometheus.io/path: "/metrics" flowercore.io/audit-trace-id: "runtime-activity-trace" spec: securityContext: fsGroup: 1654 fsGroupChangePolicy: OnRootMismatch containers: - name: web image: localhost/fc-devicemgmt-web:v20260512-cx5 imagePullPolicy: Never ports: - name: http containerPort: 8080 env: - name: ASPNETCORE_URLS value: "http://+:8080" - name: ASPNETCORE_ENVIRONMENT value: "Production" - name: DOTNET_SYSTEM_GLOBALIZATION_INVARIANT value: "false" - name: FlowerCore__Service__Name value: "FlowerCore.DeviceManagement.Web" - name: FlowerCore__DeviceManagement__DefaultTenantId value: "system" - name: FlowerCore__Database__Provider value: "MySql" - name: FlowerCore__Database__Host value: "mysql.fc-mysql.svc" - name: FlowerCore__Database__Database value: "flowercore_devicemgmt" - name: FlowerCore__Database__User value: "fc_devicemgmt" - name: FlowerCore__Database__Password valueFrom: secretKeyRef: name: fc-devicemgmt-runtime key: DB-Password - name: FlowerCore__DeviceManagement__AgentMtls__CaPath value: "/secrets/devicemgmt-mtls/mtls-ca.pem" - name: FlowerCore__DeviceManagement__AgentMtls__ClientCertificatePath value: "/secrets/devicemgmt-mtls/mtls-client.crt" - name: FlowerCore__DeviceManagement__AgentMtls__ClientKeyPath value: "/secrets/devicemgmt-mtls/mtls-client.key" - name: FlowerCore__EventBus__Redis__Configuration value: "redis.fc-redis.svc:6379" resources: requests: cpu: 100m memory: 256Mi limits: cpu: 1000m memory: 768Mi startupProbe: tcpSocket: port: 8080 initialDelaySeconds: 5 periodSeconds: 5 failureThreshold: 30 readinessProbe: tcpSocket: port: 8080 periodSeconds: 10 failureThreshold: 3 livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 30 periodSeconds: 30 failureThreshold: 3 securityContext: runAsNonRoot: true runAsUser: 1654 runAsGroup: 1654 allowPrivilegeEscalation: false readOnlyRootFilesystem: true capabilities: drop: - ALL volumeMounts: - name: tmp mountPath: /tmp - name: logs mountPath: /app/logs - name: devicemgmt-mtls mountPath: /secrets/devicemgmt-mtls readOnly: true volumes: - name: tmp emptyDir: {} - name: logs emptyDir: {} - name: devicemgmt-mtls secret: secretName: fc-devicemgmt-runtime defaultMode: 0400