17
Persistence Patterns for Containers Steve Watt, Red Hat CC flickr @dopey

Persistence patterns for containers

Embed Size (px)

Citation preview

Page 1: Persistence patterns for containers

Persistence Patterns for Containers

Steve Watt, Red HatCC flickr @dopey

Page 2: Persistence patterns for containers

The basics of configuring persistence for containers- Must be a filesystem- Always use a mount (docker -v)- Mounts can be host-local or a network storage asset (that is mounted to the

host).- Read and Write data to the mount point.- Don’t store data in the container itself- Also a good way to manage non-compiled code

Container

Host O/S

Host Local FileSystemNetwork Storage AssetMount

docker -v mount (bind mount)

Page 3: Persistence patterns for containers

Common choices for container I/O

- Block (POSIX Single Reader/Writer): - i.e. AWS EBS, ISCSI, Ceph RBD, Local Host File System

- Shared File (POSIX Multiple Readers/Writers): - i.e. AWS EFS, NFS, GlusterFS

- Object (Non-POSIX GET/PUT, Immutable): - i.e. Minio, Ceph Object Gateway, AWS S3

Page 4: Persistence patterns for containers

Common container persistence concerns- Availability: Most of this runs on commodity hardware. Things fail.- Locking (Differences between Shared FileSystems vs. File on Block Devices)- Mount Driver availability on host- Security, ACLs, SELinux- Storage Plugin Support for your specific desired storage (NetApp, Gluster,

etc.)- Storage Tiers, QoS, etc.

Page 5: Persistence patterns for containers

Why do we need container orchestration?

Page 6: Persistence patterns for containers

Storage Plugins that most Orchestration platforms offer (or will soon offer):

- ISCSI- Cinder- NFS- AWS EBS- GCE Persistent Disks- Azure Storage- GlusterFS- Ceph- EMC Portfolio- FibreChannel

Page 7: Persistence patterns for containers

So let’s explore these concepts via a simple microservice

Web ApplicationContainer

MicroserviceClient

RDBMS Container

HTTP

Page 8: Persistence patterns for containers

How the containers run on the host they get scheduled on

Web ApplicationContainer

Microservice

RDBMS Container

node-1.example.com

/opt/app/service.php

172.17.0.2

mount host directory

vol-0b7eaad4mount EBS Disk

/var/lib/mysql

Page 9: Persistence patterns for containers

NGINX Web Application[fedora@node-2] $ cat /opt/app/service.php <?php $host= gethostname(); $ip = gethostbyname($host);

$mysqli = new mysqli($ip, "myUserName", "myPassword", "us_states"); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;}

if ($result = $mysqli->query("SELECT * from states")) {

$result->data_seek(0); while ($row = $result->fetch_assoc()) { echo " The State of ".$row['state']; echo " has a population of ".$row['population']; echo " \n"; }

$result->close();

} else {echo "No result";}?>

Page 10: Persistence patterns for containers

So how can we attach storage to that?Let’s take a look at several patterns for how we can make persistence available to our container platforms

- Pet storage- Cattle Storage- Dynamic Provisioning

The examples from the demos I’ll be showing are available at:

https://github.com/wattsteve/docker-meetup

Page 11: Persistence patterns for containers

Pet Storage

Adds Storage Connection Info to Container Deployer

Deploy Containers

Orchestration InterfaceDeveloper

CC flickr @torek @menard_mickael

Storage Admin

“Hi Sue, can you create a Ceph RBD Disk & send me the connection info?”

1

2

3

Page 12: Persistence patterns for containers

Cattle Storage

Submit Storage ClaimClaim

Deploy Containers Referencing Claim

Orchestration InterfaceDeveloper

CC flickr @torek

Register Storage Connection Objects for specific storage assets

Pool of Storage Connection Objects

StorageAdministrator

1

2

3

4Release Claim When it is no longer needed, the claim can be released and the storage asset attached to it can be automatically wiped and placed back in the pool.

Page 13: Persistence patterns for containers

But, there’s a new way of thinking about storage on-premise

Page 14: Persistence patterns for containers

Cattle Storage 2.0 (Dynamic Provisioning)

Submit Storage ClaimCreate me an EBS Disk

Deploy Containers Referencing Claim

AWS EBS Provisioner

Orchestration InterfaceDeveloper

CC flickr @torek

1

2

3 Release Claim Deletes the associated EBS Disk

Page 15: Persistence patterns for containers

Storage Tiering

Gold Ceph RBD SSD Susan

Silver Ceph RBD Magnetic Dave, Rob

Bronze EBS GP SSD Rob

Copper EBS IOPS SSD Mike, Dave, Rob

Iron EBS Magnetic Everyone

Page 16: Persistence patterns for containers

Compute & Storage Containers HyperConverged

RHGS ContainerStorage ContainerStorage Platform

Host 2Host 1

Storage Container

NGINX ContainerSpark Container

https://github.com/wattsteve/glusterfs-kubernetes

Host Local FileSystem Host Local FileSystem

Page 17: Persistence patterns for containers

Thanks for listeningIf you have more questions, you can reach me on:

Email: [email protected]

Twitter: @wattsteve

GitHub: https://github.com/wattsteve/

Slack: @wattsteve (http://slack.kubernetes.io/)