diff --git a/manifests/_apps/grist.yaml b/manifests/_apps/grist.yaml new file mode 100644 index 0000000..6408ba9 --- /dev/null +++ b/manifests/_apps/grist.yaml @@ -0,0 +1,29 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: cluster-fun-grist + namespace: argocd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: cluster.fun + destination: + namespace: grist + name: cluster-fun (v2) + source: + path: manifests/grist + repoURL: "https://git.cluster.fun/AverageMarcus/cluster.fun.git" + targetRevision: HEAD + syncPolicy: + automated: {} + syncOptions: + - CreateNamespace=true + ignoreDifferences: + - kind: Secret + jsonPointers: + - /data + - group: apps + kind: Deployment + jqPathExpressions: + - .spec.template.spec.containers[]?.image +--- diff --git a/manifests/grist/grist.yaml b/manifests/grist/grist.yaml new file mode 100644 index 0000000..43959fc --- /dev/null +++ b/manifests/grist/grist.yaml @@ -0,0 +1,151 @@ +apiVersion: v1 +kind: Secret +metadata: + name: grist + namespace: grist + labels: + app.kubernetes.io/name: grist + annotations: + kube-1password: sgx6juca4jtecyynxzveeljq7y + kube-1password/vault: Kubernetes + kube-1password/secret-text-parse: "true" +type: Opaque +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: grist + namespace: grist + labels: + app.kubernetes.io/name: grist +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: grist-data + namespace: grist + labels: + app.kubernetes.io/name: grist +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: "1Gi" + storageClassName: "sbs-default-retain" +--- +apiVersion: v1 +kind: Service +metadata: + name: grist + namespace: grist + labels: + app.kubernetes.io/name: grist +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: 8484 + protocol: TCP + name: http + selector: + app.kubernetes.io/name: grist +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: grist + namespace: grist + labels: + app.kubernetes.io/name: grist +spec: + selector: + matchLabels: + app.kubernetes.io/name: grist + template: + metadata: + labels: + app.kubernetes.io/name: grist + spec: + serviceAccountName: grist + containers: + - name: grist + image: gristlabs/grist-oss:1.1.18 + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 8484 + protocol: TCP + livenessProbe: + tcpSocket: + port: http + readinessProbe: + tcpSocket: + port: http + env: + - name: APP_HOME_URL + value: https://grist.cluster.fun + - name: APP_DOC_URL + value: https://grist.cluster.fun + - name: GRIST_SINGLE_ORG + value: default + - name: GRIST_TELEMETRY_LEVEL + value: "off" + - naem: ALLOWED_WEBHOOK_DOMAINS + value: "tank.tank.svc,matrix.cluster.fun" + - name: GRIST_ANON_PLAYGROUND + value: "false" + envFrom: + - secretRef: + name: grist + volumeMounts: + - name: data + mountPath: /persist + volumes: + - name: data + persistentVolumeClaim: + claimName: grist-data +--- +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: grist + namespace: grist + labels: + app.kubernetes.io/name: grist +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: grist + minReplicas: 1 + maxReplicas: 3 + metrics: + - type: Resource + resource: + name: cpu + targetAverageUtilization: 80 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: grist + namespace: grist + labels: + app.kubernetes.io/name: grist +spec: + ingressClassName: nginx + tls: + - hosts: + - grist.cluster.fun + rules: + - host: "grist.cluster.fun" + http: + paths: + - path: / + pathType: ImplementationSpecific + backend: + service: + name: grist + port: + number: 80