OpenShift 3.10

The recommended way to run StorageOS on an OpenShift 3.10 cluster is to deploy the StorageOS Cluster Operator and bootstrap StorageOS using a Custom Resource.


  1. Ensure any firewalls permit the appropriate ports
  2. If your cluster enables SELinux, add the following permissions for each of the nodes that run StorageOS.
    setsebool -P virt_sandbox_use_fusefs on
    setsebool -P virt_use_fusefs on

    The -P option makes the change persistent after reboots.

  3. Ensure that your docker installation has mount propagation enabled per our mount propagation prerequisites
  4. Enable the MountPropagation flag by appending feature gates to the api and controller (you can apply these changes using the Ansible Playbooks)

Note: If you are using atomic installation rather than origin, the location of the yaml config files and service names might change.

  • Add to the KubernetesMasterConfig section (/etc/origin/master/master-config.yaml):

        - MountPropagation=true
        - MountPropagation=true
  • Add to the feature-gates to the kubelet arguments (/etc/origin/node/node-config.yaml):

      - MountPropagation=true

Warning: Restarting OpenShift services can cause downtime in the cluster.

  • Restart services in the MasterNode/s
    master-restart api
    master-restart controllers
    # Restart kubelet
    systemctl restart atomic-openshift-node.service
  • Restart service in all Nodes
    # Restart kubelet
    systemctl restart atomic-openshift-node.service



The StorageOS Cluster Operator is a Kubernetes native application developed to deploy and configure StorageOS clusters, and assist with maintenance operations. We recommend its use for standard installations.

The operator is a Kubernetes controller that watches the StorageOSCluster CRD. Once the controller is ready, a StorageOS cluster definition can be created. The operator will deploy a StorageOS cluster based on the configuration specified in the cluster definition.


Helm Note: If you want to use Helm to install StorageOS, follow the StorageOS Operator Helm Chart documentation.

Steps to install StorageOS:

1. Install StorageOS operator

Install the StorageOS operator using the following yaml manifest.

oc create -f

Verify the Cluster Operator Pod Status

[[email protected]]# oc -n storageos-operator get pod
NAME                                         READY     STATUS    RESTARTS   AGE
storageoscluster-operator-68678798ff-f28zw   1/1       Running   0          3m

The READY 1/1 indicates that storageoscluster resources can be created.

2. Create a Secret

Before deploying a StorageOS cluster, create a Secret defining the StorageOS API Username and Password in base64 encoding.

The API username and password are used to create the default StorageOS admin account which can be used with the StorageOS CLI and to login to the StorageOS GUI. The account defined in the secret is also used by Kubernetes to authenticate against the StorageOS API when installing with the native driver.

oc create -f - <<END
apiVersion: v1
kind: Secret
  name: "storageos-api"
  namespace: "storageos-operator"
    app: "storageos"
type: ""
  # echo -n '<secret>' | base64
  apiUsername: c3RvcmFnZW9z
  apiPassword: c3RvcmFnZW9z

This example contains a default password, for production installations, use a unique, strong password.

You can define a base64 value by echo -n "mystring" | base64.

Make sure that the encoding of the credentials doesn’t have special characters such as ‘\n’. The echo -n ensures that a trailing new line is not appended to the string.

If you wish to change the default accounts details post-install please see Managing Users

3. Trigger a StorageOS installation

This is a Cluster Definition example.

oc create -f - <<END
apiVersion: ""
kind: StorageOSCluster
  name: "example-storageos"
  namespace: "storageos-operator"
  secretRefName: "storageos-api" # Reference the Secret created in the previous step
  secretRefNamespace: "storageos-operator"  # Namespace of the Secret
  k8sDistro: "openshift"
    nodeContainer: "storageos/node:1.5.2" # StorageOS version
    memory: "512Mi"
    - matchExpressions:
      - key: ""
        operator: In
        - "true"
  k8sDistro: "openshift"
  disableScheduler: true

Additional spec parameters are available on the Cluster Operator configuration page.

You can find more examples such as deployments with CSI or deployments referencing a external etcd kv store. store for StorageOS in the Cluster Operator examples page.

Verify StorageOS Installation

[[email protected]]# oc -n storageos get pods -w
NAME                                    READY   STATUS    RESTARTS   AGE
storageos-daemonset-75f6c               3/3     Running   0          3m
storageos-daemonset-czbqx               3/3     Running   0          3m
storageos-daemonset-zv4tq               3/3     Running   0          3m
storageos-scheduler-6d67b46f67-5c46j    1/1     Running   6          3m

The above command watches the Pods created by the Cluster Definition example. Note that pods typically take approximately 65 seconds to enter the Running Phase.

First StorageOS volume

If this is your first installation you may wish to follow the StorageOS Volume guide for an example of how to mount a StorageOS volume in a Pod.