How to install OpenEBS on IBM Cloud Private

What is IBM Cloud Private?

IBM Cloud Private (ICP) is a new application platform that is based on Kubernetes and provides services for developing and managing on-premises containerized applications. ICP Community Edition (ICP-CE) is distributed free of charge for non-production use and is available on Docker Hub. For commercial use, you would need the Enterprise package.

In my previous blog post, Introduction to IBM Cloud Private, I have covered step-by-step installation of ICP 2.1. This time I will focus on configuring OpenEBS as a persistent storage option and deploying a stateful workload (MongoDB) using OpenEBS storage classes.


  • Minimum three x64 servers

Install IBM Cloud Private

Follow instructions from Introduction to IBM Cloud Private to deploy a multi-node ICP cluster.

Install OpenEBS on ICP

  1. Log in to the ICP console and go to the Admin/Repositories menu.
  2. Click Add repository.
  3. Add a chart repository with the following parameters:
    Name: openebs-charts
  4. After you click Add, confirm that openebs-charts is listed under Repositories.
  5. Go to the Catalog menu, select openebs from the list.
  6. On OpenEBS chart instructions page, click Configure.
  7. Configure OpenEBS deployment with the following parameters:
    Release name: openebs-<your-release-name> (you need to pick a unique name)
    Target Namespace: default (namespace should be the same as your workload)
    rbacEnable: true
    image pullPolicy: IfNotPresent
    apiserver image: openebs/m-apiserver
    apiserver tag: 0.4.0
    provisione image: openebs/openebs-k8s-provisioner
    provisioner tag: 0.4.0
    jiva image: openebs/jiva:0.4.0
    replicas: 2 (Number of Jiva Volume replicas)
  8. Click Install. When finished click View Helm Release.
  9. On the Helm Release page, you can see the status of OpenEBS, deployment, and available Storage Classes.
  10. Now, let’s try to deploy a stateful app on OpenEBS.

Install MongoDB on OpenEBS

  1. Under Catalog, select ibm-mongodb-dev and click Configure.
  2. Configure MongoDB deployment with the following parameters:
    Release name: mongodb-<your-release-name> (you need to pick a unique name here)
    Target Namespace: default (same as OpenEBS)
    persistence enabled: true
    persistence useDynamicProvisioning: true
    dataVolume storageClassName: openebs-mongodb
    dataVolume size: 2G (default is 20Gi, remove “i” – in current version it is not supported)
    database password: mongo
    Accept the license agreements, keep all the other values as default and click Install.
  3. Go to Workloads/Helm Releases and select your MongoDB release. Under the PersistentVolumeClaim table you are going to see the volume claim and OpenEBS storage class.
  4. If you go to the Workloads/Deployments page, you can find the storage controller and two volume replicas (as configured) running.
  5. Confirm that replicas are running on separate nodes. Click on the PVC name ending with rep (Example:pvc-23025190-c516-11e7-b45e-e8fd90000064-rep). Scroll down, and you will see that pods are running on separate hosts.

You have successfully deployed a stateful application on a persistent block storage presented by OpenEBS.

How does storage HA work for stateful workloads?

High Availability storage (HA storage) is a storage system that is continuously operational. Redundancy is the key feature of HA storage as it allows data to be kept in more than one place while ensuring data protection and consistency.

An OpenEBS Jiva Volume is a controller deployed during the OpenEBS installation. Volume replicas are defined by the parameter we set above. The controller is an iSCSI target while the replicas play the role of a disk. The controller exposes the iSCSI target while the actual data is written. The controller and each replica run inside a dedicated container.

An OpenEBS Jiva Volume controller exists as a single instance, but there can be multiple instances of OpenEBS Jiva volume replicas. Persistent data is synchronized between replicas.

OpenEBS Jiva Volume HA is based on various scenarios as explained in the following sections.

NOTE: Each replica is scheduled in a unique K8s node, and a K8s node never has two replicas of one OpenEBS volume.

What happens when an OpenEBS volume controller pod crashes?

Kubernetes automatically re-schedules the controller as a new Kubernetes pod.
Policies are in place that ensures faster rescheduling.

What happens when a K8s node that hosts OpenEBS volume controller goes offline?

The controller is automatically re-scheduled as a new Kubernetes pod.
Policies are in place that ensures faster rescheduling.
If Kubernetes node is unavailable, the controller gets scheduled on one of the available nodes.

What happens when an OpenEBS volume replica pod crashes for reasons other than node not-ready and node unreachable?

The replica is autoamtically re-scheduled as a new Kubernetes pod.
The replica may or may not be re-scheduled on the same K8s node.
There is data loss with this newly scheduled replica if it gets re-scheduled on a different K8s node.

What happens when a K8s node that hosts OpenEBS volume replica goes offline?

There is no storage downtime as the other available replica displays inputs/outputs.
Policies are in place that does not allow re-scheduling of crashed replica (as the replica is tied to a node’s resources) to any other node.

Please share:

Also published on Medium.

2 thoughts on “How to install OpenEBS on IBM Cloud Private

  1. Valentin Reyome says:

    Great post but I was wondering if you could write a litte more on this topic? I’d be very grateful if you could elaborate a little bit more. Thanks!

  2. Mable Debey says:

    Pretty part of content. I simply stumbled upon your weblog and in accession capital to say that I acquire in fact enjoyed account your blog posts. Anyway I will be subscribing in your augment and even I fulfillment you get right of entry to persistently quickly.|

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.