OpenShift
Install StorageOS on OpenShift v4
Make sure the prerequisites for StorageOS are satisfied before proceeding.
If you have installed OpenShift 4.3 in AWS ensure that the requisite ports are opened for the worker nodes’ security group.
Installing StorageOS on OpenShift 4.3 has fewer prerequisites as compared to previous OpenShift 3.x versions.
The recommended way to run StorageOS on OpenShift 4.3 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.
-
Select the
OperatorHub
from the Catalog sub menu and search for StorageOS -
Select StorageOS and click install
-
Create the Operator subscription by clicking subscribe
-
Wait until the Upgrade Status shows 1 installed
-
Create a secret containing an
apiUsername
and anapiPassword
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. -
Go to
Installed Operators
and select the StorageOS operator. Select StorageOS Cluster and create a StorageOS cluster. -
The StorageOS cluster resource describes the StorageOS cluster that will be created. The
secretRefName
andsecretRefNamespace
should reference the secret containing theapiUsername
andapiPassword
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"
-
Verify that the StorageOS Resource enters a running state.
-
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.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
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:
- Install StorageOS Operator
- Create a Secret for default username and password
- Trigger bootstrap using a CustomResource
- Apply StorageOS licence
1. Install StorageOS operator
Install the StorageOS Cluster Operator using the following yaml manifest.
oc create -f https://github.com/storageos/cluster-operator/releases/download/1.5.4/storageos-operator.yaml
Verify the Cluster Operator Pod Status
[root@master03]# 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.
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
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.
apiVersion: "storageos.com/v1"
kind: StorageOSCluster
metadata:
name: "example-storageos"
namespace: "storageos-operator"
spec:
secretRefName: "storageos-api" # Reference from the Secret created in the previous step
secretRefNamespace: "storageos-operator" # Namespace of the Secret
k8sDistro: "openshift"
images:
nodeContainer: "storageos/node:1.5.4" # StorageOS version
csi:
enable: true
deploymentStrategy: deployment
resources:
requests:
memory: "512Mi"
# nodeSelectorTerms:
# - matchExpressions:
# - key: "node-role.kubernetes.io/worker" # Compute node label will vary according to your installation
# operator: In
# values:
# - "true"
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
[root@master03]# oc -n kube-system get pods -w
NAME READY STATUS RESTARTS AGE
storageos-csi-helper-5cf59b5b4-f5nwr 2/2 Running 0 3m
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.
5. 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.
chcon -Rt svirt_sandbox_file_t /var/lib/kubelet/plugins_registry/storageos
Install StorageOS on OpenShift 3.11
The recommended way to run StorageOS on an OpenShift 3.11 cluster is to deploy the StorageOS Cluster Operator and bootstrap StorageOS using a Custom Resource.
Prerequisites
-
Ensure any firewalls permit the appropriate ports.
-
If your cluster enables SELinux, add the following permissions for each of the nodes that run StorageOS.
bash setsebool -P virt_sandbox_use_fusefs on setsebool -P virt_use_fusefs on
The
-P
option makes the change persistent after reboots. -
Ensure that your docker installation has mount propagation enabled per our mount propagation prerequisites.
-
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):
kubernetesMasterConfig: apiServerArguments: feature-gates: - MountPropagation=true controllerArguments: feature-gates: - MountPropagation=true
-
Add to the feature-gates to the kubelet arguments (/etc/origin/node/node-config.yaml):
kubeletArguments: feature-gates: - 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
-
Install
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:
- Install StorageOS Operator
- Create a Secret for default username and password
- Trigger bootstrap using a CustomResource
- Apply StorageOS licence
1. Install StorageOS operator
Install the StorageOS Cluster Operator using the following yaml manifest.
oc create -f https://github.com/storageos/cluster-operator/releases/download/1.5.4/storageos-operator.yaml
Verify the Cluster Operator Pod Status
[root@master03]# 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.
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
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.
apiVersion: "storageos.com/v1"
kind: StorageOSCluster
metadata:
name: "example-storageos"
namespace: "storageos-operator"
spec:
secretRefName: "storageos-api" # Reference from the Secret created in the previous step
secretRefNamespace: "storageos-operator" # Namespace of the Secret
k8sDistro: "openshift"
images:
nodeContainer: "storageos/node:1.5.4" # StorageOS version
disableScheduler: true
resources:
requests:
memory: "512Mi"
# nodeSelectorTerms:
# - matchExpressions:
# - key: "node-role.kubernetes.io/worker" # Compute node label will vary according to your installation
# operator: In
# values:
# - "true"
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
[root@master03]# oc -n kube-system get pods -w
NAME READY STATUS RESTARTS AGE
storageos-daemonset-75f6c 1/1 Running 0 3m
storageos-daemonset-czbqx 1/1 Running 0 3m
storageos-daemonset-zv4tq 1/1 Running 0 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.
Install StorageOS on OpenShift 3.9
The recommended way to run StorageOS on an OpenShift 3.9 cluster is to deploy the StorageOS Cluster Operator and bootstrap StorageOS using a Custom Resource.
Prerequisites
-
Ensure any firewalls permit the appropriate ports.
-
If your cluster enables SELinux, add the following permissions for each of the nodes that run StorageOS.
bash setsebool -P virt_sandbox_use_fusefs on setsebool -P virt_use_fusefs on
The
-P
option makes the change persistent after reboots. -
Ensure that your docker installation has mount propagation enabled per our mount propagation prerequisites.
-
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):
kubernetesMasterConfig: apiServerArguments: feature-gates: - MountPropagation=true controllerArguments: feature-gates: - MountPropagation=true
-
Add to the feature-gates to the kubelet arguments (/etc/origin/node/node-config.yaml):
kubeletArguments: feature-gates: - MountPropagation=true
Warning: Restarting OpenShift services can cause downtime in the cluster.
- Restart services in the MasterNode
origin-master-api.service
,origin-master-controllers.service
andorigin-node.service
- Restart service in all Nodes
origin-node.service
Usually through
systemctl restart (origin-node.service|atomic-openshift-node.service)
-
Install
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:
- Install StorageOS Operator
- Create a Secret for default username and password
- Trigger bootstrap using a CustomResource
- Apply StorageOS licence
1. Install StorageOS operator
Install the StorageOS Cluster Operator using the following yaml manifest.
oc create -f https://github.com/storageos/cluster-operator/releases/download/1.5.4/storageos-operator.yaml
Verify the Cluster Operator Pod Status
[root@master03]# 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.
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
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.
apiVersion: "storageos.com/v1"
kind: StorageOSCluster
metadata:
name: "example-storageos"
namespace: "storageos-operator"
spec:
secretRefName: "storageos-api" # Reference from the Secret created in the previous step
secretRefNamespace: "storageos-operator" # Namespace of the Secret
k8sDistro: "openshift"
images:
nodeContainer: "storageos/node:1.5.4" # StorageOS version
disableScheduler: true
resources:
requests:
memory: "512Mi"
# nodeSelectorTerms:
# - matchExpressions:
# - key: "node-role.kubernetes.io/worker" # Compute node label will vary according to your installation
# operator: In
# values:
# - "true"
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
[root@master03]# oc -n kube-system get pods -w
NAME READY STATUS RESTARTS AGE
storageos-daemonset-75f6c 1/1 Running 0 3m
storageos-daemonset-czbqx 1/1 Running 0 3m
storageos-daemonset-zv4tq 1/1 Running 0 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.