# helm-rustical A Helm chart for Rustical WebDAV server. ## TL;DR ```bash helm install helm-rustical oci://git.roboces.dev/catalin/fukuops/helm-rustical --version 1.1.0 -n apps-roboces ``` ## Prerequisites - Kubernetes 1.19+ - Helm 3+ - A NFS storage class (default: `truenas-nfs-csi`) - An existing `Secret` containing: - `RUSTICAL_PASSWORD` - Password for WebDAV access ## Configuration All values are nested under the `rustical:` key. Example: ```yaml rustical: autoscaling: enabled: true minReplicas: 1 maxReplicas: 3 targetCPUUtilizationPercentage: 80 service: type: LoadBalancer port: 8001 config: oidc.name: Authentik oidc.issuer: https://auth.example.com/application/o/rustical/ persistence: enabled: true storageClass: "truenas-nfs-csi" size: 50Gi secret: existingSecretName: rustical ``` ## Values Reference | Key | Type | Default | Description | |-----|------|---------|-------------| | `rustical.replicaCount` | int | `1` | Number of replicas (when autoscaling disabled) | | `rustical.image.repository` | string | `ghcr.io/lennart-k/rustical` | Image repository | | `rustical.image.pullpolicy` | string | `Always` | Image pull policy | | `rustical.image.tag` | string | `.Chart.AppVersion` | Image tag | | `rustical.service.type` | string | `ClusterIP` | Service type | | `rustical.service.port` | int | `4000` | Service port | | `rustical.service.targetPort` | int | `4000` | Container port | | `rustical.ingress.enabled` | bool | `false` | Enable ingress | | `rustical.autoscaling.enabled` | bool | `false` | Enable HPA | | `rustical.autoscaling.minReplicas` | int | `1` | Minimum replicas | | `rustical.autoscaling.maxReplicas` | int | `3` | Maximum replicas | | `rustical.autoscaling.targetCPUUtilizationPercentage` | int | `80` | Target CPU utilization | | `rustical.autoscaling.targetMemoryUtilizationPercentage` | int | `80` | Target memory utilization | | `rustical.persistence.enabled` | bool | `true` | Enable persistence | | `rustical.persistence.storageClass` | string | `truenas-nfs-csi` | Storage class | | `rustical.persistence.accessMode` | string | `ReadWriteMany` | Access mode | | `rustical.persistence.size` | string | `50Gi` | PVC size | | `rustical.secret.existingSecretName` | string | `rustical` | Existing secret name | | `rustical.config` | object | `{}` | Config key-value pairs mapped to env vars | | `rustical.debug.enabled` | bool | `false` | Enable debug mode (adds init container for troubleshooting) | | `rustical.resources` | object | `{}` | Container resources | | `rustical.livenessProbe` | object | (see values.yaml) | Liveness probe | | `rustical.readinessProbe` | object | (see values.yaml) | Readiness probe | ## ConfigMap The `config:` section creates a ConfigMap that maps keys to environment variables. Keys are uppercased. ## Persistence The chart creates a PVC named `rustical-data`. The PVC uses the `truenas-nfs-csi` storage class by default with `ReadWriteMany` access mode. ## Secret Management The chart looks for an existing `Secret` with the name specified in `rustical.secret.existingSecretName`. Required secret keys: - `RUSTICAL_PASSWORD` - Password for WebDAV access ## Troubleshooting ### Debug Mode Enable debug mode to troubleshoot issues by adding an init container with a shell: ```yaml rustical: debug: enabled: true ``` This adds an `alpine:3.19` init container with `sleep infinity` that mounts all volumes and inherits env vars. You can exec into it to inspect the environment: ```bash kubectl exec -it -c debug -- sh ``` When debug mode is enabled, liveness and readiness probes are disabled to prevent restarts. ### Pod not starting ```bash kubectl get pvc -n apps-roboces -l app.kubernetes.io/name=helm-rustical ``` ### Check logs ```bash kubectl logs helm-rustical-0 -n apps-roboces ```