この記事を読んでできるようになること
- kubernetes 上から Proxmox 上の Ceph を PV として利用する
この記事を読んでもできないこと
- kubernetes 上から Proxmox 上の Ceph を S3互換のストレージ として利用する
お断り
これは個人的な備忘録として作業中のメモを整理したものです。筆者はあまり詳しくないため誤った、もしくは推奨されていない操作を行っている可能性があります。 内容が更新されている可能性があるため、公式ドキュメントを確認することをオススメします
- https://rook.io/docs/rook/latest-release/Getting-Started/intro/
- https://pve.proxmox.com/wiki/Deploy_Hyper-Converged_Ceph_Cluster
以下常体で記載
モチベーション
Rook を使うことで kubernetes 上に Ceph を利用できるが、Proxmox も各 VM やイメージの保存先として Ceph を構築する機能を提供してくれている。 Proxmoxがわざわざ用意してくれているのに、それを使わないのはもったいない
Rookをインストール
参考: https://rook.io/docs/rook/latest-release/Helm-Charts/operator-chart/
ひとまずRookのオペレーターをインストールする。Helmを使う場合は下のように実行する
今回はArgoCDを使った
しばらくするとRookのオペレーターが起動したことを確認できる
起動していることを確認できればRookのインストールは完了
Ceph接続情報の取得
参考: https://rook.io/docs/rook/latest-release/CRDs/Cluster/external-cluster/
CephをProxmoxから利用できる状態となっていて、cephfsが有効になっていることを前提にする。 まずRookがPVを作成するpoolを作成する。このpoolという概念もよく分かっていないが、雰囲気からしてこのpoolがブロックデバイス的な何かを切り出す設定なのだと思う
Web UIからCeph
->Pools
を開いてCreate
を押し、Rookから利用するpoolを作成する。設定は好きなもので問題ないと思う
もしくはProxmoxのホスト上でコマンドを実行する
FYI: コマンドオプション
作成が完了したら次のコマンドをProxmoxのホスト上で実行する。必要があれば--dry-run
オプションをつけて実行することで動作チェックができる
出力されたコマンドは次に使うのでメモしておく
Cephクラスターのデプロイ
kubectlが使えるホスト上で、つまりクラスターへの操作権限があるホスト上で、先ほど得られたコマンドを実行する
その後次のコマンドも実行する。いろいろ作成されたログが流れると思う
この時点でstorageClass
が作成されてはいるが現状まだ利用できないので、外部に接続する用のCephクラスターをデプロイする
今回はArgoCDを使った。下に私が使ったマニフェストを貼るが、若干パラメーターが異なるため適時修正が必要だと思う
ここまでの作業がうまくいっていれば、Proxmox上のCephをRookを通じて利用できるようになっている
動作チェック
次の2つのマニフェストを作成する
test-pvc.yaml
test-pod.yaml
上2つのマニフェストをapplyする
適当なファイルをpvcがマウントされているディレクトリに作成してみる
Podを消して再度起動し、先ほど書き込んだ内容が保持されていることを確認する
作成したリソースを削除する
終わりに
以上でRookを使ってProxmox上のCephを利用できるようになっているはずだ。kubernetesを組む場合のデータの永続化の手段として使われることが多い(気がする)local-path-provisionerや、nfs-provisionerと比較して耐障害性が必要な場合、や分散ストレージの言葉のカッコよさに惹かれて、 利用するのが良いと思う。