Installation guide for Minikube

Install Minikube

To install minikube itself, follow the instructions on https://kubernetes.io/de/docs/tasks/tools/install-minikube/

Install chart dependencies

Download or update latest helm chart dependencies listed in /chart.yaml.

helm dependency update charts/geonode

Edit Minikube values

View and edit the predefined minikube values under /minikube-values.yaml

Run Installation

To run the installation on minikube run:

helm upgrade --cleanup-on-fail   --install --namespace geonode --create-namespace --values minikube-values.yaml geonode charts/geonode

You can check the installation process with:

watch kubectl get pods,services,pvc,secrets,postgresql -n geonode

# this will give you an overview over all running pods, services, pvcs,sts and the postgresql class
NAME                                             READY   STATUS      RESTARTS       AGE
pod/geonode-geonode-0                            2/2     Running     0              5m19s
pod/geonode-geonode-init-db-job-dqdhl            0/1     Completed   0              5m19s
pod/geonode-geonode-statics-job-9lpmk            0/1     Completed   0              5m19s
pod/geonode-geoserver-0                          1/1     Running     0              5m19s
pod/geonode-memcached-0                          1/1     Running     0              5m19s
pod/geonode-nginx-575d4fbc8f-pkj4b               1/1     Running     1 (4m8s ago)   5m19s
pod/geonode-postgres-0                           1/1     Running     0              5m10s
pod/geonode-postgres-operator-75d5bf84d8-clfkf   1/1     Running     0              5m19s
pod/geonode-pycsw-0                              1/1     Running     0              5m19s
pod/geonode-rabbitmq-0                           1/1     Running     0              5m19s

NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                 AGE
service/geonode-geonode             ClusterIP   10.108.139.157   <none>        8000/TCP,8001/TCP,5555/TCP              5m19s
service/geonode-geoserver           ClusterIP   10.109.74.49     <none>        8080/TCP                                5m19s
service/geonode-memcached           ClusterIP   10.98.114.227    <none>        11211/TCP                               5m19s
service/geonode-nginx               ClusterIP   10.110.152.86    <none>        80/TCP                                  5m19s
service/geonode-postgres            ClusterIP   10.108.247.27    <none>        5432/TCP                                5m12s
service/geonode-postgres-config     ClusterIP   None             <none>        <none>                                  5m2s
service/geonode-postgres-operator   ClusterIP   10.102.184.20    <none>        8080/TCP                                5m19s
service/geonode-postgres-repl       ClusterIP   10.108.255.29    <none>        5432/TCP                                5m11s
service/geonode-pycsw               ClusterIP   10.101.67.39     <none>        8000/TCP                                5m19s
service/geonode-rabbitmq            ClusterIP   10.110.248.230   <none>        5672/TCP,4369/TCP,25672/TCP,15672/TCP   5m19s
service/geonode-rabbitmq-headless   ClusterIP   None             <none>        4369/TCP,5672/TCP,25672/TCP,15672/TCP   5m19s

NAME                                              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/pgdata-geonode-postgres-0   Bound    pvc-3f7a8ad8-83b5-410a-8b47-6778d97b2b98   2Gi        RWO            standard       5m10s
persistentvolumeclaim/pvc-geonode-geonode         Bound    pvc-264fdd95-beb6-416a-a7b3-a98834e461bf   2Gi        RWX            standard       5m19s

NAME                                                                    TYPE                 DATA   AGE
secret/geodata.geonode-postgres.credentials.postgresql.acid.zalan.do    Opaque               2      53d
secret/geonode-geonode-secret                                           Opaque               12     5m19s
secret/geonode-geoserver-secret                                         Opaque               6      5m19s
secret/geonode-rabbitmq                                                 Opaque               2      5m19s
secret/geonode-rabbitmq-config                                          Opaque               1      5m19s
secret/geonode.geonode-postgres.credentials.postgresql.acid.zalan.do    Opaque               2      53d
secret/postgres.geonode-postgres.credentials.postgresql.acid.zalan.do   Opaque               2      53d
secret/sh.helm.release.v1.geonode.v1                                    helm.sh/release.v1   1      5m19s
secret/standby.geonode-postgres.credentials.postgresql.acid.zalan.do    Opaque               2      53d

NAME                                        TEAM      VERSION   PODS   VOLUME   CPU-REQUEST   MEMORY-REQUEST   AGE     STATUS
postgresql.acid.zalan.do/geonode-postgres   geonode   15        1      2Gi      100m          0.5Gi            5m19s   Running

The initial start takes some time, due to the init process of the django application. You can check the status via:

kubectl -n geonode logs pod/geonode-geonode-0 -f 

Further check that the geonode-geonode-init-db-job job is finished as this is setting the admin user password.

Expose Service to outside world

This installation requires to access geonode via "geonode" (or the value in .Values.geonode.general.externalDomain) dns entry. So, add an entry to your /etc/hosts. First of all find the related ip addr from kubernetes service like:

# list all services in geonode namespace
kubectl -n geonode get services

NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                 AGE
service/geonode-geonode             ClusterIP   10.108.139.157   <none>        8000/TCP,8001/TCP,5555/TCP              5m19s
service/geonode-geoserver           ClusterIP   10.109.74.49     <none>        8080/TCP                                5m19s
service/geonode-memcached           ClusterIP   10.98.114.227    <none>        11211/TCP                               5m19s
service/geonode-nginx               ClusterIP   10.110.152.86    <none>        80/TCP                                  5m19s
service/geonode-postgres            ClusterIP   10.108.247.27    <none>        5432/TCP                                5m12s
service/geonode-postgres-config     ClusterIP   None             <none>        <none>                                  5m2s
service/geonode-postgres-operator   ClusterIP   10.102.184.20    <none>        8080/TCP                                5m19s
service/geonode-postgres-repl       ClusterIP   10.108.255.29    <none>        5432/TCP                                5m11s
service/geonode-pycsw               ClusterIP   10.101.67.39     <none>        8000/TCP                                5m19s
service/geonode-rabbitmq            ClusterIP   10.110.248.230   <none>        5672/TCP,4369/TCP,25672/TCP,15672/TCP   5m19s
service/geonode-rabbitmq-headless   ClusterIP   None             <none>        4369/TCP,5672/TCP,25672/TCP,15672/TCP   5m19s

Find the ip addr of the geonode-nginx service. and add an entry to your hosts file:

10.110.152.86   geonode.local

After that the service has to be exposed from minikube. I prefer to use minikube tunnel. Start it via sudo, as the tunnel will require root access:

minikube tunnel

There are several ways to expose services from minikube, find information in the minikube docs under: https://minikube.sigs.k8s.io/docs/handbook/accessing/

Now you are able to access the geonode installation by opening your browser and open http://geonode.local for geonode and http://geonode.local/geoserver for geoserver.

Have fun!