Last updated on May 5, 2025
Daniel Bodky and Markus Opolka from our partner NETWAYS developed the very first Icinga Kubernetes Helm Charts and released it in an alpha version. If you have ever wanted to deploy an entire Icinga stack in your Kubernetes cluster, now is your chance. I also want to highlight Daniel’s talk again on how Icinga can run on Kubernetes and the challenges involved. Although the Helm charts are still in alpha version, they are already in a pretty good state to try them out. First, you need to add the Icinga Helm repository, which in our case is hosted on GitHub Pages and can be added to your environment by running the following commands:
helm repo add icinga https://icinga.github.io/helm-charts
helm repo add icinga https://icinga.github.io/helm-charts
helm repo update
helm repo add icinga https://icinga.github.io/helm-charts
helm repo update
Once the repository is known, you can install Icinga by running the following commands. We will first create a namespace and then deploy Icinga 2, Icinga DB, Icinga Web, Director and necessary dependencies like databases and Redis using the Icinga Stack Helm chart:
Please note the various CHANGEME
placeholders that need to be replaced.
kubectl create namespace icinga
helm install icinga-stack \
--set icinga2.config.ticket_salt=CHANGEME \
--set icingaweb2.auth.admin_password=CHANGEME \
--set global.api.users.director.password=CHANGEME \
--set global.api.users.icingaweb.password=CHANGEME \
--set global.databases.director.password=CHANGEME \
--set global.databases.icingaweb2.password=CHANGEME \
--set global.databases.icingadb.password=CHANGEME \
kubectl create namespace icinga
helm install icinga-stack \
--namespace icinga \
--set icinga2.config.ticket_salt=CHANGEME \
--set icingaweb2.auth.admin_password=CHANGEME \
--set global.api.users.director.password=CHANGEME \
--set global.api.users.icingaweb.password=CHANGEME \
--set global.databases.director.password=CHANGEME \
--set global.databases.icingaweb2.password=CHANGEME \
--set global.databases.icingadb.password=CHANGEME \
icinga/icinga-stack
kubectl create namespace icinga
helm install icinga-stack \
--namespace icinga \
--set icinga2.config.ticket_salt=CHANGEME \
--set icingaweb2.auth.admin_password=CHANGEME \
--set global.api.users.director.password=CHANGEME \
--set global.api.users.icingaweb.password=CHANGEME \
--set global.databases.director.password=CHANGEME \
--set global.databases.icingaweb2.password=CHANGEME \
--set global.databases.icingadb.password=CHANGEME \
icinga/icinga-stack
And that is how easy it is to run Icinga on Kubernetes with our Helm charts. You can use Icinga Web with the password provided above using the preconfigured username icingaweb
. To conclude, here is a list of what has been deployed. Enjoy trying out Icinga on Kubernetes. And a big kudos to Daniel and Markus.
kubectl get all --namespace icinga
NAME READY STATUS RESTARTS AGE
pod/icinga-stack-director-database-0 1/1 Running 0 21h
pod/icinga-stack-icinga2-0 1/1 Running 0 21h
pod/icinga-stack-icingadb-77f464bb88-5rsjb 1/1 Running 1 (5h49m ago) 21h
pod/icinga-stack-icingadb-database-0 1/1 Running 0 21h
pod/icinga-stack-icingaweb2-797f9746cf-cnckq 2/2 Running 3 (21h ago) 21h
pod/icinga-stack-icingaweb2-database-0 1/1 Running 0 21h
pod/icinga-stack-redis-0 1/1 Running 0 21h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/icinga-stack-director-database ClusterIP 10.108.104.166 3306/TCP 21h
service/icinga-stack-icinga2 ClusterIP 10.102.227.137 5665/TCP 21h
service/icinga-stack-icingadb-database ClusterIP 10.106.96.84 3306/TCP 21h
service/icinga-stack-icingaweb2 ClusterIP 10.110.14.92 8080/TCP 21h
service/icinga-stack-icingaweb2-database ClusterIP 10.100.17.234 3306/TCP 21h
service/icinga-stack-redis ClusterIP 10.99.63.169 6379/TCP 21h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/icinga-stack-icingadb 1/1 1 1 21h
deployment.apps/icinga-stack-icingaweb2 1/1 1 1 21h
NAME DESIRED CURRENT READY AGE
replicaset.apps/icinga-stack-icingadb-77f464bb88 1 1 1 21h
replicaset.apps/icinga-stack-icingaweb2-797f9746cf 1 1 1 21h
statefulset.apps/icinga-stack-director-database 1/1 21h
statefulset.apps/icinga-stack-icinga2 1/1 21h
statefulset.apps/icinga-stack-icingadb-database 1/1 21h
statefulset.apps/icinga-stack-icingaweb2-database 1/1 21h
statefulset.apps/icinga-stack-redis 1/1 21h
kubectl get all --namespace icinga
NAME READY STATUS RESTARTS AGE
pod/icinga-stack-director-database-0 1/1 Running 0 21h
pod/icinga-stack-icinga2-0 1/1 Running 0 21h
pod/icinga-stack-icingadb-77f464bb88-5rsjb 1/1 Running 1 (5h49m ago) 21h
pod/icinga-stack-icingadb-database-0 1/1 Running 0 21h
pod/icinga-stack-icingaweb2-797f9746cf-cnckq 2/2 Running 3 (21h ago) 21h
pod/icinga-stack-icingaweb2-database-0 1/1 Running 0 21h
pod/icinga-stack-redis-0 1/1 Running 0 21h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/icinga-stack-director-database ClusterIP 10.108.104.166 3306/TCP 21h
service/icinga-stack-icinga2 ClusterIP 10.102.227.137 5665/TCP 21h
service/icinga-stack-icingadb-database ClusterIP 10.106.96.84 3306/TCP 21h
service/icinga-stack-icingaweb2 ClusterIP 10.110.14.92 8080/TCP 21h
service/icinga-stack-icingaweb2-database ClusterIP 10.100.17.234 3306/TCP 21h
service/icinga-stack-redis ClusterIP 10.99.63.169 6379/TCP 21h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/icinga-stack-icingadb 1/1 1 1 21h
deployment.apps/icinga-stack-icingaweb2 1/1 1 1 21h
NAME DESIRED CURRENT READY AGE
replicaset.apps/icinga-stack-icingadb-77f464bb88 1 1 1 21h
replicaset.apps/icinga-stack-icingaweb2-797f9746cf 1 1 1 21h
NAME READY AGE
statefulset.apps/icinga-stack-director-database 1/1 21h
statefulset.apps/icinga-stack-icinga2 1/1 21h
statefulset.apps/icinga-stack-icingadb-database 1/1 21h
statefulset.apps/icinga-stack-icingaweb2-database 1/1 21h
statefulset.apps/icinga-stack-redis 1/1 21h
kubectl get all --namespace icinga
NAME READY STATUS RESTARTS AGE
pod/icinga-stack-director-database-0 1/1 Running 0 21h
pod/icinga-stack-icinga2-0 1/1 Running 0 21h
pod/icinga-stack-icingadb-77f464bb88-5rsjb 1/1 Running 1 (5h49m ago) 21h
pod/icinga-stack-icingadb-database-0 1/1 Running 0 21h
pod/icinga-stack-icingaweb2-797f9746cf-cnckq 2/2 Running 3 (21h ago) 21h
pod/icinga-stack-icingaweb2-database-0 1/1 Running 0 21h
pod/icinga-stack-redis-0 1/1 Running 0 21h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/icinga-stack-director-database ClusterIP 10.108.104.166 3306/TCP 21h
service/icinga-stack-icinga2 ClusterIP 10.102.227.137 5665/TCP 21h
service/icinga-stack-icingadb-database ClusterIP 10.106.96.84 3306/TCP 21h
service/icinga-stack-icingaweb2 ClusterIP 10.110.14.92 8080/TCP 21h
service/icinga-stack-icingaweb2-database ClusterIP 10.100.17.234 3306/TCP 21h
service/icinga-stack-redis ClusterIP 10.99.63.169 6379/TCP 21h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/icinga-stack-icingadb 1/1 1 1 21h
deployment.apps/icinga-stack-icingaweb2 1/1 1 1 21h
NAME DESIRED CURRENT READY AGE
replicaset.apps/icinga-stack-icingadb-77f464bb88 1 1 1 21h
replicaset.apps/icinga-stack-icingaweb2-797f9746cf 1 1 1 21h
NAME READY AGE
statefulset.apps/icinga-stack-director-database 1/1 21h
statefulset.apps/icinga-stack-icinga2 1/1 21h
statefulset.apps/icinga-stack-icingadb-database 1/1 21h
statefulset.apps/icinga-stack-icingaweb2-database 1/1 21h
statefulset.apps/icinga-stack-redis 1/1 21h