NoOps Meetup Tokyo #7-ContainerStorage

NoOps Meetup Tokyo #7-ContainerStorage

NoOps Meetup Tokyo #7 で使用した資料です。
30分でCSIは難しい。
口頭補足した箇所が多かったので疑問点や不明点があれば@makotowまで。

Aug 2, 2019 Cloneのマニフェストが間違っていたので修正しました。

C32c94c52ce15a3a4120c55457fef767?s=128

Makoto Watanabe

July 29, 2019
Tweet

Transcript

  1. NoOps Meetup Tokyo #7 Kubernetesのデータ管理 どうする? 主に永続化ストレージについて © 2019 NetApp,

    Inc. All rights reserved. @makotow 2019/07/29 #NoOpsJP
  2. 2 Conclusion Kubernetes ストレージの必要性と基礎 コンテナストレージの共通仕様 Container Storage Interface (CSI) CSIの機能について

    まとめ アジェンダ © 2019 NetApp, Inc. All rights reserved.
  3. 名前: Makoto Watanabe SNS: @makotow 個⼈の⾒解であり 所属する組織の公式⾒解ではありません。 最近同じような話が多いです。 本⽇話す内容は API実装やアーキテクチャの話ではなく、

    できることはなにかを話していきます。
  4. © 2019 NetApp, Inc. All rights reserved. 4 Kubernetesストレージの 必要性と基礎

  5. コンテナストレージの必要性 © 2019 NetApp, Inc. All rights reserved. 5 永続化ストレージ

    コンテナはステートレス • コンテナ停⽌時にはデータが消える ストレージに求められる要件 • オンデマンドなプロビジョニングが必須 • データを保管するストレージは⾼可⽤性を保ち、 ⾼いデータ保護が必要 様々な箇所からデータを参照できる必要がある どこでコンテナが起動してもデータにアクセス可能 • ポッドがどこにスケジュールされても データにアクセスできる
  6. データ永続化をするKubernetes オブジェクト © 2019 NetApp, Inc. All rights reserved. 6

    PersistentVolume 管理者によりプロビジョニングされたストレージリソース バックエンドのストレージとマッピングされる PersistentVolumeClaim PersistentVolumeClaimは永続化ストレージに対するユーザの要求・リクエスト StorageClass PVを動的に作成するためのストレージのパラメータ・クラスを記述したもの PVCでStorageClassを指定する
  7. Kubernetes ストレージの役割分担 PVC/PVをDeploy・Podから使う場合 © 2019 NetApp, Inc. All rights reserved.

    7 Storage Pod generator
  8. Kubernetes ストレージの役割分担 誰がどこを準備するのか? © 2019 NetApp, Inc. All rights reserved.

    8 Storage Pod generator Dev/利⽤者が責任を持つ範囲 アプリケーションの要求を記述する Ops/管理者が責任を持つ範囲 StorageClass(SC) を作成し利⽤者に公開 PVの作り⽅は2種類ある 1. 要求に応じて動的にプロビジョニング 2. 事前準備・⼿動でプロビジョニング
  9. Kubernetes Storage:2つのプロビジョニング⽅法 § Dynamic Provisioning § Static Provisioning(Manual Provisioning) ©

    2019 NetApp, Inc. All rights reserved. 9
  10. Kubernetes Storage:2つのプロビジョニング⽅法 Dynamic Provisioning © 2019 NetApp, Inc. All rights

    reserved. 10 管理者は事前に StorageClassを定義 アプリケーションに 必要な要件をPVCに記述 管理者が準備した StorageClassを設定 管理者 利⽤者 参照 管理者 利⽤者 bound PVとバックエンドのストレージが ⾃動的にプロビジョニングされ、 PVCにバインドされる。
  11. Kubernetes Storage:2つのプロビジョニング⽅法 Static Provisioning(Manual Provisioning) © 2019 NetApp, Inc. All

    rights reserved. 11 管理者 管理者が事前に StorageClass,PV, バックエンドストレージを 作成・紐付けする 利⽤者 管理者 bound 事前にプロビジョニングされたPV にPVCがバインドされる。
  12. © 2019 NetApp, Inc. All rights reserved. 12 Container Storage

    Interface コンテナストレージの共通仕様
  13. Container Storage Interface (CSI) § CSIが始まった背景(簡易的に) § ストレージベンダーはコンテナオーケストレーターごとに ドライバを実装する必要があった §

    CSIを実装すると § CSIをサポートするコンテナオーケストレーターから統⼀的に使える § 様々なバックエンドストレージを共通的に使える § 利⽤者側への影響はない § Pod、 PVCからは⾒えない コンテナストレージの共通仕様を作ろう © 2019 NetApp, Inc. All rights reserved. 13
  14. 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
  15. CSI: Data Sources Persistent Volume Claim作成時にデータソースを指定可能に 現時点では以下の2機能が活⽤可能 § VolumeSnapshot §

    PersistentVolumeClaim (Cloning) © 2019 NetApp, Inc. All rights reserved. 15
  16. 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
  17. Volume Cloning § CloningはCSIドライバのみで使⽤可能 § Dynamic Provisioningが前提 § CSIドライバはクローニングが実装されていないかもしれない §

    実装されているかは要確認 § 現時点では同⼀namespaceのみのクローンをサポート § Clone = Copy on Write? Pointer remapping? § 実装形態はドライバに依存するので要確認 幾つか留意点があります © 2019 NetApp, Inc. All rights reserved. 17
  18. Volume Snapshot ある特定時点のデータを保管する 保管したデータからPVCを作成することが可能 § VolumeSnapshotClass § External Snapshotterの指定をする §

    VolumeSnapshot § ユーザがスナップショットを実⾏する際に作成するオブジェクト § VolumeSnapshotContent § Snapshot⾃体 必要なオブジェクト © 2019 NetApp, Inc. All rights reserved. 18
  19. Volume Snapshot 使⽤時のフロー © 2019 NetApp, Inc. All rights reserved.

    19 PVC作成時にSnapshotを指定 dataSourceにSnapshot名を記述 Volume Snapshot Class 作成 Volume Snapshot 作成・取得
  20. 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に依存する
  21. 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のスナップを作成
  22. 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 作成・取得
  23. Kubernetes ストレージの役割分担 Volume Snapshot/Cloneの 観点 誰がどこを準備するのか? © 2019 NetApp, Inc.

    All rights reserved. 23 利⽤者が責任を持つ範囲 アプリケーションの要求を記述する • Snapshotを取得する対象のPVCを記述する • PVC作成の際にデータソースを指定する 管理者が責任を持つ範囲 VolumeSnapshotClass(VSC) を 作成し利⽤者に公開 Volume Snapshot Content Volume Snapshot Class Volume Snapshot
  24. PVCと似たオブジェクトの関係 利⽤者はVolumeSnapshotを作成する 24 © 2019 NetApp, Inc. All rights reserved.

    VolumeSnapshot Dev/User Ops Volume Snapshot Content Volume Snapshot Class
  25. 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
  26. Snapshot と Clone の違いは? § Volume Snapshot § ある時点のデータを保管 §

    PVC作成時にVolumeSnapshotを指定し復元 § Volume Clone § PVCを作成時に別のPVCを指定し、コピーを作成 まとめると © 2019 NetApp, Inc. All rights reserved. 26
  27. © 2019 NetApp, Inc. All rights reserved. 27 CSI 実装の1つ

    NetApp Trident
  28. 28 © 2019 NetApp, Inc. All rights reserved.

  29. 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の実装機能
  30. © 2019 NetApp, Inc. All rights reserved. 34 まとめ 本⽇お話したこと

  31. まとめ § Kubernetesストレージの基礎をお話しました。 § CSIが⽣まれてきた背景と現状についてお話しました。 § CSI の現時点の今後期待できる機能についてお話しました。 § Snapshot

    § Volume Cloning © 2019 NetApp, Inc. All rights reserved. 35