銀の光と碧い空

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

AKSでADEを適用すると、Azure DiskがPVとして利用できなくなった話

前回のエントリでADEを適用すると、/dev/sdcにBEK volumeがデバイスがマウントされると書いたのですが、

tech.tanaka733.net

それがうまく処理できないケースとして、kubernetesのAzure Cloud Providerとの組み合わせがあります。これについてはすでにissueとして報告しており、解決策が議論されています。

github.com

問題は、Azure DiskをkubernetesのPersistent Volumeとして利用する場合、ADEが有効化されている仮想マシンにマウントされると、/dev/sdcにPVとしてアタッチされたAzure Diskのデバイスが存在していると認識してしまうというものです。Azure Cloud Providerの問題なので、AKSでも発生しますし、素のkubernetesをAzure Cloud Providerを有効化しても発生します。

Azure Disk Encryption自体は透過的に働くので、kubernetesとは独立しているような気がするのですが、デバイスのマウント先の検出するロジックで問題が発生しているようです。

Azure Cloud ProviderはPVとしてマウントされたAzue Diskのデバイスについて必要な処理を行うのですが、その際、すでにマウント済みのデバイス*1は除外するようにコードが記述されています。が、この処理がADEのBEK volumeについての考慮が漏れているらしいというのが事の真相のようです。

kubernetes/azure_common_linux.go at v1.9.9 · kubernetes/kubernetes · GitHub

workaroundはなさそう?*2なので、しばらくはissueの行方を見守る必要がありそうです。

*1:PV以外の目的であらかじめマウントされている外付けデバイスなど

*2:udev ruleを記述すれば回避できるかも?