次の方法で共有


Azure Kubernetes Service on Azure Stack Hub にテスト アプリケーションをデプロイする

これは、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 をクラスターにデプロイできます。

  1. 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
    

    Windows ユーザーの場合、 Chocolatey を使用して Helm をインストールします。

    choco install kubernetes-helm
    
  2. 最新の安定した Helm リポジトリがあることを確認します。

    helm repo add stable https://charts.helm.sh/stable
    helm repo update
    
  3. Prometheus をインストールします。

    helm install my-prometheus stable/prometheus --set server.service.type=LoadBalancer --set rbac.create=false
    
  4. Prometheus アカウントへの管理アクセス権をクラスターに付与します。 セキュリティ上の理由から、アクセス許可が低いほど優れています。

    kubectl create clusterrolebinding my-prometheus-server --clusterrole=cluster-admin --serviceaccount=default:my-prometheus-server
    
  5. Grafana をインストールします。

    helm install my-grafana stable/grafana --set service.type=LoadBalancer --set rbac.create=false
    
  6. 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

次のステップ

CLI での Azure Stack Hub での Azure Kubernetes Service の使用