Skip to content

Getting Started

Prerequisites

For detailed prerequisites and compatibility information, see the Stability and Support documentation.

Installation

Option 1: Helm Installation

Check out the PowerDNS Operator Helm chart repository here.

# Add the Helm repository
helm repo add powerdns-operator https://powerdns-operator.github.io/PowerDNS-Operator-helm-chart
helm repo update

# Install the latest operator release
helm install powerdns-operator powerdns-operator/powerdns-operator \
  --namespace powerdns-operator-system \
  --create-namespace \
  --set api.url=https://your-powerdns-server:8081 \
  --set credentials.data.PDNS_API_KEY=you-api-key

Option 2: Direct Installation

Custom Configuration

The bundle installation method installs the operator with default configuration. If you need to customize the operator configuration (e.g., modify resource limits, add sidecars, or change deployment settings), you'll need to patch the bundle using tools like Kustomize.

# Create namespace
kubectl create namespace powerdns-operator-system

# Create PowerDNS configuration secret
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: powerdns-operator-manager
  namespace: powerdns-operator-system
type: Opaque
stringData:
  PDNS_API_URL: https://your-powerdns-server:8081
  PDNS_API_KEY: your-api-key
  PDNS_API_VHOST: localhost
EOF

# Install the operator
kubectl apply -f https://github.com/powerdns-operator/PowerDNS-Operator/releases/latest/download/bundle.yaml

# Or, install specific version of the operator - replace v0.0.0 with your desired version
kubectl apply -f https://github.com/powerdns-operator/PowerDNS-Operator/releases/download/v0.0.0/bundle.yaml

Configuration

Environment Variables

Variable Description Required Default
PDNS_API_URL PowerDNS API server URL Yes None
PDNS_API_KEY PowerDNS API authentication key Yes None
PDNS_API_VHOST PowerDNS virtual host No localhost
PDNS_API_TIMEOUT PowerDNS API request timeout in seconds No 10

Verification

# Check operator status
kubectl get pods -n powerdns-operator-system

# Verify CRDs are installed
kubectl get crd | grep dns.cav.enablers.ob

# Test with a simple zone
kubectl apply -f - <<EOF
apiVersion: dns.cav.enablers.ob/v1alpha2
kind: ClusterZone
metadata:
  name: test.example.com
spec:
  kind: Native
  nameservers:
    - ns1.test.example.com
    - ns2.test.example.com
EOF