銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

Azure Diskの限界を突破する(かもしれない)dyskを試してみた

ひとりAdvent Calendar 8日目です。

adventar.org

Azure上のLinux VMでBlock Deviceを使うのであればAzure Diskをマウントすることになると思うのですが、つけはずしに時間がかかったり、VMのインスタンスサイズごとにマウントできるデバイスの数に上限があったりと、正直つかいづらいケースもあります。特にkubernetesのようにPodがVM間を移動するたびにバンバンDiskをつけはずしするようなケースだと、なにかとこの制約にはまったりします。 今日はそのような限界を突破するかもしれないdyskというものを試してみました。 Project Status: Betaとある通り、不安定な動作になることもあるので試す場合は専用のテストインスタンスでやることをおすすめします。

リポジトリはここにあります。

GitHub - khenidak/dysk: Attach Azure disks in < 1 second. Attach as many as you want. Attach them where ever you want. dysk mounts Azure disks as Linux block devices directly on VMs without dependency on the host.

インストール手順はここにあります。

dysk/build-install.md at master · khenidak/dysk · GitHub

ここに4.10.x++ kernel versionsと書いてあるので、今回はRHEL 7 ではなくUbuntu 18.04.1 LTSを使います。

# uname -r
4.15.0-1035-azure

Storage AccountのBlobを直接マウントするので、同じリソースグループ、同じLocationにStorage Accountを作っておきます。endpoint v1とv2の両方をサポートするとありますが、v2の場合はHTTPにしないと動かないコマンドがあるのでHTTPをサポートするようにしておきます。

インストールスクリプトを見ればわかるのですが、dockerで必要なバイナリを動かしているので、dockerのインストールが必要です。

docs.docker.com

CLIを実行するにもdockerイメージが動いている必要がありますし、OS再起動後なども必要なdockerイメージを実行しておく必要があります。CLIが実行できるようになったら、ストレージアカウントの名前とキーを指定して実行してみます。

f:id:tanaka733:20181206150404p:plain

このように1秒ほどでマウントが完了しています。listコマンドでリストすることもできます。

f:id:tanaka733:20181206150608p:plain

試しにマウントとアンマウントを繰り返してみます。既存のファイルの場合2秒ほどかかっていますが、Azure Diskとは異ってすぐにマウントしなおすことができます。

f:id:tanaka733:20181206151240p:plain

オプションの指定の仕方については、ドキュメントやヘルプと実際のコマンドの挙動がやや一致していないのですが、dyskctl mount -a {Storage Accountの名前} -k {Storage Account Key} -c {Blobのあるコンテナの名前} -p {Blobの名前} -l -b true で既存Blobをマウントできます。マウントされたときに付けられる名前は、auto-createの場合は作成されるBlobファイルと一致しますが、既存Blobをマウントする場合は異なる名前がつけられます。

最初に書いた通りまたBetaの状態なので、これですぐに解決できるわけではないのですが、こういう動きがあるというのが興味深かったので試してみました。