You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

149 lines
12 KiB
Markdown

# Powerdns
PowerDNS with Mariadb and PowerDNS-Admin Helm to easy PowerDNS deploy on Kubernetes
[PowerDNS](https://www.powerdns.com/) is an open source DNS Authoritative Server (answer questions about domains it knows about, but will not go out on the net to resolve queries about other domains) software.
## TL;DR;
Supported for Helm v3
```console
helm repo add aecharts https://raw.githubusercontent.com/aescanero/helm-charts/master/
helm repo update
helm install aecharts/powerdns
```
## Introduction
This chart bootstraps a [pschiffe/docker-pdns](https://github.com/pschiffe/docker-pdns) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
It also packages:
- [aescanero/docker-powerdns-admin-alpine](https://github.com/aescanero/docker-powerdns-admin-alpine) based in [ngoduykhanh/PowerDNS-Admin](https://github.com/ngoduykhanh/PowerDNS-Admin) which provide a dashboard for PowerDNS management.
- [mariadb](https://www.mariadb.org) which is required for bootstrapping a MariaDB deployment for the database requirements of PowerDNS and PowerDNS-Admin applications.
## Prerequisites
- Kubernetes 1.8+ with Beta APIs enabled
- PV provisioner support in the underlying infrastructure (Optional)
## Installing the Chart
To install the chart with the release name `my-release`:
```console
helm repo add aecharts https://raw.githubusercontent.com/aescanero/helm-charts/master/
helm repo update
helm install my-release aecharts/powerdns
```
The command deploys PowerDNS on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation.
> **Tip**: List all releases using `helm list`
## Uninstalling the Chart
To uninstall/delete the `my-release` deployment:
```console
$ helm delete my-release
```
The command removes all the Kubernetes components associated with the chart and deletes the release.
## Configuration
The following table lists the configurable parameters of the PowerDNS chart and their default values.
| Parameter | Description | Default |
|-----------------------------------|--------------------------------------------|---------------------------------------------------------|
| `powerdns.enabled` | Deploy the DNS Server packaged with Helm | `true` |
| `powerdns.service.dns.tcp.enabled`| Enable DNS (TCP) Service | `false` |
| `powerdns.service.dns.tcp.port` | Port of the DNS (TCP) Service | `53` |
| `powerdns.service.dns.tcp.type` | Class of the Kubernetes DNS (TCP) Service | `LoadBalancer` |
| `powerdns.service.dns.tcp.loadBalancerIP` | Statically assign LoadBalancerIP (UDP) | `` |
| `powerdns.service.dns.tcp.annotations` | Annotations for service (TCP) | `` |
| `powerdns.service.dns.udp.enabled`| Enable DNS (UDP) Service | `true` |
| `powerdns.service.dns.udp.port` | Port of the DNS (UDP) Service | `53` |
| `powerdns.service.dns.udp.type` | Class of the Kubernetes DNS (UDP) Service | `LoadBalancer` |
| `powerdns.service.dns.udp.loadBalancerIP` | Statically assign LoadBalancerIP (TCP) | `` |
| `powerdns.service.dns.udp.annotations` | Annotations for service (UDP) | `` |
| `powerdns.service.api.type` | Class of the Kubernetes PowerDNSAPI Service| `ClusterIP` |
| `powerdns.service.api.port` | Port of the DNS Service | `53` |
| `powerdns.image.repository` | PowerDNS image name | `pschiffe/pdns-mysql` |
| `powerdns.image.tag` | PowerDNS image tag | `alpine` |
| `powerdns.image.pullPolicy` | Image pull policy | `IfNotPresent` |
| `powerdns.domain` | Automatically create a domain | `external.local` |
| `powerdns.master` | Deploy PowerDNS as master | `yes` |
| `powerdns.api` | Enable API for Management (need webserver) | `yes` |
| `powerdns.webserver` | Enable web server to publish API | `yes` |
| `powerdns.webserver_address` | IP where the web server is published | `0.0.0.0` |
| `powerdns.webserver_allow_from` | Allow access to web server only from | `0.0.0.0/0` |
| `powerdns.version_string` | Version to designate the DNS Server | `anonymous` |
| `powerdns.default_ttl` | time-to-live of the DNS resources | `1500` |
| `powerdns.soa_minimum_ttl` | Minimal time-to-live of SOA | `1200` |
| `powerdns.default_soa_name` | Name to designate the zone | `ns1.external.local` |
| `powerdns.mysql_host` | Host of the external database | `127.0.0.1` |
| `powerdns.mysql_database` | Name of the external database | `powerdns` |
| `powerdns.mysql_user` | User of the external database | `powerdns` |
| `powerdns.mysql_rootpass` | Password of the root user of external BD | `nil` |
| `powerdns.mysql_pass` | Password of the user | `nil` |
| `powerdns.innodb_read_committed` | Set powerdns option gmysql-innodb-read-commited | `no` |
| `powerdns.resources` | CPU/Memory resource requests/limits | Memory: `512Mi`, CPU: `300m` |
| `mariadb.enabled` | Deploy the Database packaged with Helm | `true` |
| `mariadb.image.repository` | MariaDB image name | `mariadb` |
| `mariadb.image.tag` | MariaDB image tag | `latest` |
| `mariadb.image.pullPolicy` | Image pull policy | `IfNotPresent` |
| `mariadb.mysql_rootpass` | Password of the root user of internal BD | `nil` |
| `mariadb.mysql_pass` | Password of the user | `nil` |
| `mariadb.persistence.enabled` | Enable persistence using PVC | `true` |
| `mariadb.persistence.storageClass`| PVC Storage Class for MariaDB volume | `nil` |
| `mariadb.persistence.accessMode` | PVC Access Mode for MariaDB volume | `ReadWriteOnce` |
| `mariadb.persistence.size` | PVC Storage Request for MariaDB volume | `1Gi` |
| `mariadb.resources` | CPU/Memory resource requests/limits | Memory: `512Mi`, CPU: `300m` |
| `mariadb.args` | mysqld arguments | `--bind-address=127.0.0.1 --innodb_use_native_aio=0 --innodb_flush_method=fsync` |
| `powerdnsadmin.enabled` | Deploy the Dashboard packaged with Helm | `true` |
| `powerdnsadmin.service.type` | Class of Kubernetes PowerDNS-Admin Service | `LoadBalancer` |
| `powerdnsadmin.service.port` | Port of the PowerDNS-Admin Service | `9191` |
| `powerdnsadmin.image.repository` | PowerDNS-Admin image name | `aescanero/powerdns-admin` |
| `powerdnsadmin.image.tag` | PowerDNS-Admin image tag | `latest` |
| `powerdnsadmin.image.pullPolicy` | Image pull policy | `IfNotPresent` |
| `powerdnsadmin.proto` | Protocol of PowerDNS-Admin Service | `http` |
| `powerdnsadmin.powerdns_host` | Where is PowerDNS Service | `127.0.0.1` |
| `powerdnsadmin.powerdns_port` | Port of the PowerDNS API Service | `8081` |
| `powerdnsadmin.mysql_host` | Host of the external database | `127.0.0.1` |
| `powerdnsadmin.mysql_database` | Name of the external database | `powerdns` |
| `powerdnsadmin.mysql_user` | User of the external database | `powerdns` |
| `powerdnsadmin.mysql_pass` | Password of the user | `nil` |
| `powerdnsadmin.resources` | CPU/Memory resource requests/limits | Memory: `512Mi`, CPU: `300m` |
| `powerdnsadmin.ingress.enabled` | Deploy the Dashboard with Ingress | `false` |
| `powerdnsadmin.ingress.class` | Class of Ingress | `traefik` |
| `powerdnsadmin.ingress.hostname` | Hostname without domain part | `powerdns-admin` |
| `powerdnsadmin.ingress.path` | Path within the url structure | `/` |
The above parameters map to the env variables defined in each container. For more information please refer to each image documentation.
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
```console
helm repo add aecharts https://raw.githubusercontent.com/aescanero/helm-charts/master/
helm repo update
helm install powerdns-release --set domain=disasterproject.com aecharts/powerdns
```
The above command sets the domain managed by PowerDNS to `disasterproject.com`.
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
```console
helm repo add aecharts https://raw.githubusercontent.com/aescanero/helm-charts/master/
helm repo update
helm install powerdns-release -f values.yaml aecharts/powerdns
```
## Persistence
The [mariadb](https://www.mariadb.org) image stores the Database at `/var/lib/mysql` path of the container.
Persistent Volume Claims are used to keep the data across deployments.