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