これは、Azure Stack Hub で Azure Kubernetes Service (AKS) サービスの使用を開始するためのガイドです。 この記事では、Azure Stack Hub 上の AKS を理解できるように、いくつかのテスト アプリをクラスターにデプロイする方法について説明します。 Azure Stack Hub で使用できる機能は、グローバル Azure で使用できる機能の サブセット です。
作業を開始する前に、Azure Stack Hub インスタンスに AKS クラスターを作成できることを確認してください。 最初のクラスターのセットアップと作成の手順については、 CLI での Azure Stack Hub での Azure Kubernetes Service の使用に関するページを参照してください。
テスト アプリをデプロイする
スタンプが接続されている場合は、次の手順に従って 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
注
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 を追加します。
注
このスクリプトは、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