HA core has migrated the http: config (server_port, ip_ban_enabled, login_attempts_threshold, use_x_forwarded_for, trusted_proxies) out of configuration.yaml, causing "already been migrated and is now being ignored" warnings. Disable http.enabled by default on home-assistant-dev, mark the section deprecated in both charts, and document removal planned for appVersion 2027.7. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
4.3 KiB
Home Assistant Helm Chart
A Helm chart for Home Assistant with PostgreSQL recorder support, managed secrets, and Kubernetes-native logging.
Features
- PostgreSQL Recorder: Optional PostgreSQL backend for HA recorder with automated database and user creation via
db-initjob. - Managed Secrets: HA
secrets.yamlgenerated from Kubernetes Secrets (works with sealed-secrets). - Kubernetes-native Logging: Log file disabled, all logs go to stdout (
kubectl logs). - Backups: Integrated CronJob for automated PostgreSQL backups with configurable retention and node pinning.
- Ingress: Dictionary-based multi-ingress support (e.g. external HTTPS + internal LAN).
- Host Network: Enabled by default for mDNS/HomeKit discovery.
- Persistence: Config and media volumes with hostPath or PVC support.
Installation
1. Create Secrets
PostgreSQL secret (if using postgres recorder):
apiVersion: v1
kind: Secret
metadata:
name: ha-secret
stringData:
HA_POSTGRESQL_PASSWORD: "<password>"
POSTGRES_ADMIN_PASSWORD: "<admin-password>"
HA secrets (optional, for managing HA secrets.yaml):
apiVersion: v1
kind: Secret
metadata:
name: ha-ha-secrets
stringData:
api_key: "some-api-key"
webhook_token: "some-token"
2. Configure Values
Review the values.yaml and create your override file.
3. Install
helm install my-ha ./home-assistant -f my-values.yaml
Configuration Reference
| Parameter | Description | Default |
|---|---|---|
image.repository |
HA image repository | ghcr.io/home-assistant/home-assistant |
image.tag |
HA image tag | (Chart appVersion) |
hostNetwork |
Enable host networking | true |
timezone |
Container timezone | Europe/Kyiv |
homekit.enabled |
Expose HomeKit port (21063) | true |
persistence.config.type |
Config volume type (hostPath or pvc) |
hostPath |
persistence.media.enabled |
Enable media volume | true |
haSecrets.enabled |
Manage HA secrets.yaml from K8s Secret | false |
haSecrets.existingSecret |
K8s Secret name for HA secrets | "" |
postgres.enabled |
Enable PostgreSQL recorder | false |
postgres.host |
PostgreSQL host | postgres-tcp.postgres.svc.cluster.local |
postgres.db |
Database name | homeassistant |
postgres.user |
Database user | ha |
postgres.existingSecret |
K8s Secret with DB credentials | "" |
dbInit.enabled |
Enable database initialization job | false |
backup.enabled |
Enable automated PostgreSQL backups | false |
backup.node |
Pin backup CronJob to specific node | "" |
http.enabled |
Deprecated, see below. Generate http.yaml and include it from configuration.yaml |
false |
For detailed configuration, see the values.yaml.
Deprecations
http: config section (removal planned for appVersion 2027.7)
HA core has migrated the entire http: config section — server_port, ip_ban_enabled,
login_attempts_threshold, use_x_forwarded_for, and trusted_proxies — out of
configuration.yaml. Setting http.enabled: true makes HA log:
The HTTP configuration in configuration.yaml has already been migrated and is now being ignored. Please remove the http: block from your configuration.yaml.
Leave http.enabled: false (the default). The init-http init container, the http: values
block, and this section will be removed from the chart once appVersion reaches 2027.7.
Architecture
Init Containers
- init-config (always): Cleans up old log files from PVC.
- init-secrets (when
haSecrets.enabled): Generates/config/secrets.yamlfrom K8s Secret key-value pairs. - init-recorder (when
postgres.enabled): Generates/config/recorder.yamlwith PostgreSQL connection string and appendsrecorder: !include recorder.yamltoconfiguration.yaml. - init-http (when
http.enabled, deprecated, see Deprecations): Generates/config/http.yamland appendshttp: !include http.yamltoconfiguration.yaml.
Logging
The container patches the HA s6-overlay run script to pass --log-file /dev/null, disabling file-based logging. All logs go to stdout and are accessible via kubectl logs.