11# powerdns-recursor
22
3- ![ Version: 0.2.4 ] ( https://img.shields.io/badge/Version-0.2.4 -informational?style=flat-square ) ![ Type: application] ( https://img.shields.io/badge/Type-application-informational?style=flat-square ) ![ AppVersion: 5.4.0] ( https://img.shields.io/badge/AppVersion-5.4.0-informational?style=flat-square )
3+ ![ Version: 0.3.0 ] ( https://img.shields.io/badge/Version-0.3.0 -informational?style=flat-square ) ![ Type: application] ( https://img.shields.io/badge/Type-application-informational?style=flat-square ) ![ AppVersion: 5.4.0] ( https://img.shields.io/badge/AppVersion-5.4.0-informational?style=flat-square )
44
55Helm chart for deploying PowerDNS Recursor on Kubernetes
66
@@ -16,8 +16,15 @@ Helm chart for deploying PowerDNS Recursor on Kubernetes
1616
1717| Key | Type | Default | Description |
1818| -----| ------| ---------| -------------|
19- | replicaCount | int | ` 1 ` | Number of pod replicas. |
20- | revisionHistoryLimit | int | ` 10 ` | Number of old ReplicaSets to retain. |
19+ | replicaCount | int | ` 1 ` | Number of pod replicas. Ignored in DaemonSet mode. |
20+ | revisionHistoryLimit | int | ` 10 ` | Number of old ReplicaSets to retain. Used by both Deployment and DaemonSet histories. |
21+ | workload | object | ` {"daemonSet":{"minReadySeconds":5,"updateStrategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0},"type":"RollingUpdate"}},"type":"Deployment"} ` | Workload configuration. |
22+ | workload.type | string | ` "Deployment" ` | Workload kind. Supported values: Deployment, DaemonSet. |
23+ | workload.daemonSet.updateStrategy | object | ` {"rollingUpdate":{"maxSurge":1,"maxUnavailable":0},"type":"RollingUpdate"} ` | DaemonSet-only settings. Ignored when workload.type=Deployment. |
24+ | workload.daemonSet.updateStrategy.type | string | ` "RollingUpdate" ` | DaemonSet update strategy type. |
25+ | workload.daemonSet.updateStrategy.rollingUpdate.maxUnavailable | int | ` 0 ` | Keep the existing pod on a node until a surged replacement is ready. |
26+ | workload.daemonSet.updateStrategy.rollingUpdate.maxSurge | int | ` 1 ` | Allow one extra pod per node during rolling updates to avoid local DNS gaps. |
27+ | workload.daemonSet.minReadySeconds | int | ` 5 ` | Time a new DaemonSet pod must stay ready before it is considered available. |
2128| imagePullSecrets | list | ` [] ` | Image pull secrets. |
2229| nameOverride | string | ` "" ` | Partially override generated resource names. |
2330| fullnameOverride | string | ` "" ` | Fully override generated resource names. |
@@ -36,15 +43,16 @@ Helm chart for deploying PowerDNS Recursor on Kubernetes
3643| securityContext.runAsGroup | int | ` 953 ` | Unix group id. |
3744| priorityClassName | string | ` "" ` | Optional priority class for pods. |
3845| podAntiAffinity | object | ` {"topologyKey":"kubernetes.io/hostname","type":"soft"} ` | Pod anti-affinity shortcut (used when affinity is empty). |
39- | podAntiAffinity.type | string | ` "soft" ` | "soft", "hard" or "disabled". |
46+ | podAntiAffinity.type | string | ` "soft" ` | "soft", "hard" or "disabled". Ignored in DaemonSet mode. |
4047| podAntiAffinity.topologyKey | string | ` "kubernetes.io/hostname" ` | Topology key used by anti-affinity. |
4148| affinity | object | ` {} ` | Native affinity rules. If set, this overrides podAntiAffinity. |
4249| nodeSelector | object | ` {} ` | Node selector for scheduling. |
4350| tolerations | list | ` [] ` | Tolerations for scheduling. |
44- | podDisruptionBudget | object | ` {} ` | PodDisruptionBudget spec snippet. Example: { maxUnavailable: 1 } |
45- | service | object | ` {"annotations":{},"clusterIP":"","headless":{"annotations":{},"enabled":false,"includeDnsPorts":true,"publishNotReadyAddresses":false},"loadBalancerIP":"","loadBalancerSourceRanges":[],"port":53,"type":"ClusterIP"} ` | Service configuration. |
51+ | podDisruptionBudget | object | ` {} ` | PodDisruptionBudget spec snippet. Example: { maxUnavailable: 1 }. Ignored in DaemonSet mode. |
52+ | service | object | ` {"annotations":{},"clusterIP":"","headless":{"annotations":{},"enabled":false,"includeDnsPorts":true,"publishNotReadyAddresses":false},"internalTrafficPolicy":""," loadBalancerIP":"","loadBalancerSourceRanges":[],"port":53,"type":"ClusterIP"} ` | Service configuration. |
4653| service.type | string | ` "ClusterIP" ` | Service type. |
4754| service.clusterIP | string | ` "" ` | Optional fixed ClusterIP for the primary Service. |
55+ | service.internalTrafficPolicy | string | ` "" ` | Service internal traffic policy. When empty, DaemonSet mode defaults to "Local". |
4856| service.port | int | ` 53 ` | DNS service port (TCP/UDP). |
4957| service.annotations | object | ` {} ` | Service annotations. |
5058| service.loadBalancerIP | string | ` "" ` | Optional fixed LoadBalancer IP. |
@@ -95,14 +103,14 @@ Helm chart for deploying PowerDNS Recursor on Kubernetes
95103| probes.readiness.periodSeconds | int | ` 5 ` | Probe period. |
96104| probes.readiness.timeoutSeconds | int | ` 3 ` | Probe timeout. |
97105| probes.readiness.failureThreshold | int | ` 3 ` | Failure threshold. |
98- | pdns | object | ` {"api":{"enabled":false,"port":8082},"config":{"dnssec":{"validation":"process"},"incoming":{"listen":["0.0.0.0"],"port":5353},"logging":{"loglevel":6,"quiet":true},"outgoing":{"source_address":["0.0.0.0"]},"recordcache":{"refresh_on_ttl_perc":10},"recursor":{"config_dir":"/etc/powerdns","setgid":"pdns","setuid":"pdns","socket_mode":"660"},"webservice":{"webserver":" false" }},"lua":{"enabled":false,"script":"zoneToCache(\".\", \"url\", \"https://www.internic.net/domain/root.zone\", { refreshPeriod = 86400 })\n"},"metrics":{"enabled":false},"port":5353} ` | PowerDNS recursor runtime configuration. |
106+ | pdns | object | ` {"api":{"enabled":false,"port":8082},"config":{"dnssec":{"validation":"process"},"incoming":{"listen":["0.0.0.0"],"port":5353},"logging":{"loglevel":6,"quiet":true},"outgoing":{"source_address":["0.0.0.0"]},"recordcache":{"refresh_on_ttl_perc":10},"recursor":{"config_dir":"/etc/powerdns","setgid":"pdns","setuid":"pdns","socket_mode":"660"},"webservice":{"webserver":false}},"lua":{"enabled":false,"script":"zoneToCache(\".\", \"url\", \"https://www.internic.net/domain/root.zone\", { refreshPeriod = 86400 })\n"},"metrics":{"enabled":false},"port":5353} ` | PowerDNS recursor runtime configuration. |
99107| pdns.port | int | ` 5353 ` | Container DNS port. |
100108| pdns.api | object | ` {"enabled":false,"port":8082} ` | API endpoint settings. |
101109| pdns.api.enabled | bool | ` false ` | Expose API port through the Service and container. |
102110| pdns.api.port | int | ` 8082 ` | API TCP port. |
103111| pdns.lua | object | ` {"enabled":false,"script":"zoneToCache(\".\", \"url\", \"https://www.internic.net/domain/root.zone\", { refreshPeriod = 86400 })\n"} ` | Optional Lua config file support. |
104112| pdns.lua.enabled | bool | ` false ` | Create additional Lua ConfigMap and mount recursor.lua. |
105113| pdns.lua.script | string | ` "zoneToCache(\".\", \"url\", \"https://www.internic.net/domain/root.zone\", { refreshPeriod = 86400 })\n" ` | Lua script content written to /etc/powerdns/recursor.lua. |
106- | pdns.config | object | ` {"dnssec":{"validation":"process"},"incoming":{"listen":["0.0.0.0"],"port":5353},"logging":{"loglevel":6,"quiet":true},"outgoing":{"source_address":["0.0.0.0"]},"recordcache":{"refresh_on_ttl_perc":10},"recursor":{"config_dir":"/etc/powerdns","setgid":"pdns","setuid":"pdns","socket_mode":"660"},"webservice":{"webserver":" false" }} ` | Rendered directly into recursor.yml. |
114+ | pdns.config | object | ` {"dnssec":{"validation":"process"},"incoming":{"listen":["0.0.0.0"],"port":5353},"logging":{"loglevel":6,"quiet":true},"outgoing":{"source_address":["0.0.0.0"]},"recordcache":{"refresh_on_ttl_perc":10},"recursor":{"config_dir":"/etc/powerdns","setgid":"pdns","setuid":"pdns","socket_mode":"660"},"webservice":{"webserver":false}} ` | Rendered directly into recursor.yml. |
107115| pdns.config.recordcache.refresh_on_ttl_perc | int | ` 10 ` | Refresh cache entries shortly before TTL expiry to reduce miss spikes. |
108116| pdns.metrics | object | ` {"enabled":false} ` | Legacy compatibility block. |
0 commit comments