Storage for Containers using NetApp SolidFire– Part VI

7 minute read

Shipping containers

Overview

In this article we will look at how you can configure and dynamically provision NetApp SolidFire Storage for containerized applications in a Kubernetes/OpenShift environment. This article is a work from Kapil Arora (Cloud Platform Architect @NetApp).

NetApp recently released an open source project known as Trident, the first external storage provisioner for Kubernetes leveraging on-premises storage.

Trident enables the use of the new storage class concept in Kubernetes, acting as a provisioning controller that watches for PVCs (persistent volume requests) and creates them on-demand.

This means that when a pod requests storage from a storage class that Trident is responsible for, it will provision a volume that meets those requirements and make it available to the pod in real-time.

To learn more  check-out these  Trident videos.

This is how it works:

  1. The OpenShift/Kubernetes Administrator deploys and configures Trident with SolidFire and defines StorageClasses and Quotas.
  2. The developer creates a PVC  with the respective StorageClass.
  3. Trident dynamically provisions storage for the developer.

Installation and Configuration Instructions

Steps to install and configure NetApp SolidFire backend with Trident in your OpenShift/Kubernetes environment:

1) Ensure OpenShift 3.4+, or OpenShift Origin 1.4+

Create a service account for trident.

oc create serviceaccount trident
oc adm policy add-cluster-role-to-user storage-admin system:serviceaccount:myproject:trident
oc adm policy add-scc-to-user anyuid system:serviceaccount:myproject:trident
oc adm policy add-role-to-user edit system:serviceaccount:myproject:trident

You can find detailed  instructions here.

2) Install 'kubectl' client for Trident install script

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x ./kubectl 
sudo mv ./kubectl /usr/local/bin/kubectl 

You can find detailed instructions here.

3) Download and untar the Trident installer bundle.

4) Install iscsi initiater utils on all your OpenShift nodes if not already installed.

$ sudo yum install iscsi-initiator-utils

5) Create a VAG (Volume Access Group) name 'trident' on your SolidFire cluster.

6) Add IQNs of all OpenShift nodes to the 'trident' VAG.

$ sudo cat /etc/iscsi/initiatorname.iscsi

Screen Shot 2017-03-16 at 11.32.48

9) Discover iscsi Targets on each node

$ sudo iscsiadm -m discoverydb -t st -p sf-svip.demo.netapp.com --discover

10) Login to discovered iscsi targets

$ sudo iscsiadm -m node -p sf-svip.demo.netapp.com —-login

11) Enable and start iscsi

$ sudo systemctl enable iscsi
$ sudo systemctl start iscsi

Follow instructions here for iscsi multipathing setup.

12) Configure the SolidFire backend. A sample is provided here sample-input/backend-solidfire.json. Copy the edited file to setup/backed.json 

https://gist.github.com/kapilarora/bf73342961aeb7256e04089c097a6055

https://gist.github.com/kapilarora/38b26138e1facb0c03e06c4bbaa42c12

13) Execute Trident installer script.

$ ./install_trident.sh --namespace myproject --serviceaccount trident

14) Wait until the deployment is complte. You should see Trident deployment when you execute 'oc get deployment' and trident pod when you execute 'oc get pods'

15) If you face issues, check this troubleshooting session.

16) Register you backend with Trident

$ cat setup/backend.json | kubectl exec -i -- post.sh backend

17) Edit storage-class-gold.yaml to configure your storage class.

https://gist.github.com/kapilarora/e339f780a8651624dcabe457a4e2724f

18) Create storage class in kubernetes:

$ oc create -f  storage-class-gold.yaml

19) Trident is now installed and we have also defined a storage class for SolidFire.

20) Now Storage is dynamically provisioned when we create a PVC. e.g.

https://gist.github.com/kapilarora/007266ca364db8dc370f1deadc3ecd08

Application use-case

Let us look at how we can deploy a Wordpress application backed by a MySQl database.

In the below example we have use Trident to dynamically provision SolidFire storage for our Wordpress (+ MySQL) application using PVCs and gold StorageClass.

mysql-wordpress-solidfire-openshift

https://gist.github.com/kapilarora/57e6cdfbd618712958ff8e25baaad438

NetApp SolidFire

NetApp SolidFire is a zero-touch,  all flash, scale-out , block-storage system that provides  guaranteed QoS (Quality of Service) to each and every storage volume.

Why SolidFire?

NetApp SolidFire offers following key benefits for your applications:

  1. Guaranteed QoS: With SolidFire you can guarantee minimum, maximum and burst IOPS to each and every Application Volume.
  2. Zero-touch Storage: SolidFire requires minimum possible administration and is literally zero touch infrastructure. It enables your infrastructure teams to not worry about Storage systems and performance and concentrate on automation and business focussed tasks.
  3. Scale-out: SolidFire is a true Scale out storage system which scales upto 100 nodes.
  4. Speed: SolidFire is a all Flash Storage system to power your most demanding applications.
  5. Automation: All SolidFire  operations can be performed using REST based APIs.
  6. Always ON global efficiencies and data assurance

Summary

With NetApp Trident dynamic provisioner NetApp SolidFire zero-touch storage can be provisioned on-demand for your containerized applications.

Trident can help you deploy Stateful containerized applications  e.g.  Databases with NetApp SolidFire.

References

  1. NetApp Trident GitHub project
  2. NetApp thePub website
  3. Join NetApp on Slack
  4. NetApp Trident and OpenShift
  5. Trident Videos

Happy SolidFireing!

(c) 2017 Keith Tenzer