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

NoOps Meetup Tokyo #7-ContainerStorage

NoOps Meetup Tokyo #7-ContainerStorage

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

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

Makoto Watanabe

July 29, 2019
Tweet

More Decks by Makoto Watanabe

Other Decks in Technology

Transcript

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

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

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

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

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

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

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

    CSIを実装すると § CSIをサポートするコンテナオーケストレーターから統⼀的に使える § 様々なバックエンドストレージを共通的に使える § 利⽤者側への影響はない § Pod、 PVCからは⾒えない コンテナストレージの共通仕様を作ろう © 2019 NetApp, Inc. All rights reserved. 13
  8. 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
  9. 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
  10. Volume Cloning § CloningはCSIドライバのみで使⽤可能 § Dynamic Provisioningが前提 § CSIドライバはクローニングが実装されていないかもしれない §

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

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

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

    All rights reserved. 23 利⽤者が責任を持つ範囲 アプリケーションの要求を記述する • Snapshotを取得する対象のPVCを記述する • PVC作成の際にデータソースを指定する 管理者が責任を持つ範囲 VolumeSnapshotClass(VSC) を 作成し利⽤者に公開 Volume Snapshot Content Volume Snapshot Class Volume Snapshot
  17. 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
  18. Snapshot と Clone の違いは? § Volume Snapshot § ある時点のデータを保管 §

    PVC作成時にVolumeSnapshotを指定し復元 § Volume Clone § PVCを作成時に別のPVCを指定し、コピーを作成 まとめると © 2019 NetApp, Inc. All rights reserved. 26
  19. 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の実装機能