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

コンテナストレージの基礎理解@OpenShift Meetup Tokyo #6

コンテナストレージの基礎理解@OpenShift Meetup Tokyo #6

Takuya Utsunomiya

September 11, 2019
Tweet

More Decks by Takuya Utsunomiya

Other Decks in Technology

Transcript

  1. コンテナにストレージが必要とされる理由 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) • ステートフルなアプリケーションには永続的なストレージが必須
  2. 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
  3. 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
  4. 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
  5. 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で指定する
  6. 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
  7. 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