1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AKS の command invoke をやってみた

Posted at

背景と目的

Public preview of Azure Kubernetes Service (AKS) run-command feature によると、az コマンドで kubectl が実行できるとあり、プライベート AKS で試してみました。

前提条件

AzureCLI のバージョンを確認します。この時点では aks-preview エクステンションは有効になっていません。

zsh
az version

{
  "azure-cli": "2.21.0",
  "azure-cli-core": "2.21.0",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {}
}

実施内容

zsh
# 環境変数をセットします。
azRegion=japaneast
azRG=aksdevrg
azAksName=devtestaks

# リソースグループを作成します。
az group create \
  --location $azRegion \
  --name $azRG

# --node-resource-group を使用するため、aks-preview エクステンションを有効にします。
az extension add \
  --name aks-preview

# プライベート AKS を作成します。
az aks create \
  --name $azAksName \
  --resource-group $azRG \
  --node-resource-group ${azRG}-node \
  --node-vm-size Standard_B2s \
  --node-count 1 \
  --generate-ssh-keys \
  --enable-private-cluster

# kubectl を使うための認証情報を取得します。
az aks get-credentials \
  --name $azAksName \
  --resource-group $azRG

# エラーになるとわかっていますが、試しに AKS クラスターの認証情報を取得します。
kubectl config get-contexts

CURRENT   NAME             CLUSTER          AUTHINFO                          NAMESPACE
*         devtestaks       devtestaks       clusterUser_aksdevrg_devtestaks   
          docker-desktop   docker-desktop   docker-desktop                    

# AKS のノード情報を取得します。プライベート AKS なので VNET の外からは接続エラーとなります。
kubectl get nodes

Unable to connect to the server: dial tcp: lookup devtestaks-aksdevrg-bf5458-2c72445c.4948a687-7a9d-41a0-81e7-fb34109db694.privatelink.japaneast.azmk8s.io on 192.168.0.1:53: no such host

# AKS の認証情報は不要なので削除しておきます。
kubectl config delete-context devtestaks

# aks command invoke を使うための登録を行います。
az feature register \
  --namespace "Microsoft.ContainerService" \
  --name "RunCommandPreview"

# RunCommandPreview が登録されたことを確認します。
az feature list \
  --query "[?contains(name, 'Microsoft.ContainerService/RunCommandPreview')].{Name:name,State:properties.state}" \
  --output table

Name                                          State
--------------------------------------------  ----------
Microsoft.ContainerService/RunCommandPreview  Registered

実施結果

zsh
# AKS のノード情報を取得します。
az aks command invoke \
  --name $azAksName \
  --resource-group $azRG \
  --command "kubectl get nodes"

{
  "exitCode": 0,
  "finishedAt": "2021-04-10T11:37:02+00:00",
  "id": "dd7185ed1cb541e58871d282babd74ad",
  "logs": "NAME                                STATUS   ROLES   AGE     VERSION\naks-nodepool1-73361849-vmss000000   Ready    agent   7m28s   v1.18.14\n",
  "provisioningState": "Succeeded",
  "reason": null,
  "startedAt": "2021-04-10T11:37:01+00:00"
}

# kubectl を実行したかのように、AKS のノード情報を取得します。
az aks command invoke \
  --name $azAksName \
  --resource-group $azRG \
  --command "kubectl get nodes" \
  --query logs \
  --output tsv

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-73361849-vmss000000   Ready    agent   8m50s   v1.18.14

# nginx のマニフェストを作成します。
az aks command invoke \
  --name $azAksName \
  --resource-group $azRG \
  --command "kubectl run nginx --image=nginx --dry-run=client --output yaml" \
  --query logs \
  --output tsv > deployment.yaml

# nginx の Pod を作成します。
az aks command invoke \
  --name $azAksName \
  --resource-group $azRG \
  --command "kubectl apply -f deployment.yaml" \
  --file deployment.yaml \
  --query logs \
  --output tsv

pod/nginx created

# nginx の Pod の情報を取得します。
az aks command invoke \
  --name $azAksName \
  --resource-group $azRG \
  --command "kubectl get pod nginx" \
  --file deployment.yaml \
  --query logs \
  --output tsv

NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          99s

# nginx の Pod に入ってみますが、流石に無理なようです。
az aks command invoke \
  --name $azAksName \
  --resource-group $azRG \
  --command "kubectl exec -it nginx -- bash" \
  --query logs \
  --output tsv

Unable to use a TTY - input is not a terminal or the right kind of file

# nginx の Pod のホスト名を取得します。
az aks command invoke \
  --name $azAksName \
  --resource-group $azRG \
  --command "kubectl exec nginx -- hostname" \
  --query logs \
  --output tsv

nginx

参考

az aks command

検証が終わったら後片付けをしましょう。

zsh
az group delete \
  --name $azRG
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?