將測試應用程式部署到 Azure Stack Hub 的 Azure Kubernetes Service

本指南可協助您開始使用 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
    

    注意

    使用Chocolatey 安裝 Helm 的 Windows 使用者,請:

    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 Cmdlet 取得祕密:

\$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 叢集才能存取並從登錄中提取映像。 若要這樣做,您需要提供服務主體識別碼 (SPN) 和祕密,將 SPN 新增為來源登錄的參與者,然後建立 Kubernetes 祕密。 您也必須更新 YAML 檔案才能參考祕密。

將 SPN 新增至 ACR

將 SPN 新增為 ACR 的參與者。

注意

因為 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