#目的
前回
まずは、開発とデプロイの環境を整えましょう。
###kubernetesについて
Kubernetesを使えるサービスは以下の通りですね。
Azure:AKS
AWS:EKS
Google Cloud:GKE
筆者はAzureを使っているので、AKSをベースに記載していきます。
Kubernetes(以降、K8S)の開発に入れば、どれを使おうともほぼ変わらないと思います。
##AKSの構築
Azure Portalからも作るのが一般的ですが、Azure CLIやPythonのライブラリazureml.core.computeからも作れます。
- クイック スタート:Azure CLI を使用して Azure Kubernetes Service クラスターをデプロイする
- Azure Kubernetes Service クラスターを作成してアタッチする
今回は、色々な事情からAzureMLのpythonライブラリを使用したいと思います。
前回作成したAzure VM環境から以下のPythonコマンドでAKSを作成します。
注)成功した時点から課金が始まります。
from azureml.core.compute import AksCompute, ComputeTarget
prov_config = AksCompute.provisioning_configuration(
agent_count=3,
vm_size='Standard_D4a_v4',
location='japaneast'
)
aks_name = 'myaks'
aks_target = ComputeTarget.create(
workspace = ws,
name = aks_name,
provisioning_configuration = prov_config
)
aks_target.wait_for_completion(show_output = True)
なるべく安く、しかも画像を扱う深層学習を扱いたいので、メモリのVMはStandard_D4a_v4を使用しました。
Standard_D4a_v4のスペック
vCPU | RAM | 一時ストレージ |
---|---|---|
4 | 16GiB | 100GiB |
また、K8Sの機能を発揮するためにノードは3としています。
この構成で、2021年1月現在で無停止で月々5万円強のコストとなります。
なので、使わないときは停止しておきましょう。
7~8分程度で、AKSが作成されます。
AKSが作成されると、AKSようのリソースグループが新たに作成されます。
作成されたリソースグループに、指定したノード分の仮想マシンと仮想ディスク、ネットワークインターフェースのリソースが作成されていることが分かります。
※この図には、のちに作成するウェブアプリのためのリソースも含まれています。
###クラスタへの接続
Azure CLIが使用できるコマンドラインから、以下のコマンドでAKSクラスタに接続します。
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
myResourceGroupはAKS作成時に生成されたリソースグループではなく、AKSを管理するリソースグループを指定します。
このコマンドを使用することで、AKSへのアクセス情報を記載した設定ファイルが、~/.kube/configに作成されます。
したがって、以降は、AKSを新たに作らない限り、このコマンドの実行は不要です。
試しにkubectl get nodeコマンドで、生成されたノードを確認してみましょう。
kubectl get node
NAME STATUS ROLES AGE VERSION
aks-agentpool-12345678-0 Ready agent 14m45s v1.17.9
aks-agentpool-12345678-1 Ready agent 14m45s v1.17.9
aks-agentpool-12345678-2 Ready agent 14m45s v1.17.9
ノードが3つ生成されていることが分かります。
ノードの数は後から自由に変更可能です。
0にすることもできますが、復旧が困難となるため、やめましょう。
kubectlは、かなり権限の広いコマンドで以下のようにすべてのノード、コンテナを削除することも可能ですが、環境破壊者なので、使わないように注意しましょう。
# 使っちゃだめ
kubectl delete node --all
kubectl delete pods --all
kubectl delete services --all
(続く)