Red Hat CDK Red Hat Container Development Kit

Hi there! It's been a while since I last wrote an article. Today, I want to show you how to easily setup some persistent storage for your projects in minishift / CDK 3 (Red Hat's Containers Development Kit 3).


First, let's start planning what you'll need:

  • A working minishift or CDK 3.

That's all, I swear!

I won't go deep into how to set up a minishift or CDK 3, there are many articles on the Internet to cover this. Anyway I'll recap some useful links below, just to make sure you'll get a working minishift/CDK3 before proceeding:

Minishift Github page -

Let's start!

Once you've successfully set up a working minishift/CDK3, you're now ready to move forward, creating the underlying storage for your Persistent Volumes (PVs).

First of all, connect to your running minishift/CDK3:

$ minishift ssh
[docker@minishift ~]$ sudo -i
[root@minishift ~]#

Ok, now we're ready to create our first persistent volume backend directory for hosting Docker Registry files:

[root@minishift ~]# mkdir -p /mnt/sda1/var/lib/minishift/openshift.local.volumes/pv
 [root@minishift ~]# mkdir /mnt/sda1/var/lib/minishift/openshift.local.volumes/pv/registry
 [root@minishift ~]# chmod 777 -R /mnt/sda1/var/lib/minishift/openshift.local.volumes/pv

Perfect! We can now move to the PersistentVolume creation for our Docker Registry container.

First, log out from your minishift/CDK3 vm and then log in to your Openshift via oc-client:

$ oc login -u system:admin
Logged into "" as "system:admin" using existing credentials.

You have access to the following projects and can switch between them with 'oc project <projectname>':

 * myproject

Using project "myproject".

Let's switch to project "default":

$ oc project default
Now using project "default" on server "".

Finally, create your first PersistentVolume:

$ cat << PV | oc create -f -
apiVersion: v1
kind: PersistentVolume
 name: registry
  storage: 5Gi
  - ReadWriteOnce
 storageClassName: slow
  path: /mnt/sda1/var/lib/minishift/openshift.local.volumes/pv/registry

Pay attention to two things here:

  1. Storage capacity: it's not calculated automatically! You should care about disk size and free space.
  2. Usage of Volume type "hostPath", the storage is on the minishift/CDK3 virtual disk, you should take care of permissions!

Ok, now we're ready to create our first PersistentVolumeClaim, to be bound with a PersistentVolume resource:

$ cat << PVC | oc create -f -
kind: PersistentVolumeClaim
apiVersion: v1
 name: registryclaim
  - ReadWriteOnce
   storage: 5Gi
 storageClassName: slow
  name: registry

As you can see from the PersistentVolumeClaim definition, we match the PersistentVolume by the name "registry".

We can now look at the result by checking the output of the following commands:

$ oc get pvc
registryclaim Bound  registry 5Gi      RWO         8s

Finally, we can patch the current registry DeploymentConfig adding the just created storage:

$ oc volume dc/docker-registry --add --name=registry-storage -t pvc --claim-name=registryclaim --overwrite
deploymentconfig "docker-registry" updated

That's all! You can repeat these steps as many times as you want! But, pay attention to your vm's free space!

About Alessandro

Alessandro Arrichiello is a Solution Architect for Red Hat Inc. He has a passion for GNU/Linux systems, that began at age 14 and continues today. He worked with tools for automating Enterprise IT: configuration management and continuous integration through virtual platforms. He’s now working on distributed cloud environment involving PaaS (OpenShift), IaaS (OpenStack) and Processes Management (CloudForms), Containers building, instances creation, HA services management, workflows build.

Register to download the Red Hat Container Development Kit and accept the terms and conditions of the Red Hat Developer Program, which provides no-cost subscriptions for development use only.

Last updated: April 6, 2017