自宅でvSANクラスタを利用しているのですが、今回vSAN Management APIを使って監視を行うために入門してみました。
vSAN Management APIとは
vSANの各種設定変更、情報取得などAPIで実行できるよう vSAN Managemrnt API
としてAPI提供されています。SDKはこちらからダウンロード可能です。
今回私はPythonでAPIを実行するためにvSAN Management SDK for Pythonを利用しました。
APIを使って実現したい事
vSANを運用する中で注目するべき事はいくつかあるのですが、HAやDiskグループ障害時にvSAN Objectの健全性が特に気になります。
vSANではObject毎にStorage Policyで定義されたFTT(Failures To Tolerate)で冗長性が定義されます。ホスト障害時にどのvSAN Objectの可用性が低下しているのか確認する必要があります。
vCenterの以下の画面です。
vSAN Management SDK for Pythonを使う
さっそくvSAN Management SDK for Pythonをダウンロードして使ってみます。
SDKの中にはSample codeもあり、APIドキュメントも同梱してます。
vSAN SDKs Programming GuideにはPythonのsample codeも併せて解説されているため、今回参考になりました。scriptを書く際に必要になるSDK内のファイルは以下2つです。
bindings/vsanmgmtObjects.py
- vimの定義
samplecode/vsanapiutils.py
- vcMosやesxMosなどvSAN APIのメソッド実行で必要
仮想オブジェクトの取得はAPI Docを見るとVsanObjectSystem
のVsanQueryObjectIdentities
で取得出来そうです。
Sample code
実際に動かしてみたSample codeをgithubに上げました。
以下のようなコマンドで VsanQueryObjectIdentities
を実行出来ます。
python3.7 get_Virtual_Objects.py --host $host -u [email protected] -p $pass -c Cluster
ポイントなのがvSAN APIを実行する対象がESXiなのか、vCenterなのかによって各種メソッドのオプション、メソッド名などが変わります。このためvcMosとesxMosで分かれているようでした。
scriptではCluster名を指定しない場合、すべてのクラスタを対象に実行するのですがホスト電源断 or vSANを有効にしていないクラスタの場合、レスポンスに時間がかかりますが、vSANクラスタの場合はすぐに情報が取得できます。
とりあえずvSAN APIでobj情報取れた。普通にレスポンス遅かったりSPBMから値拾ってきてquery投げないといけないのかなーと思ったけど、電源落としているクラスタで応答なかったからとか、シンプルにリクエストして情報は取れる感じだった。
— spg (@spg_games) October 31, 2021
ちなみにSkyline 健全性
のvSAN全般、ホスト視点の障害監視はVsanQueryVcClusterHealthSummary
あたりを実行すれば情報取れそうでした。
`VsanQueryVcClusterHealthSummary` だとホスト視点で情報取れるな。
— spg (@spg_games) October 31, 2021
Skyline 健全性の方か。
蛇足
ちなみに、SDKには含まれていないgolangはgovmomiでgovcと共にサポートされているようでした。
- https://github.com/vmware/govmomi/blob/master/govc/USAGE.md#vsaninfo
- https://github.com/vmware/govmomi/tree/master/vsan
govcで取れるならjsonでdumpする事もできるので、監視はこちらの方が良いかもしれませんね。
まとめ
今回はvSAN Management APIを使い、vSAN Objectの情報をPythonで取得してみました。これまでpyvmomiなどでスクリプトを書いていた方にはとっつきやすそうでしたが、SPBM(Storage Policy Based Management)が出てくるとendpointが特殊でちょっと注意が必要そうでした😓
vSANのオペレーションは割とvCenter上でRVCやESXiのobjtool
やosfs-mkdir
などを使っていましたが、これからはvSAN APIも活用していきたいと思います。