NoOps Meetup Tokyo #7-ContainerStorage
by
Makoto Watanabe
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
NoOps Meetup Tokyo #7 Kubernetesのデータ管理 どうする? 主に永続化ストレージについて © 2019 NetApp, Inc. All rights reserved. @makotow 2019/07/29 #NoOpsJP
Slide 2
Slide 2 text
2 Conclusion Kubernetes ストレージの必要性と基礎 コンテナストレージの共通仕様 Container Storage Interface (CSI) CSIの機能について まとめ アジェンダ © 2019 NetApp, Inc. All rights reserved.
Slide 3
Slide 3 text
名前: Makoto Watanabe SNS: @makotow 個⼈の⾒解であり 所属する組織の公式⾒解ではありません。 最近同じような話が多いです。 本⽇話す内容は API実装やアーキテクチャの話ではなく、 できることはなにかを話していきます。
Slide 4
Slide 4 text
© 2019 NetApp, Inc. All rights reserved. 4 Kubernetesストレージの 必要性と基礎
Slide 5
Slide 5 text
コンテナストレージの必要性 © 2019 NetApp, Inc. All rights reserved. 5 永続化ストレージ コンテナはステートレス • コンテナ停⽌時にはデータが消える ストレージに求められる要件 • オンデマンドなプロビジョニングが必須 • データを保管するストレージは⾼可⽤性を保ち、 ⾼いデータ保護が必要 様々な箇所からデータを参照できる必要がある どこでコンテナが起動してもデータにアクセス可能 • ポッドがどこにスケジュールされても データにアクセスできる
Slide 6
Slide 6 text
データ永続化をするKubernetes オブジェクト © 2019 NetApp, Inc. All rights reserved. 6 PersistentVolume 管理者によりプロビジョニングされたストレージリソース バックエンドのストレージとマッピングされる PersistentVolumeClaim PersistentVolumeClaimは永続化ストレージに対するユーザの要求・リクエスト StorageClass PVを動的に作成するためのストレージのパラメータ・クラスを記述したもの PVCでStorageClassを指定する
Slide 7
Slide 7 text
Kubernetes ストレージの役割分担 PVC/PVをDeploy・Podから使う場合 © 2019 NetApp, Inc. All rights reserved. 7 Storage Pod generator
Slide 8
Slide 8 text
Kubernetes ストレージの役割分担 誰がどこを準備するのか? © 2019 NetApp, Inc. All rights reserved. 8 Storage Pod generator Dev/利⽤者が責任を持つ範囲 アプリケーションの要求を記述する Ops/管理者が責任を持つ範囲 StorageClass(SC) を作成し利⽤者に公開 PVの作り⽅は2種類ある 1. 要求に応じて動的にプロビジョニング 2. 事前準備・⼿動でプロビジョニング
Slide 9
Slide 9 text
Kubernetes Storage:2つのプロビジョニング⽅法 § Dynamic Provisioning § Static Provisioning(Manual Provisioning) © 2019 NetApp, Inc. All rights reserved. 9
Slide 10
Slide 10 text
Kubernetes Storage:2つのプロビジョニング⽅法 Dynamic Provisioning © 2019 NetApp, Inc. All rights reserved. 10 管理者は事前に StorageClassを定義 アプリケーションに 必要な要件をPVCに記述 管理者が準備した StorageClassを設定 管理者 利⽤者 参照 管理者 利⽤者 bound PVとバックエンドのストレージが ⾃動的にプロビジョニングされ、 PVCにバインドされる。
Slide 11
Slide 11 text
Kubernetes Storage:2つのプロビジョニング⽅法 Static Provisioning(Manual Provisioning) © 2019 NetApp, Inc. All rights reserved. 11 管理者 管理者が事前に StorageClass,PV, バックエンドストレージを 作成・紐付けする 利⽤者 管理者 bound 事前にプロビジョニングされたPV にPVCがバインドされる。
Slide 12
Slide 12 text
© 2019 NetApp, Inc. All rights reserved. 12 Container Storage Interface コンテナストレージの共通仕様
Slide 13
Slide 13 text
Container Storage Interface (CSI) § CSIが始まった背景(簡易的に) § ストレージベンダーはコンテナオーケストレーターごとに ドライバを実装する必要があった § CSIを実装すると § CSIをサポートするコンテナオーケストレーターから統⼀的に使える § 様々なバックエンドストレージを共通的に使える § 利⽤者側への影響はない § Pod、 PVCからは⾒えない コンテナストレージの共通仕様を作ろう © 2019 NetApp, Inc. All rights reserved. 13
Slide 14
Slide 14 text
CSI features § Design Doc に現在のアーキテクチャや 機能実装について記載されています。 https://kubernetes-csi.github.io/docs/ § このあと説明するのは 2.4 Features の機能を ピックアップしてお話します。 § 2.4.8 Data Sources § Alpha ステータスなのでおためし程度で利⽤ください。 2019/7/29 時点のCSIの機能 © 2019 NetApp, Inc. All rights reserved. 14
Slide 15
Slide 15 text
CSI: Data Sources Persistent Volume Claim作成時にデータソースを指定可能に 現時点では以下の2機能が活⽤可能 § VolumeSnapshot § PersistentVolumeClaim (Cloning) © 2019 NetApp, Inc. All rights reserved. 15
Slide 16
Slide 16 text
Volume Cloning PVC 作成時に元となるPVCを選択 © 2019 NetApp, Inc. All rights reserved. 16 dataSource 属性 kind: PersistentVolumeClaim name: クローン元のPVC名 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: clone-of-pvc-1 namespace: myns spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi dataSource: kind: PersistentVolumeClaim name: pvc-1
Slide 17
Slide 17 text
Volume Cloning § CloningはCSIドライバのみで使⽤可能 § Dynamic Provisioningが前提 § CSIドライバはクローニングが実装されていないかもしれない § 実装されているかは要確認 § 現時点では同⼀namespaceのみのクローンをサポート § Clone = Copy on Write? Pointer remapping? § 実装形態はドライバに依存するので要確認 幾つか留意点があります © 2019 NetApp, Inc. All rights reserved. 17
Slide 18
Slide 18 text
Volume Snapshot ある特定時点のデータを保管する 保管したデータからPVCを作成することが可能 § VolumeSnapshotClass § External Snapshotterの指定をする § VolumeSnapshot § ユーザがスナップショットを実⾏する際に作成するオブジェクト § VolumeSnapshotContent § Snapshot⾃体 必要なオブジェクト © 2019 NetApp, Inc. All rights reserved. 18
Slide 19
Slide 19 text
Volume Snapshot 使⽤時のフロー © 2019 NetApp, Inc. All rights reserved. 19 PVC作成時にSnapshotを指定 dataSourceにSnapshot名を記述 Volume Snapshot Class 作成 Volume Snapshot 作成・取得
Slide 20
Slide 20 text
VolumeSnapshot を取得するための VolumeSnapShot Class を作成 © 2019 NetApp, Inc. All rights reserved. 20 apiVersion: snapshot.storage.k8s.io/v1alpha1 kind: VolumeSnapshotClass metadata: name: csi-vsc snapshotter: external snapshotterの名前 parameters: PVC作成時にSnapshotを指定 dataSourceにSnapshot名を記述 Volume Snapshot Class 作成 Volume Snapshot 作成・取得 snapshotter どのCSI のVolume plugin がSnapshot を作成するかを定義 parameters 設定できるパラメータはsnapshotterに依存する
Slide 21
Slide 21 text
Volume Snapshot 作成・取得 © 2019 NetApp, Inc. All rights reserved. 21 apiVersion: snapshot.storage.k8s.io/v1alpha1 kind: VolumeSnapshot metadata: name: vol1-snapshot spec: snapshotClassName: csi-vsc source: name: pvc1 kind: PersistentVolumeClaim PVC作成時にSnapshotを指定 dataSourceにSnapshot名を記述 Volume Snapshot Class 作成 Volume Snapshot 作成・取得 pvc1のスナップを作成
Slide 22
Slide 22 text
PVC作成時にVolumeSnapshot指定 © 2019 NetApp, Inc. All rights reserved. 22 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-from-snap spec: accessModes: - ReadWriteOnce storageClassName: golden resources: requests: storage: 3Gi dataSource: name: vol1-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io PVC作成時にSnapshotを指定 dataSourceにSnapshot名を記述 Volume Snapshot Class 作成 Volume Snapshot 作成・取得
Slide 23
Slide 23 text
Kubernetes ストレージの役割分担 Volume Snapshot/Cloneの 観点 誰がどこを準備するのか? © 2019 NetApp, Inc. All rights reserved. 23 利⽤者が責任を持つ範囲 アプリケーションの要求を記述する • Snapshotを取得する対象のPVCを記述する • PVC作成の際にデータソースを指定する 管理者が責任を持つ範囲 VolumeSnapshotClass(VSC) を 作成し利⽤者に公開 Volume Snapshot Content Volume Snapshot Class Volume Snapshot
Slide 24
Slide 24 text
PVCと似たオブジェクトの関係 利⽤者はVolumeSnapshotを作成する 24 © 2019 NetApp, Inc. All rights reserved. VolumeSnapshot Dev/User Ops Volume Snapshot Content Volume Snapshot Class
Slide 25
Slide 25 text
Volume snapshot § SnapshotはCSIドライバのみで使⽤可能 § Dynamic Provisioningが前提 § CSIドライバはSnapshotが実装されていないかもしれない § 実装されているかは要確認 § VolumeSnapshot/Content/Class はCRD § Snapshot = Copy on Write? Pointer remapping? § 実装形態はドライバに依存するので要確認 幾つか留意点があります、ほとんどクローニングと同じです。 © 2019 NetApp, Inc. All rights reserved. 25
Slide 26
Slide 26 text
Snapshot と Clone の違いは? § Volume Snapshot § ある時点のデータを保管 § PVC作成時にVolumeSnapshotを指定し復元 § Volume Clone § PVCを作成時に別のPVCを指定し、コピーを作成 まとめると © 2019 NetApp, Inc. All rights reserved. 26
Slide 27
Slide 27 text
© 2019 NetApp, Inc. All rights reserved. 27 CSI 実装の1つ NetApp Trident
Slide 28
Slide 28 text
28 © 2019 NetApp, Inc. All rights reserved.
Slide 29
Slide 29 text
Trident 19.07の予定 © 2019 NetApp, Inc. All rights reserved. 29 https://kubernetes-csi.github.io/docs/drivers.html CSI 対応の Volume Snapshot, Volume Cloningは 19.07でリリース予定 (ちなみにCSIではないクローンは実装済み) YY.MMのバージョンポリシー Kubernetes のリリース後1ヶ⽉ほどで 機能追加+Kubernetesの 最新バージョン対応でリリース Trident 19.07で CSI 1.1対応予定 Trident 19.04の実装機能
Slide 30
Slide 30 text
© 2019 NetApp, Inc. All rights reserved. 34 まとめ 本⽇お話したこと
Slide 31
Slide 31 text
まとめ § Kubernetesストレージの基礎をお話しました。 § CSIが⽣まれてきた背景と現状についてお話しました。 § CSI の現時点の今後期待できる機能についてお話しました。 § Snapshot § Volume Cloning © 2019 NetApp, Inc. All rights reserved. 35