Minikube: Deploying Persistent Storage

30 minutes
  • 3 Learning Objectives

About this Hands-on Lab

In this hands-on lab we will be creating a deployment using dynamically allocated storage. This will be for a blog platform, and we’ll be using a template to create the deployment.

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
Create the Ghost Blog Deployment and Verify That It Has Deployed Correctly

Create the blog deployment using the ~/ghost-deploy-template.yaml. Our YAML should look something like this when we’re done:

apiVersion: v1
kind: Service
metadata:
    name: blog
    labels:
      app: gblog
spec:
    type: NodePort
    selector:
      app: gblog
    ports:
        - nodePort: 30005
          port: 80
          targetPort: 2368
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: blog-stor
  labels:
    app: gblog
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gblog
  labels:
    app: gblog
spec:
  selector:
    matchLabels:
      app: gblog
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: gblog
    spec:
      containers:
          - name: blog-cont
            image: ghost:2.6-alpine
            ports:
            - containerPort: 2368
            volumeMounts:
            - name: blog-vol
              mountPath: "/var/lib/ghost/content"
      volumes:
      - name: blog-vol
        persistentVolumeClaim:
          claimName: blog-stor

Now we can create the deployment:

sudo kubectl create -f ~/ghost-deploy-template.yaml

Verify that it is up and running:

sudo kubectl get pv
sudo kubectl get pvc
sudo kubectl get po
Configure the Proxy to Forward the Blog and Verify It Loads

Get the node port address, which will be the TARGET_PORT of blog in the output of this command:

sudo minikube service list

Now we can configure Nginx to proxy to the blog service. Edit the file:

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

Around line 50, we need to stick our Minikub IP and port in the location section
remove this line

 try_files $uri $uri/ =404;

and replace it with the ip and port from the services command so it looks like this

location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        proxy_pass http://MINIKUB_IP:PORT;
    }

Now let’s restart Nginx to implement the new configuration:

sudo systemctl restart nginx

Additional Resources

Our company has determined that they would like to deploy a blogging platform, and it needs to work within Kubernetes. We have been tasked with creating a deployment for the Ghost Blog platform. This should be deployed using the ghost:2.6-alpine image with the default ghost port of 2368. One other requirement is that the storage be mounted in the default location, /var/lib/ghost/content. The blog, once deployed, needs to be accessible from outside the cluster, so we need to implement a proxy that allows the page to be loaded in 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?