zaki work log

作業ログやら生活ログやらなんやら

[Azure/AKS] CLI(azコマンド)でマネージドK8sクラスタを作成

AzureのAKSクラスタCLIで作成する。(それだけ)
作業時のログなので、実際の作業は公式ドキュメントを確認すること。

docs.microsoft.com

azコマンド

こちら

zaki-hmkc.hatenablog.com

リソースグループを作成

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

$ az group create --name sample-rg --location eastus

実行結果

[zaki@cloud-dev ~]$ time az group create --name sample-rg --location eastus
{
  "id": "/subscriptions/****************/resourceGroups/sample-rg",
  "location": "eastus",
  "managedBy": null,
  "name": "sample-rg",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

real    0m1.843s
user    0m0.396s
sys     0m0.041s

クラスタの作成

前段で作成したリソースグループを指定してクラスタを作成する。

$ az aks create \
  --resource-group sample-rg \
  --name sample-cluster \
  --node-count 2 \
  --node-vm-size Standard_B2s \
  --generate-ssh-keys \
  --kubernetes-version 1.15.12

クイックスタートの内容から--enable-addons monitoringを削除し、代わりにインスタンスタイプの指定--node-vm-size Standard_B1msとノード数--node-count 2、それとKubernetesバージョン指定--kubernetes-version 1.15.12を追加・変更している。

ちなみにKubernetesバージョンは1.15だとエラーになる。

>   --kubernetes-version 1.15
--kubernetes-version should be the full version number, such as "1.11.8" or "1.12.6"

また、ノードサイズが小さすぎるとエラーになる.
以下はStandard_B1ms(1vCPU/RAM2GB)を指定した場合

Operation failed with status: 'Bad Request'. Details: System node pool must use VM sku with more than 2 cores and 4GB memory. N
odepool name: nodepool1.

実行結果

[zaki@cloud-dev ~]$ time az aks create \
>   --resource-group sample-rg \
>   --name sample-cluster \
>   --node-count 2 \
>   --node-vm-size Standard_B2s \
>   --generate-ssh-keys \
>   --kubernetes-version 1.15.12

Finished service principal creation[##################################]  100.0000%

このまま- Running ..という表示になり、そのまま待っていればクラスタが作成される。

[zaki@cloud-dev ~]$ time az aks create \
>   --resource-group sample-rg \
>   --name sample-cluster \
>   --node-count 2 \
>   --node-vm-size Standard_B2s \
>   --generate-ssh-keys \
>   --kubernetes-version 1.15.12
{- Finished ..
  "aadProfile": null,
  "addonProfiles": {
    "KubeDashboard": {
      "config": null,
      "enabled": true,
      "identity": null
    }
  },

[...]

    "networkPolicy": null,
    "outboundType": "loadBalancer",
    "podCidr": "10.244.0.0/16",
    "serviceCidr": "10.0.0.0/16"
  },
  "nodeResourceGroup": "MC_sample-rg_sample-cluster_eastus",
  "privateFqdn": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "sample-rg",
  "servicePrincipalProfile": {
    "clientId": "************",
    "secret": null
  },
  "sku": {
    "name": "Basic",
    "tier": "Free"
  },
  "tags": null,
  "type": "Microsoft.ContainerService/ManagedClusters",
  "windowsProfile": null
}

real    4m19.283s
user    0m0.651s
sys     0m0.062s

f:id:zaki-hmkc:20200729090606p:plain

(補足)使用可能バージョン

    --kubernetes-version -k                   : Version of Kubernetes to use for creating the
                                                cluster, such as "1.16.9".  Values from: `az aks
                                                get-versions`.

多分こんな感じ

[zaki@cloud-dev ~]$ az aks get-versions -l eastus --query 'orchestrators[].orchestratorVersion'
[
  "1.15.11",
  "1.15.12",
  "1.16.10",
  "1.17.7",
  "1.18.2",
  "1.18.4"
]

認証情報設定

クラスタ作成しただけだと、まだ接続情報がない。
以下のコマンドで~/.kube/configを更新できる。
(kubectlは既に使用可能な状態、の場合)

$ az aks get-credentials --resource-group sample-rg --name sample-cluster
[zaki@cloud-dev ~]$ az aks get-credentials --resource-group sample-rg --name sample-cluster
Merged "sample-cluster" as current context in /home/zaki/.kube/config

~/.kube/configが既にある場合は、AKSの認証情報はマージされる。

クラスタの状態

[zaki@cloud-dev ~]$ kc get node
NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-27260109-vmss000000   Ready    agent   6m18s   v1.15.12
aks-nodepool1-27260109-vmss000001   Ready    agent   6m      v1.15.12
[zaki@cloud-dev ~]$ kc get pod -A
NAMESPACE     NAME                                    READY   STATUS    RESTARTS   AGE
kube-system   coredns-698c77c5d7-8wzgw                1/1     Running   0          7m25s
kube-system   coredns-698c77c5d7-rcp9j                1/1     Running   0          5m53s
kube-system   coredns-autoscaler-5468748cfb-zr446     1/1     Running   0          7m23s
kube-system   kube-proxy-bwfdj                        1/1     Running   0          6m3s
kube-system   kube-proxy-ql2tp                        1/1     Running   0          6m21s
kube-system   kubernetes-dashboard-74d8c675bc-klcpr   1/1     Running   2          7m24s
kube-system   metrics-server-6585d46b55-nh2bm         1/1     Running   0          7m25s
kube-system   tunnelfront-55cd76b75d-lq4qb            2/2     Running   0          7m22s

workerノードのROLEがagentになってるのがなんとなく特徴的。

クラスタの削除

$ az aks delete --resource-group sample-rg --name sample-cluster

リソースグループ毎

リソースグループを削除することで、全て消える。
--no-waitについてはVMのときと同じで、非同期で処理するかどうか。

$ az group delete --name sample-rg --yes --no-wait

azはJMESPATHと仲良くならないといけないようだなー