- Added debug mode, structured ConfigMap pattern, and README to all charts - Migrated all flat-structure charts to hierarchical values under chartname key - Fixed templates to use correct hierarchical paths - Renamed helm-rustical key to rustical, added HPA support - Fixed ingress YAML parsing (oxicloud), nested env vars (rustical) - Pushed all normalized charts to OCI registry as 1.0.0+ and updated ArgoCD apps
5.4 KiB
5.4 KiB
miniflux
A Helm chart for Miniflux, a minimalist and open source RSS reader.
TL;DR
helm install miniflux oci://git.roboces.dev/catalin/fukuops/miniflux --version 1.0.1 -n apps-roboces
Prerequisites
- Kubernetes 1.19+
- Helm 3+
- An existing
Secretcontaining:DATABASE_URL- PostgreSQL connection stringADMIN_USERNAME- Admin username (optional if oauth2 is configured)ADMIN_PASSWORD- Admin password (optional if oauth2 is configured)
Configuration
All values are nested under the miniflux: key. Example:
miniflux:
service:
type: LoadBalancer
config:
database:
url: "postgres://user:pass@host:5432/miniflux"
general:
createAdmin: true
runMigrations: true
workerPoolSize: 1
pollingFrequency: 60
oauth2:
enabled: true
provider: oidc
redirectUrl: https://feeds.example.com/oauth2/oidc/callback
oidcDiscoveryEndpoint: https://auth.example.com/application/o/miniflux/
userCreation: true
metrics:
enabled: true
allowedNetworks: 10.0.0.0/8
secret:
existingSecretName: miniflux
Values Reference
Main Settings
| Key | Type | Default | Description |
|---|---|---|---|
miniflux.replicaCount |
int | 1 |
Number of replicas |
miniflux.image.repository |
string | miniflux/miniflux |
Image repository |
miniflux.image.pullpolicy |
string | always |
Image pull policy |
miniflux.image.tag |
string | .Chart.AppVersion |
Image tag |
miniflux.service.type |
string | ClusterIP |
Service type |
miniflux.service.port |
int | 8888 |
Service port |
miniflux.service.targetPort |
int | 8080 |
Container port |
miniflux.ingress.enabled |
bool | false |
Enable ingress |
miniflux.resources |
object | {} |
Container resources |
miniflux.livenessProbe |
object | {} |
Liveness probe |
miniflux.readinessProbe |
object | {} |
Readiness probe |
miniflux.secret.existingSecretName |
string | "" |
Existing secret name |
miniflux.debug.enabled |
bool | false |
Enable debug mode (adds init container for troubleshooting) |
miniflux.nodeSelector |
object | {} |
Node selector |
miniflux.tolerations |
array | [] |
Tolerations |
miniflux.affinity |
object | {} |
Affinity rules |
miniflux.autoscaling.enabled |
bool | false |
Enable autoscaling |
miniflux.autoscaling.minReplicas |
int | 1 |
Minimum replicas |
miniflux.autoscaling.maxReplicas |
int | 3 |
Maximum replicas |
miniflux.autoscaling.targetCPUUtilizationPercentage |
int | 80 |
Target CPU utilization for HPA |
miniflux.autoscaling.targetMemoryUtilizationPercentage |
int | 80 |
Target memory utilization for HPA |
Database Configuration
| Key | Type | Default | Description |
|---|---|---|---|
miniflux.config.database.url |
string | "" |
PostgreSQL connection URL |
General Configuration
| Key | Type | Default | Description |
|---|---|---|---|
miniflux.config.general.createAdmin |
bool | false |
Create admin user on startup |
miniflux.config.general.runMigrations |
bool | false |
Run database migrations |
miniflux.config.general.workerPoolSize |
int | 1 |
Number of worker threads |
miniflux.config.general.pollingFrequency |
int | 60 |
Feed refresh interval (minutes) |
miniflux.config.general.batchSize |
int | 10 |
Number of feeds to refresh per batch |
OAuth2 Configuration
| Key | Type | Default | Description |
|---|---|---|---|
miniflux.config.oauth2.enabled |
bool | false |
Enable OAuth2 authentication |
miniflux.config.oauth2.provider |
string | oidc |
OAuth2 provider |
miniflux.config.oauth2.redirectUrl |
string | "" |
OAuth redirect URL |
miniflux.config.oauth2.oidcDiscoveryEndpoint |
string | "" |
OIDC discovery endpoint URL |
miniflux.config.oauth2.userCreation |
bool | false |
Allow OAuth users to create accounts |
Metrics Configuration
| Key | Type | Default | Description |
|---|---|---|---|
miniflux.config.metrics.enabled |
bool | false |
Enable metrics endpoint |
miniflux.config.metrics.allowedNetworks |
string | "" |
Networks allowed to access metrics (CIDR) |
YouTube Configuration
| Key | Type | Default | Description |
|---|---|---|---|
miniflux.config.youtube.fetchWatchTime |
bool | false |
Fetch YouTube watch time data |
Secret Management
The chart looks for an existing Secret with the name specified in miniflux.secret.existingSecretName. Required secret keys:
DATABASE_URL- PostgreSQL connection stringADMIN_USERNAME- Admin username (ifconfig.general.createAdmin=true)ADMIN_PASSWORD- Admin password (ifconfig.general.createAdmin=true)
Troubleshooting
Debug Mode
Enable debug mode to troubleshoot issues by adding an init container with a shell:
miniflux:
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:
kubectl exec -it <pod-name> -c debug -- sh
When debug mode is enabled, liveness and readiness probes are disabled to prevent restarts.
Check logs
kubectl logs miniflux-0 -n apps-roboces
Verify configmap
kubectl get configmap miniflux-config -n apps-roboces -o yaml