# services/planka/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: planka namespace: planka labels: app: planka spec: replicas: 1 selector: matchLabels: app: planka strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 maxUnavailable: 1 template: metadata: labels: app: planka spec: nodeSelector: node-role.kubernetes.io/worker: "true" affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: hardware operator: In values: ["rpi4", "rpi5"] securityContext: runAsUser: 1000 runAsGroup: 1000 fsGroup: 1000 fsGroupChangePolicy: OnRootMismatch containers: - name: planka image: ghcr.io/plankanban/planka:2.0.0-rc.4 ports: - name: http containerPort: 1337 env: - name: BASE_URL value: https://tasks.bstein.dev - name: TRUST_PROXY value: "true" envFrom: - secretRef: name: planka-db - secretRef: name: planka-secrets - secretRef: name: planka-oidc - secretRef: name: planka-smtp volumeMounts: - name: user-data mountPath: /app/public - name: user-data mountPath: /app/private - name: app-data mountPath: /app/.tmp readinessProbe: httpGet: path: / port: http initialDelaySeconds: 10 periodSeconds: 10 timeoutSeconds: 3 failureThreshold: 6 livenessProbe: httpGet: path: / port: http initialDelaySeconds: 30 periodSeconds: 20 timeoutSeconds: 3 failureThreshold: 6 resources: requests: cpu: 200m memory: 512Mi limits: cpu: "1" memory: 2Gi volumes: - name: user-data persistentVolumeClaim: claimName: planka-user-data - name: app-data persistentVolumeClaim: claimName: planka-app-data