OpenShift 4.1

Make sure the prerequisites for StorageOS are satisfied before proceeding.

If you have installed OpenShift 4.1 in AWS ensure that the requisite ports are opened for the worker nodes’ security group.

 

Installing StorageOS on OpenShift 4.1 has fewer prerequisites as compared to previous OpenShift 3.x versions.

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

Options:

OperatorHub install

StorageOS has a RedHat OpenShift certified operator in the OpenShift OperatorHub. You can install the StorageOS operator through the OperatorHub.

  1. Select the OperatorHub from the Catalog sub menu and search for StorageOS

    install-1

  2. Select StorageOS and click install

    install-2

  3. Create the Operator subscription by clicking subscribe

    install-3

  4. Wait until the Upgrade Status shows 1 installed

    install-4

  5. Create a secret containing an apiUsername and an apiPassword key. The username and password defined in the secret will be used to authenticate when using the StorageOS CLI and GUI. Take note of which project you created the secret in.

    install-5   install-6

  6. Go to Installed Operators and select the StorageOS operator. Select StorageOS Cluster and create a StorageOS cluster.

    install-7

  7. The StorageOS cluster resource describes the StorageOS cluster that will be created. The secretRefName and secretRefNamespace should reference the secret containing the apiUsername and apiPassword that was previously created.

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

     apiVersion: storageos.com/v1
     kind: StorageOSCluster
     metadata:
       name: storageos
       namespace: openshift-operators
     spec:
       secretRefName: "storageos-api" # Reference the Secret created in the previous step
       secretRefNamespace: "openshift-operators"  # Namespace of the Secret created in the previous step
       namespace: kube-system
       csi:
         enable: true
         deploymentStrategy: deployment
       resources:
         requests:
         memory: "512Mi"
       k8sDistro: "openshift"
    

    install-8

  8. Verify that the StorageOS Resource enters a running state.

    install-9

  9. The StorageOS CSI helper needs to mount a CSI Socket into the container so on each node add the svirt_sandbox_file_t flag to the CSI socket directory and CSI socket.

    bash chcon -Rt svirt_sandbox_file_t /var/lib/kubelet/plugins_registry/storageos

  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.

 

Manual install

This installation procedure is available in case of the default method is not suited to your requirements. The following procedure requires a higher number of actions to fulfil the installation of the StorageOS cluster in comparison with the default procedure. There is also a higher number of configuration parameters to be tuned.

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 https://github.com/storageos/cluster-operator/releases/download/1.3.0/storageos-operator.yaml

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
metadata:
  name: "storageos-api"
  namespace: "storageos-operator"
  labels:
    app: "storageos"
type: "kubernetes.io/storageos"
data:
  # echo -n '<secret>' | base64
  apiUsername: c3RvcmFnZW9z
  apiPassword: c3RvcmFnZW9z
END

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: "storageos.com/v1"
kind: StorageOSCluster
metadata:
  name: "example-storageos"
spec:
  secretRefName: "storageos-api" # Reference from the Secret created in the previous step
  secretRefNamespace: "storageos-operator"  # Namespace of the Secret
  images:
    nodeContainer: "storageos/node:1.3.0" # StorageOS version
  csi:
    enable: true
    deploymentStrategy: deployment
  resources:
    requests:
    memory: "512Mi"
  k8sDistro: "openshift"
END

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

You can find more examples such as deployments referencing a external etcd kv 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.

4. Set SELinux Permissions

The StorageOS CSI helper needs to mount a CSI Socket into the container so on each node add the svirt_sandbox_file_t flag to the CSI socket directory and CSI socket.

    ```bash
chcon -Rt svirt_sandbox_file_t /var/lib/kubelet/plugins_registry/storageos
```

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.