Containerized Storage for Containers: Why, What and How OpenEBS Works
Transcript of Containerized Storage for Containers: Why, What and How OpenEBS Works
Containerized Storage for Containers
Kubernetes LA Meetup July 18, 2017@OpenEBSEvan Powell - @epowell101
Who?
Team of storage and DevOps engineers with a 5 year track record of delivering containerized storage (built on jails) to NTT, eSilicon, TCS and other service providers.
CloudByte is the pre-existing SDS brand.
Evan Powell, CEODirector of Ops & BD who started founding companies back in 2000 and is still at it. Also an investor and advisor and friend to enterprise focused entrepreneurs.
Joined as CloudByte / Open EBS CEO 7/1/17
What if storage for container native applications was itself container native?
✓ Intent inherited ✓ Scale w/o bottlenecks
✓ No special skills needed ✓ Granularity
✓ Resiliency ✓ Inate multitenancy
✓ Multi-cloud portability ✓ Smaller “blast radius”
Manifests express intent
K8S used with special care for apps requiring persistence because they require brittle tight coupling.
Hard wired connections via plug-in“IO Blender”
Container 1(Node1)
Container 2(Node 2)
Container 3(Node 3)
stateless stateful
Stateful still too difficult
Container 1 Container 2 Container 3
Container 1 Container 2 Container 3
NAS SAN S3 NAS Cloud
Any Server, Any Cloud
Manifests express intent
stateless
✓ Intent inherited
Container 1 Container 2 Container 3
Container 1 Container 2 Container 3
Container 1 Container 2 Container 3
stateful
No changes to DevOps workflow even for containers requiring persistence. Users manifest their intent and the storage and storage controllers adjust automatically as needed.
Data Container Data Container Data Container
Containerized storage for containersAny Server, Any Cloud Any Server, Any Cloud
✓ Same workflow, same tools, same experts
Volumes
Provisioners
PVC/PV
StorageClasses
Attach/Detach Controllers
CNCF/CSI
Container 1 Container 2 Container 3
Data Container Data Container Data Container
stateful
Containerized storage for containers
Dynamic Provisioning
High Availability
Data Protection
Storage Silos, Kubernetes Managed
Vendor Lock-in, Cross cloud
Slow Upgrades, Seamless Upgrades
Monolithic!, MicroservicesAny Server, Any Cloud
Storage Orchestration - K8s Vs OpenEBS
Functionality K8s OpenEBS
Volume Life-cycle - provisioning, attaching/detach, de-provisioning X
Monitoring the volume data X
Scheduling the volume provisioning intelligently X
Smart space management X
Availability of volume X
Application aware backup/snapshots X
QoS guarantee (latency guarantee) X
Smart movement of the volumes across racks and regions X
Cataloging of storage requirements for different applications X
K8s takes care of connecting applications to stateful storage. OpenEBS answers the other persistent storage questions
Storage just fades away as a concern
How is OpenEBS built ?
Storage containerization
Storage orchestration
Deep storage operations
Core Storage features
is built using
is integrated with
is built into (OpenEBS “Maya”)
is built into (OpenEBS)
(Control plane)Smart Capacity Management Volume Latency Monitoring and Auto-healingAdapt to varying workloads - Application Aware Storage (Pods)AWS EBS Like APIsStorage Analytics
(Data Plane)Containerized volumesThin and scalable block storageEnterprise HA Intelligent QoSSmart Tiering for higher performance
Why move the data & configs next to the app?Today’s scale out storage systems are almost infinitely configurable. Matching their configurations to static workloads is difficult. In a world of dynamic, ever evolving workloads due to micro-services and multi-cloud deployments, it is not a tractable problem for humans.
Let’s say you want to benchmark for your workload:
Source: Alex Aizman’s blog: https://storagetarget.com/author/alexaizman/
Why move the data & configs next to the app?Today’s scale out storage systems are almost infinitely configurable. Matching their configurations to static workloads is difficult. In a world of dynamic, ever evolving workloads due to micro services and multi-cloud deployments, it is not a tractable problem for humans.
Let’s say you want to benchmark for your workload:
Duration of run ~6,700 yearsSource: Alex Aizman’s blog: https://storagetarget.com/author/alexaizman/
More benefits of Cloud Native approach
OpenEBS always available multi-cloud block services are delivered via containerized microservices
Granularity: Each pod has its own block protocol stack, tiering engine, QoS engine and more. SLAs per POD.
Performance & efficiency: access patterns maintained per-volume. Hot-data on NVMe-Flash or on 3DX-Memory. Cold-data on slower disks / SAN/ Cloud-Storage/S3.
Scalability: Metadata based on “size of the volume” & not on “number of volumes”. Can reduce metadata traversal 100x.
Blast radius: Eliminates risk of scale out storage system corruption.
And much, much more such as cost savings due to resource efficiency, innate multitenancy, and cross cloud portability
The Conway’s Law benefits might be the most important - innovation unlocked
✓✓
✓✓
✓ Scalbility - no metadata bottleneck
Global Metadata at a system level
Logical volumes
Lun
Application
Metadata is managed at block level
IO Blocks
IO Blocks
100TB Raw
8 TB Meta
100TB Raw
XFS Meta data XFS Meta data2 TB Meta
2 TB Meta
Logical Volumes in XFS files
Volumemeta
Lun
Application
IO Blocks
IO ChunksMetadata of the volume is managed at chunk level
100 GBMeta
The volume IO processing has to deal with the global metadata of 8TB
The volume IO processing has to deal with the volume metadata of 100GB
Cluster Admin - Enabling OpenEBS on K8s
K8s master K8s minionsStep 1: Use can existing K8s Cluster or Launch a new Cluster (locally or in your fav cloud provider or use stackpoint.io to create a cluster.)
Step 2: Configure OpenEBS on K8s.
kubectl apply -f openebs-operator.yaml
Step 3: Configure or Customize OpenEBS
kubectl apply -f openebs-config.yaml kubectl apply -f openebs-storageclasses.yaml
https://github.com/openebs/openebs/tree/master/k8s
Developer - Using OpenEBS PVs
Step 1: Checkout the StorageClasses available
kubectl get sc
Step 2: Modify the Application YAML to use the openebs storage class.
kubectl apply -f demo-jupyter-openebs.yaml
https://github.com/openebs/openebs/blob/master/k8s/demo/jupyter/demo-jupyter-openebs.yaml
K8s master K8s minions
Step 3: Launch Jupyter UI
http://<external-ip>:<port>/
Admin’s interaction with OpenEBS
K8s master K8s minions
Storage classesCentral Repo
Install OpenEBS
kubectl apply -f openebs-operator.yaml
kubectl apply -f openebs-storageclasses.yaml
kubectl apply -f openebs-config.yaml
1
2
3
Developer’s interaction with OpenEBS
K8s master K8s minions
- Data science developer- Wants to set up a jupyter notebook (not an expert in storage)
1
kubectl apply -f demo-jupyter-openebs.yaml
2
- Configure the jupyter yaml file for all the jupyter functionality
- Read the available OpenEBS storage classes and choose one
- Launch the jupyter application
kubectl get sc
In short….
Pod 1
OR
Pod 1VS
Cloud Native Cloud Washing
Q&A
Join the community
#slackSlack.openebs.io
blog.openebs.io
@openebs
What do you think?
https://github.com/openebs
Join the community
#slackSlack.openebs.io
blog.openebs.io
@openebs
https://www.openebs.io/careers/
Join Us and contribute to Kubernetes
- Prioritized Replication Networking/Storage
- Federated Clusters- Analytics and ML Services- CNCF/CSI