Minikube: Using Helm

30 minutes
  • 4 Learning Objectives

About this Hands-on Lab

In this hands-on lab we will be looking at using Helm to deploy a microservice stack in our minikube cluster. We will be using the Instana robot-shop application as an example.

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Start the Minikube Cluster Using the Correct Driver

Issue the command to start Minikube

sudo minikube start --vm-driver none
Unpack Helm, Move it into the Path, Install Socat and Run helm init

Unpack the helm.tar.gz file that is sitting in our home directory:

tar -xvzf ~/helm.tar.gz

Move the helm and tiller executables into the path at /usr/local/bin:

sudo mv ./linux-amd64/helm /usr/local/bin
sudo mv ./linux-amd64/tiller /usr/local/bin

To test, run helm version from our home directory. This means it’s in our path and we can run helm commands from anywhere.

Initialize Helm:

sudo helm init

Check that helm and tiller are up and available:

sudo helm version

Helm requires socat in order to run, so we need to install it:

sudo apt install -y socat
Install the Robot-Shop Application into Its Own Namespace via Helm

Get into the directory containing the Helm chart:

cd ~/robot-shop/K8s/helm

Create the name space:

sudo kubectl create namespace robot-shop

Run the Helm installation:

sudo helm install --name robot-shop --namespace robot-shop .

Verify that the pods are running:

sudo kubectl -n robot-shop get po

It might take a couple of minutes for all the pods to stand up.

Edit the Web Service to Use Nodeport and Configure Nginx to Proxy to the Web Service

Edit the web service:

sudo kubectl -n robot-shop edit service web

Edit the service spec similar to this (changing LoadBalancer to NodePort):

spec:
  ports:
  - name: "8080"
    port: 8080
    protocol: TCP
    targetPort: 8080
    nodePort: 30080
  selector:
    service: web
  sessionAffinity: None
  type: NodePort

Make sure our change took effect:

sudo kubectl -n robot-shop get service web

Get the target port from Minikube:

sudo minikube service list

Pay attention to TARGET PORT on web. We’ll need that in a minute.

Configure Nginx to proxy to the target port from service list. Get the file open for editing:

sudo vim /etc/nginx/sites-enabled/default

Now, down at about line 50, we’ve got to change something in the location section. We’ll paste that TARGET PORT we saw earlier in here, replacing the existing line with what’s shown here (the proxy_pass line):

location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        proxy_pass http://<minikube IP>:<svc port>;

Our changes should take effect after an Nginx restart:

sudo systemctl restart nginx

Open a browser and point it to our server’s public IP address to ensure the application is running.

Additional Resources

We have been asked to deploy a microservice application via Helm, and we've decided execute a test run in our Minikube environment. We will need to ensure that socat is installed and that Helm is on the path. Once that is done we can deploy the robot-shop application stack into our Minikube, then configure the proxy to allow access via a browser.

What are Hands-on Labs

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Sign In
Welcome Back!

Psst…this one if you’ve been moved to ACG!

Get Started
Who’s going to be learning?