最近、結構思うのが、Kubernetesを使っている人でも、実はストレージをステートフルで利用している人がそんなに多くない。実際、コンテナの必要なときに作って、いらなくなったら消すという感じで使っているといらないかもしれない。ただ、コンテナの腹持ちにデータを入れていて、後生大事にコンテナを仮想マシンのようにして使っているとしたら、大変だなぁと思う。昔のAWSのようにエフェメラルなインスタンスだと思って使うのもありかもしれない。当時は、起動時にS3からデータを引っ張りだし、シャットダウン時に、S3に戻すということをやっていたが、シャットダウンがうまくいかなかったらデータがパーになる。昔話だが。
閑話休題
ラボ目的で利用することができるストレージを図にしてみた。
Webで調べて何も考えないでとりあえず作るということをしていると、あとでめんどくさいことになるので、ある程度情報を仕入れて検討することが必要だと思う。
シングルノードの場合
オレンジがCSIではないストレージ、青がCSIストレージを意味する。
まず、localは、Provisonerがない、つまり、手彫りなので、今更、選択をする必要がなく、簡単に使うならば、Rancherのlocal-pathが楽。k3sとかはデフォルトで入ってくる。また、CSIスナップショットが使えるLonghornが一番おすすめになる。ここには記載していないが、CSI-hostpathというスナップショット対応のストレージもあるのだが、テスト用でボリュームのパーミッションが必ず必要だったりしてもはや使う必要はない。
/dev/sdb などの追加ディスクを使える場合は、Cephとかも選択肢に入ってくるが、必要となるリソースが多い。
マルチノードの場合
オレンジがCSIではないストレージ、青がCSIストレージを意味する。
マルチノードの場合は、NFS/CIFSなどのNASのストレージやサーバも選択肢に入ってくる。ただし、ベンダーのCSIドライバを利用しない限り、CSIストレージを設定したとしてもスナップショットは利用できない。
シングルノードと同様に、CSIストレージではないnfsは、Provisonerがないため利用する必要はないと思う。CSIじゃなくていいのであれば、nfs-subを使うべきかと思う。NFS CSIやCIFS CSIも選択の余地はありそう。
各ノードの腹持ちのディスクを使える場合は、追加ディスク有無で選択の幅が広がるが、Longhornだと各ノードに追加ディスクが不要なので手軽だと思う。
まとめると、ラボ環境だとLonghorn一択のような気がしてきた。たしかにあまり考えることなく使えるストレージのような気がする。
ちなみに、Longhornは、以前だとストレージスナップショットの保存のためにオブジェクトストレージを用意する必要があったが、今はなくてもストレージスナップショットが切れるようになっている。
In Treeのストレージが軒並みコードから削除されていて、CSIストレージ全盛になったので、最低でもCSIストレージを選択することを強くおすすめする。