0
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」がインストールされていること。

事前準備

  • ローカルの環境変数に以下を定義しておきます。
    • ACR_NAME=acr0ituru
    • ACR_RES_GROUP=rg_ituru_acr
    • SP_NAME=sp_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のレジストリ作成

ACRのレジストリを作成します。

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

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


AKS と ACR の連携のためのサービスプリンシバルの定義

ACR のリソースIDの取得

$ ACR_ID=$(az acr show --name $ACR_NAME --query id --output tsv)

サービスプリンシパルのクライアントIDとシークレットの取得

SP_PASSWD=$(az ad sp create-for-rbac --name $SP_NAME --role Reader --scopes $ACR_ID --query password --output tsv)
APP_ID=$(az ad sp list --display-name $SP_NAME --query '[].{ID:appId}' --output tsv)

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 \
  --service-principal $APP_ID \
  --client-secret $SP_PASSWD

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

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

$ az aks get-credentials --admin --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 つのユースケースから眺めてみた

0
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
0
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?