Azureのマネージドなkubernetesサービス Azure Container Service (AKS) がpreviewとしてリリースされました。
デフォルトでkubernetes 1.7が使われるのですが、このバージョンからAzure Managed DiskがVolumeとして使えるはずなので試してみました*1。
Azure PD (Managed/Blob) by khenidak · Pull Request #46360 · kubernetes/kubernetes · GitHub
AKSのセットアップ手順はこのドキュメントに従います。
注意事項として現時点では、ukwestとwestus2しか利用可能でないので、それ以外のlocationを指定するとエラーになります。
$ az group create --name myK8sGroup --location japaneast $ az aks create --resource-group myK8sGroup --name myK8sCluster --agent-count 1 --generate-ssh-keys //中略 The provided location 'japaneast' is not available for resource type 'Microsoft.ContainerService/managedClusters'. List of available regions for the resource type is 'ukwest,westus2'.
locationが正しいのに、リソースタイプがーというエラーが出ることがあります。
$ az aks create --resource-group myK8sGroup --name myK8sCluster --agent-count 1 --generate-ssh-keys The subscription is not registered for the resource type 'managedClusters'. Please re-register for this provider in order to have access to this resource type.
この場合、Azure Portalで自分のsubscriptionのResource Providerを開き、Microsoft.Container*
なプロバイダーをre-register
すると動きました。re-register
押してもUIに変化がないのですが、AKSが作れるようにはなりました。
また、az aks
コマンドは最新のAzure CLI 2.0でしか使えないのでアップデートするかCloud Shellを使いましょう。ただ、Cloud Shellで1回permissionエラーが出ましたが、2回目は出なかったので、何度か試すとよいかもしれません。
$ az --version azure-cli (2.0.20) $ az aks install-cli Downloading client to /usr/local/bin/kubectl from https://storage.googleapis.com/kubernetes-release/release/v1.8.2/bin/linux/amd64/kubectl Connection error while attempting to download client ([Errno 13] Permission denied: '/usr/local/bin/kubectl')
セットアップするとkubernetesのバージョンが1.7.7なことがわかります。
$ kubectl version Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.1", GitCommit:"f38e43b221d08850172a9a4ea785a86a3ffa3b3a", GitTreeState:"clean", BuildDate:"2017-10-11T23:27:35Z", GoVersion:"go1.8 .3", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.7", GitCommit:"8e1552342355496b62754e61ad5f802a0f3f1fa7", GitTreeState:"clean", BuildDate:"2017-09-28T23:56:03Z", GoVersion:"go1.8 .3", Compiler:"gc", Platform:"linux/amd64"}
また仮想マシン一覧を見ると以前のものとは違って、別のリソースグループでAgentのみが自分のサブスクリプションの仮想マシンとして起動していることがわかります。また所属するリソースグループは、AKSを作成するときに指定したリソースグループとは別のものです。
さて、Managed Diskの利用ですが、ここにexampleがあるのでつかってみます。
$ wget https://raw.githubusercontent.com/kubernetes/examples/master/staging/volumes/azure_disk/claim/managed-disk/managed-hdd/storageclass-managed-hdd.yaml $ wget https://raw.githubusercontent.com/kubernetes/examples/master/staging/volumes/azure_disk/claim/managed-disk/managed-hdd/pvc-on-managed-hdd.yaml $ wget https://raw.githubusercontent.com/kubernetes/examples/master/staging/volumes/azure_disk/claim/managed-disk/managed-hdd/pod-uses-managed-hdd.yaml $ kubectl create -f storageclass-managed-hdd.yaml storageclass "managedhdd" created $ kubectl create -f pvc-on-managed-hdd.yaml persistentvolumeclaim "dd-managed-hdd-5g" created $ kubectl create -f pod-uses-managed-hdd.yaml pod "pod-uses-managed-hdd-5g" created $ kubectl get pod -w NAME READY STATUS RESTARTS AGE azure-vote-back-4149398501-59g50 1/1 Running 0 15m azure-vote-front-1874756303-3f2rw 1/1 Running 0 15m pod-uses-managed-hdd-5g 0/1 Pending 0 6s pod-uses-managed-hdd-5g 0/1 Pending 0 1m pod-uses-managed-hdd-5g 0/1 ContainerCreating 0 1m pod-uses-managed-hdd-5g 1/1 Running 0 1m
kubernetesのagentの仮想マシンが所属するリソースグループの一覧を見ていると、まず新たにDiskが作成され、PodのStatusがContainerCreatingになったところでそのDiskが仮想マシンにマウントされたことがわかります。
つまりこのPluginで必要に応じたDiskの自動生成とマウントまでしてくれることがわかりました。ではこのPodを削除してみましょう。
$ kubectl delete pod pod-uses-managed-hdd-5g $ kubectl get event -w
eventでKilling container with id docker://az-c-01:Need to kill Pod
といったメッセージが出た直後に仮想マシンのDiskを見ると、DiskがアンマウントされUpdatingの状態になっていることがわかります。
つまり、Podが削除され不要になったらDiskのアンマウントリクエストが開始されます。というわけでAzure Managed Diskが使えるようになって便利になったkubernetes 1.7がAKSで使えるようになりました。
*1:それ以前はunmanaged diskしかサポートしていないので、kubernetesをインストールする仮想マシンをunmanagedにしないと、Azure DiskをVolumeとして使えないのでした