Deploy Apache Solr – Harness on Local K8s via Docker registry

This demo post is about deploying Apache Solr on local Kubernetes(MiniKube) with Harness Kubernetes Deployment. This post will be using Harness Delegates with Minikube and create infrastructure definition, workflow and pipeline to deploy Apache Solr. The container images will be pulled from docker public registry.

  • Apache SOLRSolr is designed for scalability and fault tolerance. Solr is widely used for enterprise search and analytics use cases and has an active development community and regular releases. Solr runs as a standalone full-text search server.
  • Harness.io – It supports Kubernetes Deployments for rapidly onboard and deploy Microservices with support forCanary, Helm, Istio, and Kubernetes pods, nodes.
  • MiniKube – Run Kubernetes Locally. Minikube implements a local Kubernetes cluster on macOS, Linux, and Windows.

Prerequisite

  • Harness Account – I have used a professional trial account – link here
  • Docker for desktop – this demo is using 3.10
  • Kubectl installed – this demo uses homebrew on Mac for this installation.
  • Minikube – Used for local Kubernetes application development, and to support all Kubernetes features that fit for this demo for sandbox environment.
  • Docker Registry – Apache Solr is pulled from registry.hub.docker.com/library/solr:latest

Local K8s Setup with Minikube

Minikube is downloaded and installed with sudo access.

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64

sudo install minikube-darwin-amd64 /usr/local/bin/minikube

Check for Minikube version installed and start the Minikube.

Harness Local Delegate Setup

We setup a trial account with Harness and use Link here – https://harness.io/free-trial/

The Harness Delegate is a service which run in local network or VPC to connect all of respective artifact, infrastructure, verification and other providers with the Harness Manager.

We need to create Kubernetes YAML file which can be executed and used for workload nodes.

If you downloaded the Delegate, extract the YAML file’s folder from the download and then navigate to the harness-delegate-kubernetes folder that you extracted:

tar -zxvf harness-delegate-kubernetes.tar.gz
cd harness-delegate-kubernetes

In the below file, we will be using below info through out the demo.

  • Namespace – harness-delegate
  • Resource CPU = 1
  • Resource Memory =8Gigs

We switch to the folder and execute the below commands

Check for the kubectl installed and the resources/workloads need to be created.

kubectl apply -f harness-delegate.yaml

Check for the pods created, with the required namespace.

kubectl get pods -n harness-delegate
We wait for a few mins, pod status is still in pending state, 
In order to view events for the pods, we can describe the pod.
kubectl describe pods minik8s-qjrewn-0 -n harness-delegate 

There are a failed scheduling for node, due to insufficient memory.

Reconficure Minikube configuration.

minikube stop 
minikube start --cpus 4 --memory 8192

We check for the events for the workload while container is getting created.

Since the harness delegate is all setup, we can add a Kubernetes Cluster, and this cluster will be used later on for creating workloads.

Harness Workflow and Pipelines

In order to deploy Apache Solr, we will use Harness workflow and pipeline. We will fetch a helm package from

  • Create an Application
  • Setup environment for the infra definition
  • Create workflow to execute the pipeline.

Screenshots below for the steps performed.

Next step is to create Services, Environments, Workflow and Pipelines.

We will be using Docker Public Repository. Docker Registry – Apache Solr is pulled from registry.hub.docker.com/library/solr:latest

Infrastructure Definition is created with the cloud providers and Deployment type.

Since this is a simple image deployment, a single stage pipeline can be demoed. Based on the complexity, we can add further stages.

Start a new deployment with the latest service tag. This will trigger the workflow/pipeline for automated rolling deployment.

In the image below, we can see status of rolling deployment, this will take a couple of minutes to complete it. Meanwhile we can also have a look at Minikube dashboard.

In the image below, we can see the rolling deployment is completed.

  • Deployment – harness-example-deployment
  • Namespace – harness-example

That’s It. 

That’s all, needed to start playing with the K8s, Harness, Docker bits!