Kubernetesに必要なストレージの要件とは? / What are the storage requirements for Kubernetes?

9f9df80ab6551776b49c4ad9432ba1b7?s=47 Kazuki Suda
December 10, 2019

Kubernetesに必要なストレージの要件とは? / What are the storage requirements for Kubernetes?

NetApp INSIGHT 2019 TOKYO 2019年12月10日 #NetApp #INSIGHTTOKYO

9f9df80ab6551776b49c4ad9432ba1b7?s=128

Kazuki Suda

December 10, 2019
Tweet

Transcript

  1. ゼットラボ須⽥が完全解説! Kubernetesに必要な ストレージの要件とは? ゼットラボ株式会社  ソフトウェアエンジニア 須⽥ ⼀輝(@superbrothers)

  2. Kazuki Suda / @superbrothers ▶ ゼットラボ株式会社 ソフトウェアエンジニア ▶ ヤフー株式会社 「Kubernetes」黒帯

    ▶ Kubernetes Meetup Tokyo, Cloud Native Deep Dive 共同主催者 ▶ Kubernetes アクティブコントリビュータ ▶ クラウドネイティブ・アンバサダ(CNCF)
  3. None
  4. ゼットラボ株式会社 / Z Lab Corporation ▶ 2015年に設⽴されたヤフー株式会社の100%⼦会社 ▶ インフラ基盤技術の調査・研究開発 ▶

    ヤフー株式会社向けのマネージド Kubernetes サービスの開発 ▶ https://zlab.co.jp/
  5. アジェンダ 1. Kubernetes とは何か 2. Kubernetes での永続ストレージ 3. ヤフーにおける Kubernetes

    の利⽤ 4. Kubernetes に必要なストレージの3つの要件 5. NetApp Trident 6. NetApp Trident のここが⾜りない 7. まとめ
  6. Kubernetes とは何か

  7. Kubernetes ▶ コンテナオーケストレーションツール + 複数のマシン(ノード)で構成されるクラスタに対して コンテナ(アプリケーション)の配備、設定、管理を⾏う ▶ Google の社内システムからインスパイアされた “Kubernetes

    is open source—a contrast to Borg and Omega,
 which were developed as purely Google-internal systems. “ Borg, Omega, and Kubernetes
  8. ロードバランサ 永続ストレージ ホスト コンテナ コンテナ コンテナ コンテナ コンテナ コンテナ ホスト

    ナ コンテナ ナ コンテナ ナ コンテナ ホスト コンテナ コンテナ コンテナ コンテナ コンテナ コンテナ ホスト コンテナ コ コンテナ コ コンテナ コ Kubernetes デプロイ戦略 ネットワーク
  9. Kubernetes ▶ 初期は Google のソフトウェアだったが、その後 Cloud Native Computing Foundation(CNCF)に譲渡され、 現在は

    CNCF がホストするオープンソースプロジェクト + CNCF は Linux Foundation 傘下の組織 ▶ 「10年以上に渡りコンテナを本番環境で運⽤してきた Google の経験と 多くの企業によるコミュニティの優れたアイデアと⼿法が組み込まれている」
  10. BARE METAL

  11. Kubernetes での永続ストレージ

  12. Kubernetes での永続ストレージ ▶ 特定ベンダに依存せずにストレージの利⽤を抽象化している + PersistentVolume(永続ボリューム) + PersistentVolumeClaim(永続ボリュームの要求) + StorageClass(ストレージクラス)

    ▶ クラスタ管理者とアプリケーション開発者の役割が考慮されている + 管理者: クラスタ全体の管理者、アドミン権限を持つ + 開発者: 永続ボリュームを利⽤するアプリケーションをデプロイする
  13. ▶ 事前にプロビジョニングされた永続ボリューム ▶ 1つ1つが実際のボリュームに紐づく ▶ 2種類のボリュームのライフサイクル管理 + クラスタ管理者による静的管理 + 開発者の要求に基づいた動的なプロビジョニング(StorageClass)

    PersistentVolume(PV) PersistentVolume ボリューム NFS iSCSI 独⾃システム クラスタ管理者による静的管理の例 作成
  14. PersistentVolume(PV) ▶ サイズ(e.g. 100GiB ▶ アクセスモード + ReadWriteOnce (RWO), ReadWriteMany

    (RWX), ReadOnlyMany (RWO) ▶ 再要求ポリシ + Retain(そのまま)、Delete(PV 削除)、Recycle(データ削除) ▶ ボリュームへの接続情報
  15. PersistentVolumeClaim(PVC) ▶ 開発者による永続ボリュームの要求 ▶ 要求するボリュームの要件を定義する + サイズ、アクセスモード、StorageClass PersistentVolume PersistentVolumeClaim 開発者

    作成 紐付け
  16. StorageClass(SC) ▶ 開発者によるボリューム要求(PVC)に基づいて、 動的にストレージバックエンドからボリュームを払い出す ▶ クラスタ管理者が定義する PersistentVolume PersistentVolumeClaim storageClassName: fast

    fast StorageClass Provisioner ボリューム 開発者 2. 作成 3. 作成 1. 監視 AWS EBS Glusterfs etc ストレージ バックエンド
  17. myapp Pod コンテナ PersistentVolume Claim PersistentVolume コンテナ コンテナからの永続ボリュームの利⽤ /data ボリューム

  18. ヤフーにおける Kubernetes の利⽤

  19. ヤフーにおける Kubernetes 利⽤ 2017年7⽉から⼀部のサービスの本番環境として利⽤を開始し、 現在では数多くのサービスで利⽤されている。

  20. ヤフーの Kubernetes-as-a-Service(KaaS) ヤフー向けにゼットラボが開発するマネージド Kubernetes サービス。 オンプレミスの OpenStack 環境に Kubernetes クラスタを作成、管理する。

    2016年7⽉から開発を始め、ヤフーの Kubernetes の利⽤を⽀える。 https://speakerdeck.com/superbrothers/the-technology-behind-managed-kubernetes-service-of-yahoo-japan
  21. 障害の発⽣したノードをクラスタから⾃動的に削除し、新たに必要なノードを クラスタに追加する。 クラスタのセルフヒーリング ノード 1 ノード 2 ノード 3 KaaS

    追加 削除
  22. ⼀定数のノードを順々にアップグレードしていくことで、 クラスタの無停⽌アップグレードを実現している。 クラスタのローリングアップデート v1.15.0 v1.15.0 v1.16.2 KaaS 追加 v1.15.0 v1.15.0

    v1.16.2 KaaS 削除
  23. 次の挑戦: ステートレスからステートフルへ ▶ これまでは、状態を持たないHTTP サーバやアプリケーションサーバ (12 Factor App)の実⾏に注⼒ + ステートレスアプリケーションは、問題が発⽣したら単に再起動すれば復

    旧するため、Kubernetes と相性がよく簡単に導⼊できる ▶ ⼀⽅で、データとして状態を保持するデータベースや分散システムといった ステートフルアプリケーションも社内には多く存在する + ステートフルアプリケーションも Kubernetes の強⼒な機能を 利⽤して運⽤したい
  24. 次の挑戦: ステートレスからステートフルへ ▶ 我々の KaaS ではクラスタのセルフヒーリングやアップグレードによって ノードが削除される + ステートレスでは⼈間が介在することなく⾃動的に回復する ▶

    しかし、ステートフルアプリケーションではノードのローカルストレージに データを保持すると消失してしまう + データは外部の永続ストレージに保存しなければならない
  25. Kubernetes に必要な ストレージの3つの要件

  26. Kubernetesに必要なストレージの3つの要件 1. ストレージ⾃体の信頼性と運⽤ 2. マルチテナント(適切な権限管理とQuota) 3. 動的プロビジョニングのサポート

  27. 1. ストレージ⾃体の信頼性と運⽤ ▶ ストレージシステム⾃体が信頼できることが⼤前提 ▶ Kubernetes 上にストレージシステムを構築する Rook や OpenEBS

    といった オープンソースの SDS 等も存在するが… + 安定運⽤するにはソースコードレベルで理解し、加えてKubernetesに 精通した⼈らで構成されたチームが必要 + ストレージは技術的に特に難しく、またビジネスとしてストレージ⾃体に 強みを持ちたいわけではない + 格納するデータの価値によっては検討の余地あり
  28. 2. マルチテナント(適切な権限管理とQuota) ▶ 不必要なボリュームの操作を禁⽌したい ▶ 不必要なボリュームのマウントを禁⽌したい ▶ 他からのリソース消費に影響を受けたくない

  29. 3. 動的プロビジョニングのサポート ▶ 開発者によるセルフサービスで必要なときに必要なだけプロビジョニングする + クラスタ管理者およびストレージ管理者の負担軽減 + ボリューム提供までのリードタイムの削減 開発者 クラスタ管理者

    PersistentVolumeClaim 20Gi, ReadWriteOnce storageClass: fast StorageClass fast SC SC PV: 20Gi PVC の作成 動的な プロビジョン StorageClass の作成
  30. どのストレージシステムを選択するか NetApp ONTAP

  31. 1. ストレージ⾃体の信頼性と運⽤ 社内で⼗分な実績と運⽤経験がある

  32. 2. マルチテナント(適切な権限管理とQuota) ▶ 他のサービスからのボリュームの操作を禁⽌したい SVM (vserver) ▶ 他のサービスからのボリュームのマウントを禁⽌したい export-policy(NFS), igroup(iSCSI)

    ▶ 他のサービスのリソース消費に影響を受けたくない SVM 毎にアグリゲートを分ける
  33. 3. 動的プロビジョニングのサポート NetApp Trident: Storage orchestrator for containers

  34. NetApp Trident Storage orchestrator for containers

  35. NetApp Trident ▶ コンテナ向けのストレージオーケストレータ + ボリュームの動的プロビジョニングと管理 ▶ NetApp 社が開発するソフトウェアで完全にオープンソース +

    https://github.com/NetApp/trident + https://netapp-trident.readthedocs.io/ ▶ サポートするプラットフォーム + Kubernetes(CSI), Docker(Volume plugin)
  36. サポートするデータプラットフォーム ▶ ONTAP (AFF/FAS/Select/Cloud) ▶ Element (HCI/SolidFire) ▶ SANtricity (E/EF-Series)

    ソフトウェア ▶ Azure NetApp Files ▶ NetApp Cloud Volumes for AWS, GCP
  37. 主な機能(バージョン 19.10.00) ▶ StorageClass によるボリュームの動的プロビジョニング ▶ ボリュームスナップショット ▶ NFS ボリュームのリサイジング

    ▶ iSCSI ボリュームのリサイジング ▶ 既存ボリュームのインポート
  38. Kubernetes ノード CSI Trident Node Pod Pod ノード CSI Trident

    Node CSI Trident Controller ボリュームの作成、削除 ボリュームのアタッチ/デタッチ ボリュームのリサイズ スナップショットの作成 ボリュームのマウント/アンマウント
  39. ノード Pod Pod ノード Pod ontap-file SC ontap-block SC データ

    LIF データ LIF 管理 LIF SVM アグリゲート FlexVol FlexVol FlexVol export-policy (ip) igroup (iqn) SVM SVM クラスタ クラスタ クラスタ ONTAP 9
  40. Trident のここがスゴい! ▶ しっかり動く ▶ オープンソースソフトウェア(OSS)である + トラブルシュート時にソースコードが参照できることは⼤きなメリット + NetApp

    Corporate Contributor License Agreement に 同意すればパッチもマージしてくれる ▶ Kubernetes のリリースサイクルにしっかり追従してる + Trident は、3ヶ⽉に⼀度のリリースで最新バージョンに追従!
  41. ヤフーでの NetApp Trident の利⽤ ▶ 2019年9⽉時点で検証を完了 ▶ 2020年4⽉から本番での利⽤を開始予定 ▶ 今後はマルチAZ/リージョンを⾒据えて、MetroCluster

    を検証予定
  42. NetApp Trident のここが⾜りない

  43. NetApp Trident のここが⾜りない 1. export-policy(NFS), igroup(iSCSI)の動的な更新をサポートしていない 2. メトリクス(指標)をサポートしていない 3. ONTAP

    SVM のメトリクスを公開してほしい 4. Trident の開発を github.com でやってほしい 5. SVM レベルで Quota を設定したい
  44. まとめ

  45. まとめ ▶ Kubernetes とは + コンテナオーケストレーションツール + 複数のマシンで構成されるクラスタに対して コンテナ(アプリケーション)の配備、設定、管理を⾏う ▶

    Kubernetes での永続ストレージ + 特定ベンダに依存せず永続ボリュームの利⽤を抽象化 + PersistentVolume, PersistentVolumeClaim, StorageClass
  46. まとめ ▶ ヤフーにおける Kubernetes の利⽤ + 2019年7⽉時点で400クラスタ以上 + ステートレスからステートフルへ ▶

    Kubernetes で必要なストレージの3つの要件と NetApp ONTAP 1. ストレージ⾃体の信頼性と運⽤ ヤフーでの運⽤実績 2. マルチテナント SVM とアグリの分離 3. 動的プロビジョニングのサポート NetApp ONTAP + Trident
  47. まとめ ▶ NetApp Trident + Kubernetes での永続ボリュームの動的プロビジョニングと管理 + 完全にオープンソースソフトウェア +

    ONTAP ほか、いくつかのデータプラットフォームをサポート ▶ ヤフーでの NetApp Trident の利⽤ + 2020年4⽉から本番での利⽤を開始予定 + 次のチャレンジは + MetroCluster + ステートフルアプリケーション on Kubernetes
  48. © 2019 NetApp, Inc. All rights reserved. No portions of

    this presentation may be reproduced without prior written consent of NetApp, Inc. Specifications are subject to change without notice. NetApp and the NetApp logo are registered trademarks of NetApp, Inc. in the United States and/or other countries. All other brands or products are trademarks or registered trademarks of their respective holders. ありがとうございました