# FlowerCore.AiStation.Web GitOps adoption manifest. # # Authored from the already-live fc-aistation resources on 2026-06-04. # Keep the live image tag, Service ClusterIP, and PVC volumeName unchanged so # ArgoCD adopts in place instead of replacing the workload or data volume. --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: aistation-web-data namespace: fc-aistation labels: app.kubernetes.io/name: aistation-web app.kubernetes.io/part-of: flowercore app.kubernetes.io/managed-by: argocd argocd.argoproj.io/instance: infra-fc-aistation spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: longhorn volumeMode: Filesystem volumeName: pvc-27448d6f-6e66-42a7-a293-73dd8bbd6b3e --- apiVersion: apps/v1 kind: Deployment metadata: name: aistation-web namespace: fc-aistation labels: app.kubernetes.io/name: aistation-web app.kubernetes.io/part-of: flowercore app.kubernetes.io/managed-by: argocd argocd.argoproj.io/instance: infra-fc-aistation spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 3 selector: matchLabels: app.kubernetes.io/name: aistation-web strategy: type: Recreate template: metadata: annotations: prometheus.io/path: /metrics/prometheus prometheus.io/port: "5000" prometheus.io/scrape: "true" labels: app.kubernetes.io/name: aistation-web app.kubernetes.io/part-of: flowercore spec: containers: - envFrom: - configMapRef: name: aistation-web-config image: localhost/fc-aistation-web:v20260602-aistation-owned-deploy-fix2 imagePullPolicy: Never livenessProbe: failureThreshold: 3 httpGet: path: /healthz port: 5000 scheme: HTTP initialDelaySeconds: 30 periodSeconds: 30 successThreshold: 1 timeoutSeconds: 5 name: aistation-web ports: - containerPort: 5000 name: http protocol: TCP readinessProbe: failureThreshold: 6 httpGet: path: /healthz port: 5000 scheme: HTTP initialDelaySeconds: 10 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 5 resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /data name: data dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 volumes: - name: data persistentVolumeClaim: claimName: aistation-web-data --- apiVersion: v1 kind: Service metadata: name: aistation-web namespace: fc-aistation labels: app.kubernetes.io/name: aistation-web app.kubernetes.io/part-of: flowercore app.kubernetes.io/managed-by: argocd argocd.argoproj.io/instance: infra-fc-aistation spec: clusterIP: 10.43.211.127 clusterIPs: - 10.43.211.127 internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - name: http port: 80 protocol: TCP targetPort: 5000 selector: app.kubernetes.io/name: aistation-web sessionAffinity: None type: ClusterIP --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: aistation-web-tls namespace: fc-aistation labels: app.kubernetes.io/name: aistation-web-tls app.kubernetes.io/part-of: flowercore app.kubernetes.io/managed-by: argocd argocd.argoproj.io/instance: infra-fc-aistation spec: dnsNames: - aistation.iamworkin.lan issuerRef: kind: ClusterIssuer name: step-ca-acme secretName: aistation-web-tls --- apiVersion: traefik.io/v1alpha1 kind: IngressRoute metadata: name: aistation-web namespace: fc-aistation labels: app.kubernetes.io/name: aistation-web app.kubernetes.io/part-of: flowercore app.kubernetes.io/managed-by: argocd argocd.argoproj.io/instance: infra-fc-aistation spec: entryPoints: - websecure routes: - kind: Rule match: Host(`aistation.iamworkin.lan`) services: - name: aistation-web port: 80 tls: secretName: aistation-web-tls