Slide 1

Slide 1 text

1 OpenShift Meetup #6 コンテナストレージの基礎理解 2019/09/11 Red Hat K.K.

Slide 2

Slide 2 text

コンテナにストレージが必要とされる理由 2 コンテナストレージの基礎理解 Data Apps Cloud Apps Systems of Engagement Systems of Record Web and Commerce Software Mobile Apps Social Apps 77% 71% 62% 62% 57% 52% 46% Base: 194 IT operations and development decision-makers at enterprise in APAC, EMEA, and North America Source: A commissioned study conducted by Forrester Consulting on behalf of Red Hat, January 2015 “どのようなワークロード /アプリケーションでコンテナを利用している /しようと思っていますか? ” ● コンテナは本来揮発的(ephemeral) ● ステートフルなアプリケーションには永続的なストレージが必須

Slide 3

Slide 3 text

Persistent Volume (PV) 3 コンテナストレージの基礎理解 ● KubernetesのPodが利用できる永続ストレージ ● 様々な形態のストレージをKubernetesが抽象化した姿 LUN, Volume, ... VMDK, QCOW2, ... Persistent Volume Bare Metal Server Virtual Server Kubernetes Pod

Slide 4

Slide 4 text

Persistent Volume Claim (PVC) 4 コンテナストレージの基礎理解 ● ユーザー自身がセルフサービスで PVを欲しいときに要求できる 1. ユーザーがPVをリクエスト(PVC作成) 3. Podにattach App 2. PV Bind apiVersion: v1 kind: PersistentVolumeClaim metadata: name: app-pvc spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 10Gi storageClassName: sc-01 10GB

Slide 5

Slide 5 text

PVC - sc-01 - 20GB PVC - 20GB ○ Static Provisioning ○ あらかじめ登録されたPVのうち、上げられた PVCの要件に合うPVがBind PVのProvisioning 5 コンテナストレージの基礎理解 20GB 10GB 10GB 10GB 20GB 20GB 20GB あらかじめPVを作って登 録しておく ストレージ管理者 ユーザー 20GB StorageClass sc-01 StorageClass sc-02 StorageClassを定義 ストレージ管理者 ユーザー PVCの要件に合うPVがBind ○ Dynamic Provisioning ○ Storage Classでバックエンドのストレージを 定義、PVCの要件に応じてリアルタイムに Volumeを作りPVとしてBind PVCの要件に合うPVがその場で作られてBind

Slide 6

Slide 6 text

Storage Class 6 コンテナストレージの基礎理解 ● バックエンドのストレージシステムを定義し、ユーザーから隠蔽できる ● Dynamic Provisioningはストレージシステムに対応する provisioner(volume plugin)が必要 apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: sc-01 provisioner: kubernetes.io/aws-ebs parameters: type: gp2 reclaimPolicy: Retain allowVolumeExpansion: true mountOptions: - debug volumeBindingMode: Immediate StorageClass StorageClass StorageClass Hardware-appliance Storage Cloud Storage Software-defined Storage

Slide 7

Slide 7 text

Access Mode 7 コンテナストレージの基礎理解 Persistent Volume Persistent Volume Persistent Volume ○ Read Write Once (RWO) ○ 1ノードからRead/Write可能 ○ Read Only Many (ROX) ○ 複数ノードから同時に Read-Onlyでアクセス 可能 ○ Read Write Many (RWX) ○ 複数ノードから同時に Read/Write可能 ReadOnly ● PVごとに設定されるPVへのアクセス制御 ● PVCで指定する

Slide 8

Slide 8 text

Raw Block Volume 8 コンテナストレージの基礎理解 ● PVはファイルシステムでフォーマットし、 PodのmountPathにマウントすることが一般的だが、 Raw Deviceとし てPVをattachすることも可能 apiVersion: v1 kind: Pod metadata: name: app spec: containers: - image: xxx ... volumeMounts: - name: datavol mountPath: /mnt/data volumes: - name: datavol persistentVolumeClaim: claimName: app-pvc App /mnt/dataにmount apiVersion: v1 kind: Pod metadata: name: app spec: containers: - image: xxx ... volumeDevices: - name: datavol devicePath: /dev/xvdb volumes: - name: datavol persistentVolumeClaim: claimName: block-pvc App /dev/xvdbにattach apiVersion: v1 kind: PersistentVolumeClaim metadata: name: block-pvc spec: accessModes: - ReadWriteOnce volumeMode: Block resources: requests: storage: 10Gi

Slide 9

Slide 9 text

Kubernetes Volume Plug-in 9 コンテナストレージの基礎理解 ● 外部のストレージシステムと連携するためのプラグイン Volume Plugin ReadWriteOnce ReadOnlyMany ReadWriteMany AWSElasticBlockStore ✓ - - AzureFile ✓ ✓ ✓ AzureDisk ✓ - - CephFS ✓ ✓ ✓ Cinder ✓ - - CSI depends on the driver depends on the driver depends on the driver FC ✓ ✓ - Flexvolume ✓ ✓ depends on the driver Flocker ✓ - - GCEPersistentDisk ✓ ✓ - Glusterfs ✓ ✓ ✓ HostPath ✓ - - iSCSI ✓ ✓ - Quobyte ✓ ✓ ✓ NFS ✓ ✓ ✓ RBD ✓ ✓ - VsphereVolume ✓ - - (works when pods are collocated) PortworxVolume ✓ - ✓ ScaleIO ✓ ✓ - StorageOS ✓ - - Kubernetes Concepts : Persistent Volumes https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistent-volumes