Oleg Atamanenko
Recently I wrote how you can install Kubernetes on Raspberry Pi.
In this post, we will install Pi-Hole on Kubernetes.
Up to recent versions of Pi-Hole Docker images you had to take care of the correct architecture (and as a result correct docker tag to use).
Now they use multi-arch docker image, so you can use docker image pihole/pihole:<version>
which will work both on amd64
and arm
architectures.
We will use Kubelet’s ability to run static pods.
We need to create 2 folders on the host, these folders would keep Pi-Hole data.
mkdir -p /data/pihole/{etc,dnsmasq.d}
chmod go+r /data/pihole/{etc,dnsmasq.d}
Copy the manifest and make the following changes:
TZ
)WEBPASSWORD
)pihole.yaml
in /etc/kubernetes/manifests
Complete manifest:
apiVersion: v1
kind: Pod
metadata:
name: pihole
namespace: pihole
spec:
hostNetwork: true
dnsPolicy: "None"
dnsConfig:
nameservers:
# upstream DNS used by pihole.
- 1.1.1.1
containers:
- name: pihole
# https://hub.docker.com/r/pihole/pihole/tags
image: pihole/pihole:2021.10
imagePullPolicy: IfNotPresent
env:
- name: TZ
value: "America/Los_Angeles"
- name: WEBPASSWORD
value: <CUSTOMIZE>
securityContext:
privileged: true
ports:
- containerPort: 53
protocol: TCP
- containerPort: 53
protocol: UDP
- containerPort: 67
protocol: UDP
- containerPort: 80
protocol: TCP
- containerPort: 443
protocol: TCP
volumeMounts:
- name: etc
mountPath: /etc/pihole
- name: dnsmasq
mountPath: /etc/dnsmasq.d
resources:
requests:
memory: 128Mi
cpu: 100m
limits:
memory: 2Gi
cpu: 1
volumes:
- name: etc
hostPath:
path: /data/pihole/etc
type: Directory
- name: dnsmasq
hostPath:
path: /data/pihole/dnsmasq.d
type: Directory