Installing Zetaris on OpenSource kubernetes (minikube)

This article demonstrates how to install Zetaris on a single node box for exploratory use on a open source kubernetes like minikube

1. Introduction

Installing a Helm chart on Minikube allows you to quickly deploy applications into a local Kubernetes environment for development and testing. Helm acts as a package manager for Kubernetes, simplifying the deployment of complex workloads. After starting Minikube and setting up Helm, you can add the Zetaris Helm chart repositories, update your repository list, and install the chart with  simple commands. This setup provides a fast, flexible way to prototype, validate, and manage open-source kubernetes based Zetaris application locally.

1.1. Overview

This guide provides detailed instruction on how to install Zetaris software on Red Hat OpenShift/Kubernetes environment

1.2. How to Use this Guide

  • Introduction explains the purpose of the document along with its structure and defines the audience.
  • Installation Prerequisites list all the prerequisites to plan an installation in your environment.
  • Installation Instructions provides the installation procedure.

1.3. Zetaris Support

We are committed to providing the highest level of support to Zetaris users. If you encounter any issue or need assistance with the installation, or suggest improvements, please contact our support team.

2. Installation Prerequisites

For installing Zetaris software we need to have the following components running:

Managed K8s OR Openshift Environment (Cloud or Managed platform)

Components Requirements
Red Hat OpenShift OpenShift version > 4.10.40 with kubeadmin level access.
oc command line tool Required to execute command on Red Hat OpenShift cluster
Kubectl v1.32.0
Helm v3.16.4

Minikube Cluster OR Opensource K8s

Install minikube and run the cluster

curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64

Refer: https://docs.docker.com/engine/install/ubuntu/

minikube config set cpus 12
minikube config set memory 65554
minikube start
minikube addons enable ingress

 

3. Setup the ‘namespaces’

· Login to OpenShift / Kubernetes cluster using kubeadmin credentials from oc/kubectl command line tool.

 

kubectl create namespace zetaris
kubectl create namespace airflow

Set the below variables for the current version release in your terminal.

Please contact Zetaris for the token below

$zettoken=github_pat_XXXXXXX
$zetrelease=helm_latest

Set the env value to reflect the Infrastructure provider 

like 'aws', 'azure', 'ibm', 'gcp', 'dell', 'hitachi', 'local' (minikube)

$environment=local

4. Postgres installation

Please install Postgres external using the below two option

 

A).Postgres on external source like RDS or other managed services. Go with the low cost one like Azure flexible server, AWS Aurora postgres..etc

OR

B) .Postgres on k8s inside the cluster.

Run “kubectl get sc” to confirm the storage class

Set appropriate “storageClassName”. “kubectl get sc”

$storageclass=default
helm repo add helm-postgres https://$zettoken@raw.githubusercontent.com/zetaris/openshift/$zetrelease/postgres
helm upgrade --install postgres \

helm-postgres/postgres --namespace zetaris \

--set storageClassName=$storageclass \

--set environment=$environment

List out all generated pods

kubectl get pods -n zetaris

Get the pod name of postgres

kubectl exec -it <postgres pod name> -n zetaris -- /bin/sh
su - postgres

The below command would ask password and enter “<Your Choice Password>”

psql -h postgres -U rds_admin postgres
create database metastore;
create database auditlog;
create database airflowdb;

 

5. Install the Spark Operator and Opensearch

 

· Add the spark operator, cert repo;

helm repo add spark-operator https://kubeflow.github.io/spark-operator helm repo add jetstack https://charts.jetstack.io
helm repo update

· Install the spark operator , cert manager;

helm upgrade --install spark-operator spark-operator/spark-operator --namespace spark-operator --create-namespace --version=1.2.15 --set webhook.enable=true
kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true
helm install cert-manager jetstack/cert-manager --namespace cert-manager --version v1.7.0 --set installCRDs=true

 

· Install the opensearch;

Option 1: Using helm charts

helm uninstall opensearch -n zetaris
 helm upgrade --install opensearch opensearch/opensearch --namespace zetaris --set image.tag=2.11.0 --set serviceAccount.name=zetaris-sa

 

Option 2Using git repo

git clone https://github.com/zetaris/opensearch.git
helm uninstall opensearch -n zetaris
helm upgrade --install opensearch opensearch/hitachi --namespace zetaris --set image.tag=2.11.0 --set serviceAccount.name=zetaris-sa

6. Lightning Deployments

 

Add below helm repos,

helm repo add helm-zetaris-lightning-solr https://$zettoken@raw.githubusercontent.com/zetaris/HelmDeployment/$zetrelease/solr/helm/
helm repo add helm-zetaris-lightning-server https://$zettoken@raw.githubusercontent.com/zetaris/zetaris-lightning/$zetrelease/deployments/helm/
helm repo add helm-zetaris-lightning-api https://$zettoken@raw.githubusercontent.com/zetaris/lightning-api/$zetrelease/deployments/helm/
helm repo add helm-zetaris-lightning-gui https://$zettoken@raw.githubusercontent.com/zetaris/lightning-gui/$zetrelease/deployments/helm/
helm repo add helm-zetaris-lightning-zeppelin https://$zettoken@raw.githubusercontent.com/zetaris/zetaris-zeppelin/$zetrelease/deployments/helm/
helm repo add helm-zetaris-digiavatar https://$zettoken@raw.githubusercontent.com/zetaris/digiavatar/$zetrelease/deployments/helm/
helm repo add helm-zetaris-privateai https://$zettoken@raw.githubusercontent.com/zetaris/privateai/$zetrelease/deployments/helm/
helm repo add helm-zetaris-airflow-ing https://$zettoken@raw.githubusercontent.com/zetaris/HelmDeployment/$zetrelease/airflow-ing/helm/

Replace the below values and apply helm install,

Update image and domain configs.

$serverImage=zetregistry.azurecr.io/lightning-server:main-latest

$apiImage=zetregistry.azurecr.io/lightning-api:main-latest

$apiImage=zetregistry.azurecr.io/lightning-api:main-latest

$computesparkimage=zetregistry.azurecr.io/lightning-server:main-latest

$computeprestoimageRepo=zetregistry.azurecr.io/lightning-presto-app

$computeprestoimageTag=main-latest

$zeppelinImage=zetregistry.azurecr.io/lightning-zeppelin-app:zetaris-main-latest

$basednsname=test.zetaris.com

Update postgres details here,

$dbdns=postgres

$dbport=5432

$metadb=metastore

$auditdb=audit_log

$dbuser=rds_admin

$dbpwd=<Your chosen password in Step 4>

$sslmode=require

$metastoreJdbcUrl="jdbc:postgresql://$dbdns:$dbport/$metadb?user=$dbuser&password=$dbpwd&sslmode=$sslmode"

$auditLogJdbcUrl="jdbc:postgresql://$dbdns:$dbport/$auditdb?user=$dbuser&password=$dbpwd&sslmode=$sslmode"

For AWS EFS as storage

awsefsid=""

awsefsdata=""

awsefszeppelin=""

tls_cert_arn=""

For Azure SA as storage

For guidance on creating public and private keys, please refer to the following resource: https://stackoverflow.com/questions/44474516/how-to-create-public-and-private-key-with-openssl.

storageAccountName=""

storageAccountKey=""

$privateKeyDer=XXXXXXXXXXX

$publicKeyDer=YYYYYYYYYY

Lightning solr deployment

helm upgrade --install lightning-solr \

helm-zetaris-lightning-solr/solr \

--namespace zetaris \

--set storageClassName=$storageclass \

--set environment=$environment

Lightning server deployment

helm upgrade --install lightning-server \

helm-zetaris-lightning-server/lightning-server \

--namespace zetaris \

--set db.metastore.JdbcUrl=$metastoreJdbcUrl \

--set db.auditLog.JdbcUrl=$auditLogJdbcUrl \

--set storage.storageClass=$storageclass \

--set environment=$environment \

--set encryption.privateKeyDer=$privateKeyDer \

--set encryption.publicKeyDer=$publicKeyDer \

--set azure.storageAccountName=$storageAccountName \

--set azure.storageAccountKey=$storageAccountKey \

--set aws.efs.id=$awsefsid \

--set aws.efs.data=$awsefsdata \

--set serverImage=$serverImage

Lightning API deployment

helm upgrade --install lightning-api \

helm-zetaris-lightning-api/lightning-api \

--namespace zetaris \

--set environment=$environment \

--set apiImage=$apiImage \

--set ingress.protocol=$dnsprotocol \

--set aws.ingress.tls_cert_arn=$tls_cert_arn \

--set ingress.baseDomain=$basednsname \

--set db.metastore.JdbcUrl=$metastoreJdbcUrl \

--set db.auditLog.JdbcUrl=$auditLogJdbcUrl \

--set compute.spark.image=$computesparkimage \

--set compute.presto.imageRepo=$computeprestoimageRepo \

--set compute.presto.imageTag=$computeprestoimageTag

Lightning GUI deployment

helm upgrade --install lightning-gui \

helm-zetaris-lightning-gui/lightning-gui \

--namespace zetaris \

--set guiImage=$guiImage \

--set ingress.protocol=$dnsprotocol \

--set aws.ingress.tls_cert_arn=$tls_cert_arn \

--set ingress.baseDomain=$basednsname \

--set environment=$environment

Lightning Zeppelin deployment

helm upgrade --install lightning-zeppelin \

helm-zetaris-lightning-zeppelin/lightning-zeppelin \

--namespace zetaris \

--set ingress.protocol=$dnsprotocol \

--set ingress.baseDomain=$basednsname \

--set ingress.tls_cert_arn=$tls_cert_arn \

--set storage.storageClass.name=$storageclass \

--set environment=$environment \

--set aws.efs.id=$awsefsid \

--set aws.efs.zeppelin=$awsefszeppelin \

--set zeppelin.image=$zeppelinImage

Digiavatar deployment

helm upgrade --install digiavatar \

helm-zetaris-digiavatar/digiavatar \

--namespace zetaris \

--set ingressprotocol=$dnsprotocol \

--set deploymentname=$deploymentname \

--set dnsdomain=$dnsdomain \

--set environment=$environment

Private AI deployment

helm upgrade --install privateai \

helm-zetaris-privateai/privateai \

--namespace zetaris \

--set deploymentname=$deploymentname \

--set dnsdomain=$dnsdomain \

--set ingressprotocol=$dnsprotocol \

--set environment=$environment \

-- set gpuenabled=false

Airflow Deployment

helm upgrade --install airflow-ing \

helm-zetaris-airflow-ing/airflow-ing \

--namespace airflow \

--set environment=$environment \

--set storageclass=$storageclass \

--set deploymentname=$deploymentname \

--set dnsdomain=$dnsdomain

Final deployment should contain running pods as shown below;

NAME                                                  READY   STATUS             RESTARTS       AGE
digiavatar-5f69b44d68-w2tfs                           1/1     Running            0              12h
lightning-api-988b7cbb6-nhwnk                         1/1     Running            0              12h
lightning-gui-7f9b6bbb4d-h52bn                        1/1     Running            0              179mlightning-server-5439ec967ddf56d2-exec-1              0/1     Pending            0              174m
lightning-server-5439ec967ddf56d2-exec-2              0/1     Pending            0              174m
lightning-server-5439ec967ddf56d2-exec-3              0/1     Pending            0              174m
lightning-server-driver                               1/1     Running            0              13h
lightning-solr-555664b544-fpwlc                       1/1     Running            0              12h
lightning-zeppelin-7975969f5f-fl6mj                   1/1     Running            0              12h
ollama-6977d564d8-l495p                               1/1     Running            0              68m
opensearch-cluster-master-0                           1/1     Running            0              179m
opensearch-cluster-master-1                           1/1     Running            0              179m
os-opensearch-dashboards-57f49f85fc-zpfsn             1/1     Running            0              12h
privateai-566df5d786-68f49                            1/1     Running            0              162m

8. Create Lightning user account

· Login to ‘lightning-server-driver’ pod

kubectl exec --tty --stdin lightning-server-driver -n zetaris /bin/sh

 

· Run the dev-account.sh script

cd /home/zetaris/lightning/bin/

./dev-account.sh

 

9. Launch Zetaris

Please Open browser window (preferably chrome) from any computer that is connected to VM and can access the machine on which Zetaris is installed. 

Use URL from route created earlier (e.g. http://zetaris-zetaris.apps.zetaris.iac.ssc) to launch Zetaris from browser window.