Azure CLIでAzure Kubernetes Serviceクラスターを作成する

2023年6月5日

AzureのAzure Kubernetes Service(AKS)を使用して、ジョブを設定しようと思ったのでAzureのAKSクラスターを作成していきたいと思います。

Azure Kubernetes Serviceクラスターを作成する

Azure CLIをインストールする

Azure CLIをローカルにインストールします。OSによって手順が違うので、細かい設定はこちらを参照してください。今回はmacで進めていきたいと思います。

以下のコマンドを実行します。

$ brew update && brew install azure-cli

正常にインストールされているか、確認します。

$ az --version
azure-cli                          2.6.0

command-modules-nspkg              2.0.3
core                               2.6.0
nspkg                              3.0.4
telemetry                          1.0.4

Python location '/usr/local/Cellar/azure-cli/2.6.0/libexec/bin/python'
Extensions directory '/Users/*******/.azure/cliextensions'

Python (Darwin) 3.8.2 (default, Mar 11 2020, 00:29:50)
[Clang 11.0.0 (clang-1100.0.33.17)]

Legal docs and information: aka.ms/AzureCliLegal


Your CLI is up-to-date.

Please let us know how we are doing: https://aka.ms/clihats
and let us know if you're interested in trying out our newest features: https://aka.ms/CLIUXstudy

Azureのcompletionを設定しておく

コマンドを補完するためにAzure CLIのcompletionをこちらからダウンロードして読み込みます。自分はzshを使用しているため、zshrcに設定しておきます。

# Azure completion
source /Users/*****/az.completion

azを押して、tabを押すと補完されるようになったと思います。

Azureにログインする

Azure にログインするために以下のコマンドの実行すると、認証画面が出力されるのでAzureアカウントを選択します。すると設定されているサブスクリプションが表示されます。

$ az login

/usr/local/Cellar/azure-cli/2.6.0/libexec/lib/python3.8/site-packages/jmespath/visitor.py:32: SyntaxWarning: "is" with a literal. Did you mean "=="?
  if x is 0 or x is 1:
/usr/local/Cellar/azure-cli/2.6.0/libexec/lib/python3.8/site-packages/jmespath/visitor.py:32: SyntaxWarning: "is" with a literal. Did you mean "=="?
  if x is 0 or x is 1:
/usr/local/Cellar/azure-cli/2.6.0/libexec/lib/python3.8/site-packages/jmespath/visitor.py:34: SyntaxWarning: "is" with a literal. Did you mean "=="?
  elif y is 0 or y is 1:
/usr/local/Cellar/azure-cli/2.6.0/libexec/lib/python3.8/site-packages/jmespath/visitor.py:34: SyntaxWarning: "is" with a literal. Did you mean "=="?
  elif y is 0 or y is 1:
/usr/local/Cellar/azure-cli/2.6.0/libexec/lib/python3.8/site-packages/jmespath/visitor.py:260: SyntaxWarning: "is" with a literal. Did you mean "=="?
  if original_result is 0:
You have logged in. Now let us find all the subscriptions to which you have access...
[
  {
    "cloudName": "AzureCloud",
    "homeTenantId": "****",
    "id": "****",
    "isDefault": true,
    "managedByTenants": [],
    "name": "***",
    "state": "Enabled",
    "tenantId": "****",
    "user": {
      "name": "****",
      "type": "user"
    }
  }
]

リソースグループを作成する

Azureへのログインが完了したので、リソースグループを作成していきます。

まず現在のリソースグループの確認を行います。

$ az group list
[
  {
    "id": "/subscriptions/*****/resourceGroups/Weblog",
    "location": "japaneast",
    "managedBy": null,
    "name": "Weblog",
    "properties": {
      "provisioningState": "Succeeded"
    },
    "tags": null,
    "type": "Microsoft.Resources/resourceGroups"
  },
  {
    "id": "/subscriptions/*****/resourceGroups/TOME",
    "location": "japaneast",
    "managedBy": null,
    "name": "TOME",
    "properties": {
      "provisioningState": "Succeeded"
    },
    "tags": {},
    "type": "Microsoft.Resources/resourceGroups"
  }
]

WeblogとTOMEというリソースが存在していますが、今回は新しいリソースグループを作成していこうと思います。

$ az group create --name sample --location japaneast
{
  "id": "/subscriptions/*****/resourceGroups/sample",
  "location": "japaneast",
  "managedBy": null,
  "name": "sample",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

AKSクラスターを作成する

最後に目的のクラスターを作成していきたいと思います。az create コマンドでAKSクラスターを作成します。

$ az aks create --resource-group sample --name sampleAKSCluster --node-vm-size Standard_B2s --node-count 1
{- Finished ..
  "aadProfile": null,
  "addonProfiles": null,
  "agentPoolProfiles": [
    {
      "availabilityZones": null,
      "count": 1,
      "enableAutoScaling": null,
      "enableNodePublicIp": false,
      "maxCount": null,
      "maxPods": 110,
      "minCount": null,
      "mode": "System",
      "name": "nodepool1",
      "nodeLabels": {},
      "nodeTaints": null,
      "orchestratorVersion": "1.15.11",
      "osDiskSizeGb": 100,
      "osType": "Linux",
      "provisioningState": "Succeeded",
      "scaleSetEvictionPolicy": null,
      "scaleSetPriority": null,
      "spotMaxPrice": null,
      "tags": null,
      "type": "VirtualMachineScaleSets",
      "vmSize": "Standard_B2s",
      "vnetSubnetId": null
    }
  ]・・・

これでAKSクラスターが作成できました。

AKSクラスターに接続する

AKSクラスターが作成できたので、AKSクラスターに接続を行います。

ローカル環境にkubectlがインストールされていない場合は以下のコマンドを実行します。

$ az aks install-cli

先程作成したクラスターへ接続を行います。–resource-groupにはこちらで作成したリソースを設定し、–nameにはこちらで作成したクラスター名を設定します。

$ az aks get-credentials --resource-group sample --name sampleAKSCluster
Merged "sampleAKSCluster" as current context in /Users/****/.kube/config

これでクラスターの情報が.kube/configに追加されました。

Deploymentを作成する

一通りの作業が終わったので、Deploymentを作成していきたいと思います。

$ kubectl apply -f https://k8s.io/examples/application/deployment.yaml
deployment.apps/nginx-deployment created

作成されたので、Podを確認します。

$ kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-7fd6966748-52rz6   1/1     Running   0          41s
nginx-deployment-7fd6966748-cq52w   1/1     Running   0          41s

正常に作成されていたのがわかったので、最後に削除していきます。

$ kubectl delete -f https://k8s.io/examples/application/deployment.yaml
deployment.apps "nginx-deployment" deleted
$ kubectl get pod
No resources found.

Podも全て削除されました。これで作成〜削除も正常にできました。

まとめ

今回はAzureでAzure Kubernetes Serviceを作成しました。過去にGKEを作成したこともあったので、あまり苦戦せずに出来たかなと思います。今後はKubernetes関連の勉強やリソース管理のできるTerraformとか、あとは自前のサーバーでKubernetesクラスターの構築等をやっていきたいです。