Azure Kubernetes Service on Azure Stack Hub にテスト アプリケーションをデプロイする
これは、Azure Stack Hub で Azure Kubernetes Service (AKS) サービスの使用を開始するためのガイドです。 この記事では、テスト アプリをクラスターにデプロイして、AKS on Azure Stack Hub についての理解を深める方法を説明します。 Azure Stack Hub で使用できる機能は、グローバルな Azure で利用できるものの一部です。
始める前に、Azure Stack Hub インスタンスに AKS クラスターを作成できることを確認します。 最初のクラスターを設定して作成する手順については、Azure Kubernetes Service on Azure Stack Hub と CLI の使用に関するページをご覧ください。
テスト アプリをデプロイする
スタンプが接続されている場合は、次の手順に従って Prometheus と Grafana をクラスターにデプロイできます。
Helm 3 をダウンロードしてインストールします。
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh
最新の安定した Helm リポジトリがあることを確認します。
helm repo add stable https://charts.helm.sh/stable helm repo update
Prometheus をインストールします。
helm install my-prometheus stable/prometheus --set server.service.type=LoadBalancer --set rbac.create=false
Prometheus アカウントにクラスター管理アクセス権を与えます。 セキュリティ上の理由から、低いアクセス許可にすることをお勧めします。
kubectl create clusterrolebinding my-prometheus-server --clusterrole=cluster-admin --serviceaccount=default:my-prometheus-server
Grafana をインストールします。
helm install my-grafana stable/grafana --set service.type=LoadBalancer --set rbac.create=false
Grafana ポータルのシークレットを取得します。
kubectl get secret --namespace default my-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
Note
Windows では、次の PowerShell コマンドレットを使用してシークレットを取得します。
\$env:Path = \$env:Path + ";\$env:USERPROFILE\\.azure-kubectl"
[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String(\$(kubectl get secret --namespace default my-grafana -o jsonpath="{.data.admin-password}")))
ACR を使用してアプリを AKS にデプロイする
この時点で、クライアント コンピューターはクラスターに接続されており、kubectl を使用してクラスターを構成し、アプリケーションをデプロイすることができます。 また、Azure Container Registry (ACR) サービスもテストする場合は、次の手順のようにしてできます。
ローカル ACR にアクセスするための Docker レジストリ シークレット
ローカル ACR からアプリケーション イメージをデプロイする場合は、Kubernetes クラスターがレジストリからイメージをプルするアクセス権を持つように、シークレットを格納する必要があります。 これを行うには、サービス プリンシパル ID (SPN) とシークレットを指定し、ソース レジストリに共同作成者として SPN を追加し、Kubernetes シークレットを作成する必要があります。 また、そのシークレットを参照するように YAML ファイルを更新する必要があります。
ACR に SPN を追加する
ACR に共同作成者として SPN を追加します。
Note
Azure Stack Hub には ACRPULL ロールがまだないため、このスクリプトは Azure Container Registry サイト (bash のサンプル) から変更されています。 このサンプルは PowerShell スクリプトです。同等のものを bash で記述できます。 実際のシステムの値を必ず追加してください。
# Modify for your environment. The ACR_NAME is the name of your Azure Container
# Registry, and the SERVICE_PRINCIPAL_ID is the SPN's 'appId' or
# one of its 'servicePrincipalNames' values.
ACR_NAME=mycontainerregistry
SERVICE_PRINCIPAL_ID=<service-principal-ID>
# Populate value required for subsequent command args
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)
# Assign the desired role to the SPN.
az role assignment create --assignee $SERVICE_PRINCIPAL_ID --scope $ACR_REGISTRY_ID --role contributor
Kubernetes でシークレットを作成する
次のコマンドを使用して、Kubernetes クラスターにシークレットを追加します。 コード スニペットに実際のシステムの値を必ず追加してください。
kubectl create secret docker-registry <secret name> \
kubectl create secret docker-registry <secret name> \
--docker-server=<ACR container registry URL> \
--docker-username=<service principal ID> \
--docker-password=<service principal secret>
アプリの YAML でシークレットを参照する例
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: democr2.azsacr.redmond.ext-n31r1208.masd.stbtest.microsoft.com/library/nginx:1.17.3
imagePullPolicy: Always
ports:
- containerPort: 80
imagePullSecrets:
- name: democr2
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
selector:
app: nginx
ports:
- protocol: "TCP"
port: 80
targetPort: 80
type: LoadBalancer