Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubecon 2017: Storage Developments for Stateful...

Avatar for Michelle Au Michelle Au
December 08, 2017

Kubecon 2017: Storage Developments for Stateful Workloads

Covers two new Kubernetes storage features that will benefit stateful, distributed workloads: local persistent volumes, and raw block volumes.

Avatar for Michelle Au

Michelle Au

December 08, 2017
Tweet

More Decks by Michelle Au

Other Decks in Technology

Transcript

  1. Expected Knowledge Kubernetes • Pods • Labels • Nodes •

    PersistentVolumeClaims • PersistentVolumes • StorageClasses • StatefulSets
  2. Background Local Persistent Volumes & Raw Block Volumes Stateful, Distributed

    Workloads • Cassandra, MongoDB, GlusterFS, etc. • Replicate sharded data for high availability, fault tolerance • Critical infrastructure / applications • Data locality for performance • Data gravity • Execute on where the data is today • High performance tuning
  3. Background Kubernetes Features that benefit stateful workloads • StatefulSets for

    stable identity and volumes • Pod Disruption Budget for controlled disruption • Pod Affinity, Anti-Affinity for co-location, spreading (1.6 beta) • Pod Priority and Preemption (1.8 alpha)
  4. Problem Difficult to access high performance local storage Hostpath volumes

    have a lot of problems • Not portable • Security risk! apiVersion: v1 kind: Pod metadata: name: my-pod spec: nodeName: node-1 volumes: - name: data hostPath: path: /mnt/some-disk containers: ...
  5. Problem Today’s workarounds • Manually maintain a Pod spec for

    each node • Custom scheduler and/or operator • Custom local disk reservation and lifecycle manager Consequences • Can’t leverage existing Kubernetes features • StatefulSets, scaling, rolling updates, etc. • High barrier to entry for adopting Kubernetes
  6. Local Persistent Volumes Extend existing PersistentVolumeClaim, PersistentVolume model • PVC:

    User’s storage requests • “I need 100GB of fast storage” • PV: Cluster’s specific volume implementation • “I have a 100GB local volume available on node-1 at /mnt/disks/ssd0” User PVClaim Pod Cluster Admin PersistentVolumes
  7. Example: User’s Pod and Claim apiVersion: v1 kind: Pod metadata:

    name: my-pod spec: nodeName: node-1 volumes: - name: data hostPath: persistentVolumeClaim: path: /mnt/some-disk claimName: my-pvc containers: ... apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 100Gi storageClassName: my-class
  8. Example: Admin apiVersion: v1 kind: PersistentVolume metadata: Name: local-volume-1 spec:

    accessModes: - ReadWriteOnce capacity: storage: 100Gi storageClassName: my-class local: path: /tmp/my-test1 nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - node-1 User PVClaim Pod Cluster Admin PersistentVolumes
  9. Local Persistent Volumes 1.7 Alpha • “Local” PersistentVolume type with

    NodeAffinity • Scheduler logic for data gravity 1.9 Alpha • Perform PVC/PV binding during pod scheduling User PVClaim Pod Cluster Admin PersistentVolumes
  10. Local Persistent Volumes •Portable, consistent user experience • Across local

    and remote storage • Across clusters, environments •General mechanism for volume topology •Lowers the barrier for distributed, stateful workloads
  11. Raw Block Volumes 1.9 alpha feature goals • Expose Raw

    block devices in line with Kube primitives • Enable durable access to raw block storage • Provide flexibility for users/vendors to support all storage types • Prior to v1.8 all users got a volume with a filesystem • Break GitHub
  12. apiVersion: v1 kind: PersistentVolume metadata: Name: local-volume-1 spec: volumeMode: Block

    capacity: storage: 100Gi storageClassName: my-class local: path: /dev/xdb nodeAffinity: ... Example: Admin
  13. Example: User’s Pod and Claim apiVersion: v1 kind: PersistentVolumeClaim metadata:

    name: raw-pvc spec: volumeMode: Block accessModes: - ReadWriteOnce storageClassName: my-class resources: requests: storage: 100Gi apiVersion: v1 kind: Pod metadata: name: my-db spec: containers: - name: mysql image: mysql volumeDevices: - name: my-db-data devicePath: /var/lib/mysql volumes: - name: my-db-data persistentVolumeClaim: claimName: raw-pvc
  14. Demo See how easy it is to switch between remote

    and local storage! Replicated MySQL example using StatefulSets: https://kubernetes.io/docs/tasks/run-application/run-replicated-stateful-application/ Try it out yourself: • Follow local volume user guide to bring up a cluster with some local disks • Take existing StatefulSet examples and Helm charts, and change the StorageClassName in the PersistentVolumeClaim to your local StorageClass
  15. Summary 1.9 Alpha Features • Local persistent volumes with node

    affinity and smarter scheduling • Consumption of statically provisioned raw block persistent volumes for Fibre Channel Building blocks for stateful, distributed, performant workloads
  16. Future • Dynamically provision volumes during pod scheduling • Dynamically

    provision raw block volumes • Raw block support for remaining volume plugins: • Local volumes • GCE PD • AWS EBS • GlusterFS • Ceph • Cinder •CSI interface update for block devices
  17. Questions? Images by Connie Zhou http://kubernetes.io Erin Boyd <[email protected]> Michelle

    Au <[email protected]> Github: @erinboyd Github: @msau42 Twitter: @erinaboyd Twitter: @_msau42_ Get Involved! • Kubernetes Storage Special-Interest-Group (SIG) • Bi-monthly meetings Thursdays at 9 AM (PST) • http://slack.k8s.io/