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.

【自動SP】 Azure CLI を使用して Azure Kubernetes Service (AKS) と Azure Container Registry (ACR) をデプロイし連携させる

Posted at

サービスプリンシパルを自動的に作成して使用する方法

この記事 をベースにデプロイしています。(ほぼそのまま記載部分あり)

ローカル環境

macOS Big Sur 11.3
python 3.8.3

前提条件

  1. Azure環境がすでに用意されていること(テナント/サブスクリプション)。
  2. ローカル環境に「azure cli」がインストールされていること。
  3. このシナリオでは、Azure CLI によって、AKS クラスター用のサービスプリンシパルが自動的に作成されます。 この操作を正しく完了するためには、Azureアカウントが、サービスプリンシパルを作成するための適切な権限を持っている必要があります。

事前準備

  • ローカルの環境変数に以下を定義しておきます。
    • ACR_NAME=acr0ituru
    • ACR_RES_GROUP=rg_ituru_acr
    • AKS_CLUSTER_NAME=ituruAKSCluster
    • AKS_RES_GROUP=rg_ituru_aks_cp

Azure にログイン

azure cli バージョンの確認

$ az version                    

{
  "azure-cli": "2.26.1",
  "azure-cli-core": "2.26.1",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {
    "azure-iot": "0.10.13"
  }
}

使用するテナントのAzure環境へのログイン

$ az login --tenant <tenant_id>

使用サブスクリプションを定義します

$ az account set --subscription '<サブスクリプション名>'

Azure Container Registry

ACR リソースグループの作成

$ az group create --resource-group $ACR_RES_GROUP --location japaneast

ACRのレジストリ作成

$ az acr create --resource-group $ACR_RES_GROUP --name $ACR_NAME --sku Standard --location japaneast

数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。loginServerが、"acr0ituru.azurecr.io"(指定したACR名)になっていることを確認します。


Azure Kubernetes Service

AKS リソースグループの作成

$ az group create --name $AKS_RES_GROUP --location japaneast

クラスターの監視を有効にする

Microsoft.OperationsManagement と Microsoft.OperationalInsights がサブスクリプションで登録されていることを確認します。

$ az provider show -n Microsoft.OperationsManagement -o table
$ az provider show -n Microsoft.OperationalInsights -o table

登録されていない場合は、次を使用して、Microsoft.OperationsManagement と Microsoft.OperationalInsights を登録します。

$ az provider register --namespace Microsoft.OperationsManagement
$ az provider register --namespace Microsoft.OperationalInsights

AKS クラスターの作成

クラスターを 3 つのノードで作成します。ACRとAKS連携のためのパラーメータも定義します。

$ az aks create \
  --name $AKS_CLUSTER_NAME \
  --resource-group $AKS_RES_GROUP \
  --node-count 3 \
  --enable-addons monitoring \
  --node-vm-size Standard_DS2_v2 \
  --generate-ssh-keys \
  --attach-acr $ACR_NAME

数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。

Kubernetesクラスタ接続のための認証情報の取得

$ az aks get-credentials --resource-group $AKS_RES_GROUP --name $AKS_CLUSTER_NAME

.kube/configファイルに接続情報を書き込むことで、ローカルからクラスタ操作できるようになります。


kubectlコマンドを使ったクラスターの操作

ローカルから、kubectlコマンド実行してみる

kubectl をローカルにインストールします

$ az aks install-cli            

接続先クラスターの確認

$ kubectl config view

クラスターの情報確認

$ kubectl cluster-info

クラスター上で動く Node の確認

$ kubectl get node

-o=wideをつけると、Nodeの追加情報表示(IPやOSバージョン等)

$ kubectl get node -o=wide

3台のNodeのうち、1台目の詳細確認

$ kubectl describe node $(kubectl get node -o=jsonpath='{.items[0].metadata.name}')

ヘルプ

$ kubectl help

ACR および AKS の操作

イメージを ACR にインポートする

$ az acr import  -n $ACR_NAME --source docker.io/library/nginx:latest --image nginx:v1

ACR から AKS にサンプルイメージをデプロイする

デプロイするマニフェスト

acr-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx0-deployment
  labels:
    app: nginx0-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx0
  template:
    metadata:
      labels:
        app: nginx0
    spec:
      containers:
      - name: nginx
        image: acr0ituru.azurecr.io/nginx:v1
        ports:
        - containerPort: 80

デプロイの実施

$ kubectl apply -f acr-nginx.yaml

Podの確認

$ kubectl get pods

番外編:課金回避のためのリソースグループの削除

リソースグループ、コンテナーサービス、およびすべての関連リソースを削除します。

az group delete --name $AKS_RES_GROUP --yes --no-wait
az group delete --name $ACR_RES_GROUP --yes --no-wait

参考情報

以下の情報を参考にさせていただきました。感謝申し上げます。
az ad sp create-for-rbac は何をやっているのか
Azure AD のサービスプリンシパルを 3 つのユースケースから眺めてみた

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?