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

Trident Deep Dive

3499a1d71fa70b8ee44816ca9e7329fe?s=47 bells17
February 25, 2022

Trident Deep Dive

NetApp INSIGHT Japan 2022( https://insight.netapp.com/ja/ )のセッション資料です。

セッション動画: http://netapp.tv/details/28744

セッションリスト
https://insight.netapp.com/INSIGHTJapanSession.pdf

3499a1d71fa70b8ee44816ca9e7329fe?s=128

bells17

February 25, 2022
Tweet

More Decks by bells17

Other Decks in Programming

Transcript

  1. Trident Deep Dive 2022年2⽉ @bells17_がコードから読み解く! 株式会社IDCフロンティア エンジニアリング本部 ソフトウェアエンジニア 早川 ⼤貴

    ネットアップ合同会社 クラウド営業部 クラウドソリューションアーキテクト 藤原 善基
  2. ▶ @bells17 ▶ Software Engineer@IDC Frontier inc. ▶ 普段やってること: +

    Kubernetes 関連コンポーネントの開発 + Kubernetes as a Service開発 ▶ Kubernetes SIG-Docs Japanese localization reviewer ▶ Kubernetes Internal Organizer ▶ #kubenews ▶ @bells17_
  3. #kubenews ほぼ毎週⾦曜22:00~YouTubeで配信中 Kubernetes/Cloud Native関連のニュースを中⼼に技術雑談してます

  4. 今⽇話すこと ▶ Tridentの概要 ▶ KubernetesとCSIについて ▶ Tridentの実装

  5. 注意点 ▶ 発表者はストレージの専⾨家ではありません(特にiSCSIとかNFSとか..) ▶ Tridentのバージョンはv21.07.2を想定しています ▶ Tridentは以下の設定で利⽤することを想定しています + KubernetesからTridentを利⽤ +

    Tridentのインストールは基本的にTrident Operatorを利⽤(後述) ▶ あくまでTridentの実装を追った結果での理解の説明になるので、⼀部実際 の挙動と異なるケースもあるかもしれません
  6. Cloud Native Storage Meetup #1でNetAppの⼤野さんもTridentの アーキテクチャについて解説しているのでそちらも参考にしてください https://youtu.be/2xEUyAzoNmY?t=3583

  7. Tridentとは?

  8. Tridentとは? ▶ TridentはNetApp社の様々なストレージ製品(e.g. ONTAP, E-Series, Cloud Volumes Service for AWS,

    etc )を扱うためのアプリケーション ▶ Tridentを利⽤することで、Kubernetesなどコンテナ環境でNetApp社のストレージ製品をいい感じに 扱うことができるようになる ▶ 現在対応しているプラットフォームは以下の2つ + Kubernetes ← 今回はこちらのケースでどのようにTridentが動作するかをお話しします + Docker ▶ 製品はOSSとして公開されている(https://github.com/NetApp/trident) ▶ NetApp社が提供しているKubernetesのための製品である”Astra”に含まれるアプリケーションの1 つ ▶ AstraはTridentに加え以下のアプリケーションによって構成されている + Astra Control: Kubernetesクラスターの管理・運⽤コンソール + Astra Data Store: Kubernetesネイティブな共有ファイルサービス
  9. https://docs.netapp.com/us-en/astra-family/intro-family.html

  10. Trident Components

  11. Trident Components ▶ Trident(Core): Trident本体で、Kubernetesと協調動作するためのCSIドライバーや tridentctlのためのRest APIサーバー、その他Tridentの状態をコントロールするための各種 コントローラーなどで構成されている ▶ tridentctl:

    Tridentの操作をcliから⾏うためのコマンドラインツール ▶ Trident Operator: KubernetesクラスターにTridentをインストール・アップグレードといっ た管理を⾏うためのKubernetes Operator + Tridentがv20.04.0のタイミングで追加された + tridentのインストールはTrident Operatorの他にtridentctl installコマンドでも可能
  12. Tridentのインストール例

  13. ONTAP StorageVMを作成(ONTAPを使う場合)

  14. Trident Operatorをインストール XHFUIUUQTHJUIVCDPN/FU"QQUSJEFOUSFMFBTFTEPXOMPBEWUSJEFOU JOTUBMMFSUBSH[ UBSYGUSJEFOUJOTUBMMFSUBSH[ DEUSJEFOUJOTUBMMFS IFMNJOTUBMMUSJEFOUPQFSBUPSOUSJEFOUIFMNUSJEFOUPQFSBUPSUH[ LVCFDUMOUSJEFOUHFUEFQMPZUSJEFOUPQFSBUPS /".&3&"%:6150%"5&"7"*-"#-&"(& USJEFOUPQFSBUPSE

  15. TridentOrchastratorリソースを作成して Tridentをインストール LVCFDUMBQQMZGEFQMPZDSETUSJEFOUPSDIFTUSBUPS@DSZBNM LVCFDUMHFUUSJEFOUPSDIFTUSBUPS /".&"(& USJEFOUE LVCFDUMOUSJEFOUHFUEFQMPZUSJEFOUDTJ /".&3&"%:6150%"5&"7"*-"#-&"(& USJEFOUDTJE LVCFDUMOUSJEFOUHFUETUSJEFOUDTJ

    /".&%&4*3&%$633&/53&"%:6150%"5&"7"*-"#-&/0%&4&-&$503 "(& USJEFOUDTJLVCFSOFUFTJP BSDIBNE LVCFSOFUFTJPPTMJOVYE
  16. TridentBackendConfigを作成 DBU&0'cLVCFDUMBQQMZG BQJ7FSTJPOUSJEFOUOFUBQQJPW LJOE5SJEFOU#BDLFOE$POpH NFUBEBUB OBNFPOUBQTBOEFGBVMU TQFD TUPSBHF%SJWFS/BNFPOUBQTBO NBOBHFNFOU-*' EBUB-*'

    TWNUSJEFOU@TWN DSFEFOUJBMT OBNFCBDLFOEUCDPOUBQTBOTFDSFU &0'
  17. StorageClassを作成 DQTBNQMFJOQVUTUPSBHFDMBTTDTJZBNMUFNQMTBNQMFJOQVUTUPSBHFDMBTTCBTJD DTJZBNM WJTBNQMFJOQVUTUPSBHFDMBTTCBTJDDTJZBNM LVCFDUMDSFBUFGTBNQMFJOQVUTUPSBHFDMBTTCBTJDDTJZBNM LVCFDUMHFUTUPSBHFDMBTT /".&1307*4*0/&33&$-"*.10-*$:70-6.&#*/%*/(.0%& "--0870-6.&&91"/4*0/"(& JTDTJYGTDTJUSJEFOUOFUBQQJP%FMFUF*NNFEJBUFGBMTF E

    OGTDTJ EFGBVMU DTJUSJEFOUOFUBQQJP%FMFUF*NNFEJBUFGBMTF E
  18. TridentとKubernetes

  19. TridentとKubernetes ▶ TridentはKubernetesで各種ストレージ管理を⾏うためにTridentをCSIドライバーとして動 作させている ▶ また、Trident管理のために複数のKubernetesコントローラーを実装している ▶ そのため、Tridentの実装に⼊る前にまずは + Kubernetes

    Operator(Kubernetesコントローラー) + CSI(ドライバー) ▶ などの概要について知っておいたほうが良い
  20. Kubernetes とは? ▶ Kubernetesはコンテナオーケストレーターの1つ ▶ etcd/control plane/worker nodeによって構成されたクラスターを構築し、 様々なコンテナをKubernetes上のnodeで動作させたり、動作させてるコン テナとネットワークをいい感じに連携できるようにすることができる

    ▶ デプロイするコンテナなどをmanifestファイルで宣⾔的に記述することで、 宣⾔した状態になるようにKubernetesがいい感じに調整処理を⾏ってくれる ▶ Googleが内部で運⽤していたコンテナ基盤であるBorgをOSS向けに作り直 したコンテナオーケストレーター ▶ また、KubernetesはCloud Native Computing Foundation(CNCF)に寄贈さ れており、CNCFのGraduatedプロジェクトとしてコミュニティベースで管理 されている
  21. https://github.com/kubernetes/website/blob/fb6364da0afd19e8a9515aaae2de9bc74a0a6abd/static/images/docs/components-of-kubernetes.png

  22. Tridentが利⽤しているKubernetes拡張⽅法 ▶ Kubernetes Operator + CRD + Kubernetesコントローラー ▶ CSIドライバー

  23. https://github.com/NetApp/trident/blob/v21.07.2/operator/controllers/orchestrator/apis/netapp/v1/types.go CRD

  24. Kubernetes Controller

  25. https://github.com/kubernetes/sample-controller/blob/master/docs/images/client-go-controller-interaction.jpeg Controllerの動作イメージ

  26. ▶ Kubernetesのコードリーディングをする上で知っておくと良さそうなこと ▶ Kubernetes Internal #1 Kubernetesコントローラー実装周りの詳細についてはこちら

  27. KubernetesとCSI

  28. CSI ▶ KubernetesやMesos、Cloud Foundryなどコンテナオーケストレーター (CO)でストレージを利⽤するための共通の仕様を定義したもの + なのでKubernetes⽤の仕様、というわけでない + 例えばHashicorp NomadなどはすでにCSIを利⽤している

    ▶ ストレージプロバイダは⼀度CSIに対応したドライバーを書いておくだけ で、Kubernetesでもその他のCOでも利⽤できるものを⽬指している ▶ CSIの仕様はGithubのcontainer-storage-interface/specリポジトリにある spec.mdファイルで定義されている
  29. CSIで定義されている仕様 ▶ CSI Driverの通信⽅法・提供⽅法について ▶ CSI Driverが提供する機能について ▶ COがCSI Driverを利⽤するためのgRPCのProtocol

    Buffers
  30. CSI Driverの通信⽅法・提供⽅法について ▶ コンテナイメージ形式(Docker, OCIなど)で提供する必要あり ▶ CSI DriverとCO間の通信は + UNIXドメインソケットを介して

    + gRPCプロトコルを利⽤する必要がある
  31. CSIが提供する機能 ▶ ボリュームの作成/削除 ▶ ノードへのボリュームのアタッチ/デタッチ ▶ ボリュームのマウント/アンマウント ▶ ボリュームのスナップショットの作成/削除 ▶

    etc...
  32. Protocol Buffersで定義されているgRPCの インターフェイス ▶ Controller Plugin ▶ Node Plugin

  33. Controller Plugin ▶ CSI Driverのcontrol plane として動くgRPCサーバー ▶ 以下のgRPCのサービスを実装したもの +

    Controller Service + Identity Service ▶ ボリュームやスナップショット⾃体をコントロールする機能を提供する ▶ 具体的には以下のような機能を提供する + ボリュームの作成/削除 + ノードへのボリュームのアタッチ/デタッチ + ボリュームのスナップショットの作成/削除
  34. Node Plugin ▶ COに参加している各Worker Nodeで動くgRPCサーバー ▶ 以下のgRPCのサービスを実装したもの + Node Service

    + Identity Service ▶ ボリュームを対象Worker Nodeで利⽤するための機能を提供する ▶ 主に以下の機能を提供する + ノードにアタッチされたボリュームのフォーマット + ボリュームのマウント/アンマウント
  35. None
  36. ボリュームライフサイクル

  37. CSIまとめ ▶ CSIとはストレージプロバイダがボリュームプラグインをCOに提供する ために定義された共通の仕様 ▶ 具体的には以下のようなものを定義している + CSI Driverの動作環境や通信⽅法の定義 +

    コンテナイメージ形式 + UNIXドメインソケット/gRCPプロトコル + RPCインターフェイスの定義 + Controller Plugin + Node Plugin
  38. Kubernetesとボリュームプラグイン

  39. Kubernetesのボリュームプラグインには 以下の3つがある ▶ In-Tree Volume + Kubernetesのコード内部に実装されているボリュームプラグイン + ConfigMap/Secret/EmptyDirなどはここに該当 ▶

    FlexVolume + CSI登場前に作成されたプラグイン(v1.8) + Kubernetesの内部実装に関する知識が必要ということで、あまり使われてはない模様 + 現在はDeprecated ▶ CSI Driver + v1.9よりAlpha提供開始 + KubernetesがCSI Driverと連携を⾏うサイドカーアプリケーションを提供してくれている ため、Kubernetesの内部実装の知識を必要とせずにボリュームプラグインを提供できる
  40. KubernetesとCSI Driverとの連携

  41. サイドカーアプリケーションによる連携 https://github.com/kubernetes/community/blob/d83cd53979d08ac0e0e33704c6aec6b1c3cb7c8d/contributors/design-proposals/storage/container-storage-interface_diagram1.png

  42. ボリューム作成時の処理フロー

  43. Controller Sidecar external-provisioner ボリュームの作成/削除を⾏う external-attacher ボリュームのアタッチ/デタッチを⾏う external-resizer ボリュームのリサイズを⾏う external-snapshotter スナップショットの作成/削除を⾏う

    livenessprobe Liveness Probe⽤HTTPプロキシ
  44. Node Sidecar node-driver-registrar KubeletにあるPlugin Watcherという機能を利⽤して CSIドライバをKubeletに登録する機能を提供する

  45. ▶ CSI⼊⾨(スライド) ▶ CSI⼊⾨(セッション動画) KubernetesとCSIについてのより詳しい解説についてはこちら

  46. Tridentの実装

  47. Trident Components(再掲)

  48. Trident Overview

  49. Trident Operator

  50. Trident Core(setup)

  51. Trident Core(PVC作成~ボリュームmount)

  52. Trident Core: その他のコンポーネント ▶ TransactionMonitor: ボリューム作成などを管理するためのTridentTransactionリソースを 利⽤した実⾏処理タスクの管理コントローラー ▶ PeriopdicallyReconcileNodeAccessOnBackends: 各ノードと各TridentBackendが接続で

    きるように適切なポリシー設定が⾏われているかチェックするコントローラー ▶ k8shelper + Node Controller: ノード削除時に対象のTridentNodeを削除し、各TridentBackendの ポリシーから対象ノードの情報を削除するコントローラー ▶ CRD Controllers + reconcileTMR: TridentMirrorRelationshipリソースに応じたsnap mirrorの設定を⾏い、 TridentMirrorRelationshipのステータスを更新する ▶ etc
  53. Tridentが利⽤するCRD $3%໊ ༻్ 5SJEFOU0SDIBTUSBUPS 5SJEFOU0QFSBUPS͕5SJEFOUͷΠϯετʔϧʹར༻ 5SJEFOU#BDLFOE$POpH 5SJEFOU͕઀ଓ͢Δ0/5"1ͳͲͷετϨʔδ৘ใΛ؅ཧ͢Δ5SJEFOU#BDLFOEΛੜ੒͢ΔͨΊ ͷϦιʔε 5SJEFOU#BDLFOE 5SJEFOU͕઀ଓ͢Δ0/5"1ͳͲͷετϨʔδ৘ใΛ؅ཧ͢ΔͨΊʹར༻͞ΕΔ

    5SJEFOU#BDLFOE$POpHPSUSJEFODUMDSFBUFCBDLFOE Λར༻ͯ͠࡞੒͢Δ 5SJEFOU4UPSBHF$MBTT ,T4UPSBHF$MBTTʹରԠͨ͠5SJEFOU͕ॲཧΛߦ͏ͨΊͷϦιʔε ࣮૷ΛݟΔݶΓଟ෼ӬଓԽ͠ͳͯ͘΋ࠔΒͳ͍ 5SJEFOU/PEF 5SJEFOUͷͨΊͷϊʔυ৘ใΛอଘ͢ΔͨΊͷϦιʔε $4*/PEF͔Βੜ੒͞Εɺϊʔυ͕࡟আ͞ΕͨΒ$4*4FSWFSଆͰ࡟আ͞ΕΔ ֤αʔόʔ͕֤छ#BDLFOEʹ઀ଓͰ͖ΔΑ͏ʹϙϦγʔΛઃఆ͢ΔͨΊʹར༻͞ΕΔ 5SJEFOU7PMVNF 5SJEFOUܦ༝Ͱ෷͍ग़ͨ͠ϘϦϡʔϜΛ؅ཧ͢ΔͨΊͷϦιʔε ࣮૷ΛݟΔݶΓଟ෼ӬଓԽ͠ͳͯ͘΋ࠔΒͳ͍ 5SJEFOU7FSTJPO ίϯτϩʔϥʔଆͰ࣮ߦ͞Ε͍ͯΔ5SJEFOUόʔδϣϯΛอଘ͢ΔͨΊͷϦιʔε /PEFଆͰ࣮ߦ͞Ε͍ͯΔ5SJEFOUόʔδϣϯͱҰக͍ͯ͠Δ͔Λ֬ೝ͢ΔͨΊʹར༻͞ΕΔ 5SJEFOU.JSSPS3FMBUJPOTIJQ ϘϦϡʔϜʹTOBQNJSSPSઃఆΛߦ͏ͨΊͷϦιʔε 5SJEFOU5SBOTBDUJPO ϘϦϡʔϜͷ࡞੒ͳͲͷॲཧঢ়گΛ؅ཧ͢ΔͨΊͷϦιʔε Ұ෦ϦιʔεΛ೷͍࣮ͯߦ͕࣌ؒ௕ظԽ͢Δͱॲཧ͕ϩʔϧόοΫ͞ΕΔ その他にもcRDはあるが実質使われてなさそう
  54. tridentctl/Rest API

  55. まとめ

  56. 実装を読んでみた感想 ▶ TridentBackendを利⽤して複数のNetApp社ストレージに1つのTridentから利⽤できるの は特徴的で⾯⽩かった ▶ ⼀⽅、TridentBackendやStorageClassの設定⽅法などが複雑なため使い始めるまでが苦労 しそうな印象を受けた ▶ ⽐較的古い時期から開発されていた関係か現在は使われていないと思われる機能やリソー ス定義が散⾒された(e.g.

    Snapshotリソースなど)ため、機能や実装、サポート範囲を再定 義することでアプリケーションの実装をシンプルに保つことができそうな印象を受けた
  57. 参考資料 ▶ https://youtu.be/2xEUyAzoNmY?t=3583 ▶ https://github.com/NetApp/trident/tree/v21.07.2 ▶ https://netapp-trident.readthedocs.io/en/stable-v21.07/dag/kubernetes/index.html ▶ https://netapp-trident.readthedocs.io/en/stable-v21.07/kubernetes/deploying/operator-deploy.html ▶

    https://netapp-trident.readthedocs.io/en/stable-v21.07/kubernetes/operations/tasks/managing-backends/tbc.html ▶ https://netapp-trident.readthedocs.io/en/stable-v21.07/kubernetes/operations/tasks/monitoring.html#trident-autosupport-telemetry ▶ https://hub.docker.com/r/netapp/trident-autosupport ▶ https://netapp-trident.readthedocs.io/en/stable-v21.07/kubernetes/concepts/objects.html ▶ https://library.netapp.com/ecmdocs/ECMLP2372138/html/GUID-3FC8A37A-FFCC-4070-A9F0-1B9B3FB79BF8.html ▶ https://milestone-of-se.nesuke.com/sv-basic/architecture/disk-term/ ▶ https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/dm_multipath/mpio_overview ▶ https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/dm_multipath/mpio_description ▶ https://qiita.com/ochiba/items/39dbcda84ec17aefed07 ▶ https://tech-mmmm.blogspot.com/2020/05/iscsi-dm-multipathrheliscsi.html ▶ https://milestone-of-se.nesuke.com/sv-basic/architecture/iscsi-summary/ ▶ https://library.netapp.com/ecmdocs/ECMLP2573234/html/GUID-EC3C367B-79E0-4DBA-8036-22094557357A.html ▶ https://qiita.com/OPySPGcLYpJE0Tc/items/be9daae23b80478b81ff ▶ https://qiita.com/hana_shin/items/cbd428faf92534e25f7b ▶ https://atmarkit.itmedia.co.jp/ait/articles/0807/02/news142.html ▶ https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/managing_storage_devices/getting-started-with-iscsi_managing-storage-devices ▶ https://docs.netapp.com/ja-jp/ontap/system-admin/command-line-interface-concept.html ▶ https://docs.netapp.com/ja-jp/ontap/volumes/commands-manage-flexvol-volumes-reference.html ▶ http://docs.netapp.com/ontap-9/topic/com.netapp.doc.dot-cm-cmpr-9101/home.html ▶ https://docs.netapp.com/us-en/ontap/concepts/snapmirror-cloud-backups-object-store-concept.html ▶ https://netapp-trident.readthedocs.io/en/stable-v21.07/kubernetes/operations/tasks/volumes/topology.html?highlight=supportedtopology
  58. Thanks / Question? ▶ @bells17 ▶ Slide: https://speakerdeck.com/bells17 ▶ @bells17_

  59. ・コードを読み解いてみて気になった点 ・セッションを聞いてみて気になった点 Discussion/Q&A

  60. • セッションコード:1689 ⼊⾨ タイトル:クラウド知っ得シリーズ NetApp Astra スピーカ:ネットアップ合同会社 ソリューション技術本部 SE第1部 ソリューションズエンジニア

    Zhao Mandy • セッションコード:1687 中級 タイトル:クラウドネイティブアプリケーションの採 ⽤を加速する「Astra Data Store」とは︖ スピーカ:ネットアップ合同会社 ソリューションアーキテクト部 シニアソリューションアーキテクト ⼤削 緑 • セッションコード:1740 中級 タイトル: NetApp Astraを利⽤したKubernetes環境の データポータビリティの実現 スピーカ:ネットワンシステムズ株式会社 ビジネス開発本部 第1応⽤技術部 クラウドインフラチーム ⾦只 圭司 関連セッション: Trident(⼀部)
  61. Meet the Specialists

  62. Appendix

  63. k8s helper ▶ PVC Controller: PVCのリサイズが⾏われた際にPV(C)リソースのサイズ変更を⾏う + CSIドライバーのサイドカー”csi-resizer”がPV(C)のリサイズを⾏うはずなので不要のように思える ▶ PV

    Controller: 削除されたPVに紐づくボリュームの削除を⾏う + 削除処理⾃体はCSIドライバー側で⾏っているため、何らかの影響でボリュームの削除が成功しなかったものの削除 を再試⾏するためのものだと思われる ▶ StorageClass Controller: k8s StorageClassの作成に応じてTridentStorageClassの⽣成を⾏う + また、v1以前のk8s StorageClassが作成された場合にはv1 k8s StorageClassを⽣成する ▶ Node Controller: ノード削除時に対象のTridentNodeを削除し、各TridentBackendの ポリシーから対象ノードの情報を削除する ▶ reconcileNodes: TridentNodeとk8s Nodeを⽐較し、k8s Nodeが存在しない場合にそのTridentNodeを削除する ▶ handleFailedPVUpgrades: PVのアップグレード処理が完了していないトランザクションがあれば、PVのアップグ レードを中⽌し、作成を⾏おうとしていたPVを削除して、古い設定のPVを作成する + PVのアップグレードとはtridentctlでのみ利⽤する機能となっているようだが、利⽤⽤途は不明 + PVのアップグレードはアップグレード元のPVをインポートした新しいPVを作成して差し替えるというもののよう
  64. CRD Controllers ▶ reconcileBackendConfig: TridentBackendConfigをTridentBackendに変換して保存する + TridentBackendConfigの秘密情報を持ったk8s secretのイベントが発⽣した場合は k8s secretのデータを含めたTridentBackendConfigを⽣成してreconcileBackendConfigの

    イベントを実⾏する + TridentBackendリソースが削除された場合、紐づくTridentBackendConfigを元にTridentBackendリソー スを再⽣成するためにreconcileBackendConfigを実⾏する ▶ reconcileTMR: TridentMirrorRelationshipリソースに応じたsnap mirrorの設定を⾏い、 TridentMirrorRelationshipのステータスを更新する ▶ handleTridentSnapshotInfo: TridentSnapshotInfoリソースに保存されているsnapshotName からk8sのVolumeSnapshot(Content)を取得し、そのSnapshotHandle(≒Snapshot ID)を TridentSnapshotInfoのステータスに保存する + ただしTridentSnapshotInfoリソースはその他では⼀切使われていないようにみえるので、 そもそもこの調整ループが動作することはなさそうに思える
  65. その他のコントローラー ▶ TransactionMonitor: ボリューム作成などを管理するためのTridentTransactionリソースを 利⽤した実⾏処理タスクの管理コントローラー ▶ PeriopdicallyReconcileNodeAccessOnBackends: 各ノードと各TridentBackendが接続で きるように適切なポリシー設定が⾏われているかチェックするコントローラー

  66. nodePrep ▶ NFS/iSCSIに必要なパッケージを⾃動インストール~Service起動してくれる機能(まだベータの機能のよう) ▶ 対応Linuxディストリビューションは以下 + Ubuntu + RHEL/CentOS ▶

    インストールされるパッケージ + NFS + Ubuntu: nfs-common + RHEL/CentOS: nfs-utils + iSCSI + Ubuntu: lsscsi, sg3-utils, scsitools, open-iscsi, multipath-tools + RHEL/CentOS: lsscsi, sg3_utils, iscsi-initiator-utils, device-mapper-multipath ▶ 起動されるService + NFS + rpc-statd + iSCSI: + Ubuntu: iscsid, multipathd + RHEL/CentOS: iscsid, open-iscsi, multipathd
  67. CSIドライバーのmount⼿順(NFS) ▶ NodeStageVolume: + nodePrep処理が有効であればパッケージのインストールなどを実⾏ + mountOptions, NFS Server IP,

    NFS Pathといった情報をvolumePublishInfo.jsonという ファイルとして書き込む + KubernetesのCSI Sidecarが⽤意している対象ボリュームのためのパス内にこのファイ ルを作成する ▶ NodePublishVolume: + volumePublishInfo.jsonから情報を取り出す + mount先のディレクトリを作成 + mount -t nfs コマンドでNFSのボリュームをmount
  68. CSIドライバーのmount⼿順(iSCSI) ▶ NodeStageVolume: + nodePrep処理が有効であればパッケージのインストールなどを実⾏ + iscsiadmコマンドでiSCSIのターゲットを作成し、ログインを⾏う + 特定のLUNへのパスをスキャンし、そのLUNのすべてのSCSI disk-by-pathが作成される

    まで待機する + multipathデバイスが作成されるまで待機する + その後Raw Block Volume以外のファイルシステムを指定した場合はformatを⾏う + 利⽤可能なファイルシステム: xfs/ext3/ext4 ▶ NodePublishVolume: + mountコマンドでデバイスをマウント
  69. Storage Pool ▶ TridentのStorage PoolはPVが払い出されるリソースのPool ▶ このStoragePoolは以下に分類される + Physical Storage

    Pool + Virtual Storage Pool ▶ Physical Storage PoolはONTAPの場合はAggregatorとなる + Aggregator=RAIDを束ねストレージの性能とスケーラビリティを⾼めたもの ▶ Virtual Storage Pool + ⼀つの Pysical Storage Poolを 複数のPoolにしたもの + IOPSなどの異なる複数のVirtual Storage Poolを設定して必要な要件に応じて払い出し分ける + 複数の Physical Storage Poolを⼀つのPoolにする + 物理的な配置、ネットワークTopologyの異なる Physical Storage Poolを、⼀つのVirtual Storage Poolとしてまとめ適切なTopologyにスケジュールされるようにする
  70. TridentMirrorRelationshipとSnap Mirror ▶ TridentMirrorRelationshipリソースを使うとボリュームのsnap mirrorを設定できる ▶ ただしこの機能はまだ開発中のようでドキュメントなども記載は無い ▶ Snap Mirror=rsyncのように他のボリュームとデータをミラーリングできる

    ▶ 基本的にはIncremental Foreverによって書き込み内容のログが追記されていく ▶ また、StorageVM丸ごとミラーリングすることも可能(Tridentでは不可能のように思える) ▶ SnapMirror CloudというS3(プロトコルを使えるオブジェクトストレージ)への転送も可能