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

Trident Deep Dive

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

bells17

February 25, 2022
Tweet

More Decks by bells17

Other Decks in Programming

Transcript

  1. Trident Deep Dive
    2022年2⽉
    @bells17_がコードから読み解く!
    株式会社IDCフロンティア
    エンジニアリング本部
    ソフトウェアエンジニア
    早川 ⼤貴
    ネットアップ合同会社
    クラウド営業部
    クラウドソリューションアーキテクト
    藤原 善基

    View Slide

  2. ▶ @bells17
    ▶ Software [email protected] Frontier inc.
    ▶ 普段やってること:
    + Kubernetes 関連コンポーネントの開発
    + Kubernetes as a Service開発
    ▶ Kubernetes SIG-Docs Japanese localization reviewer
    ▶ Kubernetes Internal Organizer
    ▶ #kubenews
    ▶ @bells17_

    View Slide

  3. #kubenews ほぼ毎週⾦曜22:00~YouTubeで配信中
    Kubernetes/Cloud Native関連のニュースを中⼼に技術雑談してます

    View Slide

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

    View Slide

  5. 注意点
    ▶ 発表者はストレージの専⾨家ではありません(特にiSCSIとかNFSとか..)
    ▶ Tridentのバージョンはv21.07.2を想定しています
    ▶ Tridentは以下の設定で利⽤することを想定しています
    + KubernetesからTridentを利⽤
    + Tridentのインストールは基本的にTrident Operatorを利⽤(後述)
    ▶ あくまでTridentの実装を追った結果での理解の説明になるので、⼀部実際
    の挙動と異なるケースもあるかもしれません

    View Slide

  6. Cloud Native Storage Meetup #1でNetAppの⼤野さんもTridentの
    アーキテクチャについて解説しているのでそちらも参考にしてください
    https://youtu.be/2xEUyAzoNmY?t=3583

    View Slide

  7. Tridentとは?

    View Slide

  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ネイティブな共有ファイルサービス

    View Slide

  9. https://docs.netapp.com/us-en/astra-family/intro-family.html

    View Slide

  10. Trident Components

    View Slide

  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コマンドでも可能

    View Slide

  12. Tridentのインストール例

    View Slide

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

    View Slide

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

    View Slide

  15. TridentOrchastratorリソースを作成して
    Tridentをインストール
    [email protected]
    LVCFDUMHFUUSJEFOUPSDIFTUSBUPS
    /".&"(&
    USJEFOUE
    LVCFDUMOUSJEFOUHFUEFQMPZUSJEFOUDTJ
    /".&3&"%:6150%"5&"7"*-"#-&"(&
    USJEFOUDTJE
    LVCFDUMOUSJEFOUHFUETUSJEFOUDTJ
    /".&%&4*3&%$633&/53&"%:6150%"5&"7"*-"#-&/0%&4&-&$503
    "(&
    USJEFOUDTJLVCFSOFUFTJP
    BSDIBNE LVCFSOFUFTJPPTMJOVYE

    View Slide

  16. TridentBackendConfigを作成
    DBU&0'cLVCFDUMBQQMZG
    BQJ7FSTJPOUSJEFOUOFUBQQJPW
    LJOE5SJEFOU#BDLFOE$POpH
    NFUBEBUB
    OBNFPOUBQTBOEFGBVMU
    TQFD
    TUPSBHF%SJWFS/BNFPOUBQTBO
    NBOBHFNFOU-*'
    EBUB-*'
    [email protected]
    DSFEFOUJBMT
    OBNFCBDLFOEUCDPOUBQTBOTFDSFU
    &0'

    View Slide

  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

    View Slide

  18. TridentとKubernetes

    View Slide

  19. TridentとKubernetes
    ▶ TridentはKubernetesで各種ストレージ管理を⾏うためにTridentをCSIドライバーとして動
    作させている
    ▶ また、Trident管理のために複数のKubernetesコントローラーを実装している
    ▶ そのため、Tridentの実装に⼊る前にまずは
    + Kubernetes Operator(Kubernetesコントローラー)
    + CSI(ドライバー)
    ▶ などの概要について知っておいたほうが良い

    View Slide

  20. Kubernetes とは?
    ▶ Kubernetesはコンテナオーケストレーターの1つ
    ▶ etcd/control plane/worker nodeによって構成されたクラスターを構築し、
    様々なコンテナをKubernetes上のnodeで動作させたり、動作させてるコン
    テナとネットワークをいい感じに連携できるようにすることができる
    ▶ デプロイするコンテナなどをmanifestファイルで宣⾔的に記述することで、
    宣⾔した状態になるようにKubernetesがいい感じに調整処理を⾏ってくれる
    ▶ Googleが内部で運⽤していたコンテナ基盤であるBorgをOSS向けに作り直
    したコンテナオーケストレーター
    ▶ また、KubernetesはCloud Native Computing Foundation(CNCF)に寄贈さ
    れており、CNCFのGraduatedプロジェクトとしてコミュニティベースで管理
    されている

    View Slide

  21. https://github.com/kubernetes/website/blob/fb6364da0afd19e8a9515aaae2de9bc74a0a6abd/static/images/docs/components-of-kubernetes.png

    View Slide

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

    View Slide

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

    View Slide

  24. Kubernetes Controller

    View Slide

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

    View Slide

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

    View Slide

  27. KubernetesとCSI

    View Slide

  28. CSI
    ▶ KubernetesやMesos、Cloud Foundryなどコンテナオーケストレーター
    (CO)でストレージを利⽤するための共通の仕様を定義したもの
    + なのでKubernetes⽤の仕様、というわけでない
    + 例えばHashicorp NomadなどはすでにCSIを利⽤している
    ▶ ストレージプロバイダは⼀度CSIに対応したドライバーを書いておくだけ
    で、Kubernetesでもその他のCOでも利⽤できるものを⽬指している
    ▶ CSIの仕様はGithubのcontainer-storage-interface/specリポジトリにある
    spec.mdファイルで定義されている

    View Slide

  29. CSIで定義されている仕様
    ▶ CSI Driverの通信⽅法・提供⽅法について
    ▶ CSI Driverが提供する機能について
    ▶ COがCSI Driverを利⽤するためのgRPCのProtocol Buffers

    View Slide

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

    View Slide

  31. CSIが提供する機能
    ▶ ボリュームの作成/削除
    ▶ ノードへのボリュームのアタッチ/デタッチ
    ▶ ボリュームのマウント/アンマウント
    ▶ ボリュームのスナップショットの作成/削除
    ▶ etc...

    View Slide

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

    View Slide

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

    View Slide

  34. Node Plugin
    ▶ COに参加している各Worker Nodeで動くgRPCサーバー
    ▶ 以下のgRPCのサービスを実装したもの
    + Node Service
    + Identity Service
    ▶ ボリュームを対象Worker Nodeで利⽤するための機能を提供する
    ▶ 主に以下の機能を提供する
    + ノードにアタッチされたボリュームのフォーマット
    + ボリュームのマウント/アンマウント

    View Slide

  35. View Slide

  36. ボリュームライフサイクル

    View Slide

  37. CSIまとめ
    ▶ CSIとはストレージプロバイダがボリュームプラグインをCOに提供する
    ために定義された共通の仕様
    ▶ 具体的には以下のようなものを定義している
    + CSI Driverの動作環境や通信⽅法の定義
    + コンテナイメージ形式
    + UNIXドメインソケット/gRCPプロトコル
    + RPCインターフェイスの定義
    + Controller Plugin
    + Node Plugin

    View Slide

  38. Kubernetesとボリュームプラグイン

    View Slide

  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の内部実装の知識を必要とせずにボリュームプラグインを提供できる

    View Slide

  40. KubernetesとCSI Driverとの連携

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  46. Tridentの実装

    View Slide

  47. Trident Components(再掲)

    View Slide

  48. Trident Overview

    View Slide

  49. Trident Operator

    View Slide

  50. Trident Core(setup)

    View Slide

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

    View Slide

  52. Trident Core: その他のコンポーネント
    ▶ TransactionMonitor: ボリューム作成などを管理するためのTridentTransactionリソースを
    利⽤した実⾏処理タスクの管理コントローラー
    ▶ PeriopdicallyReconcileNodeAccessOnBackends: 各ノードと各TridentBackendが接続で
    きるように適切なポリシー設定が⾏われているかチェックするコントローラー
    ▶ k8shelper
    + Node Controller: ノード削除時に対象のTridentNodeを削除し、各TridentBackendの
    ポリシーから対象ノードの情報を削除するコントローラー
    ▶ CRD Controllers
    + reconcileTMR: TridentMirrorRelationshipリソースに応じたsnap mirrorの設定を⾏い、
    TridentMirrorRelationshipのステータスを更新する
    ▶ etc

    View Slide

  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はあるが実質使われてなさそう

    View Slide

  54. tridentctl/Rest API

    View Slide

  55. まとめ

    View Slide

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

    View Slide

  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

    View Slide

  58. Thanks / Question?
    ▶ @bells17
    ▶ Slide: https://speakerdeck.com/bells17
    ▶ @bells17_

    View Slide

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

    View Slide

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

    View Slide

  61. Meet the Specialists

    View Slide

  62. Appendix

    View Slide

  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を作成して差し替えるというもののよう

    View Slide

  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リソースはその他では⼀切使われていないようにみえるので、
    そもそもこの調整ループが動作することはなさそうに思える

    View Slide

  65. その他のコントローラー
    ▶ TransactionMonitor: ボリューム作成などを管理するためのTridentTransactionリソースを
    利⽤した実⾏処理タスクの管理コントローラー
    ▶ PeriopdicallyReconcileNodeAccessOnBackends: 各ノードと各TridentBackendが接続で
    きるように適切なポリシー設定が⾏われているかチェックするコントローラー

    View Slide

  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

    View Slide

  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

    View Slide

  68. CSIドライバーのmount⼿順(iSCSI)
    ▶ NodeStageVolume:
    + nodePrep処理が有効であればパッケージのインストールなどを実⾏
    + iscsiadmコマンドでiSCSIのターゲットを作成し、ログインを⾏う
    + 特定のLUNへのパスをスキャンし、そのLUNのすべてのSCSI disk-by-pathが作成される
    まで待機する
    + multipathデバイスが作成されるまで待機する
    + その後Raw Block Volume以外のファイルシステムを指定した場合はformatを⾏う
    + 利⽤可能なファイルシステム: xfs/ext3/ext4
    ▶ NodePublishVolume:
    + mountコマンドでデバイスをマウント

    View Slide

  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にスケジュールされるようにする

    View Slide

  70. TridentMirrorRelationshipとSnap Mirror
    ▶ TridentMirrorRelationshipリソースを使うとボリュームのsnap mirrorを設定できる
    ▶ ただしこの機能はまだ開発中のようでドキュメントなども記載は無い
    ▶ Snap Mirror=rsyncのように他のボリュームとデータをミラーリングできる
    ▶ 基本的にはIncremental Foreverによって書き込み内容のログが追記されていく
    ▶ また、StorageVM丸ごとミラーリングすることも可能(Tridentでは不可能のように思える)
    ▶ SnapMirror CloudというS3(プロトコルを使えるオブジェクトストレージ)への転送も可能

    View Slide