共用方式為


將測試應用程式部署至 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 叢集。 如需取得設定和建立第一個叢集的指示,請參閱 使用 Azure Stack Hub 上的 Azure Kubernetes Service 搭配 CLI

部署測試應用程式

如果您的戳記已連線,您可以遵循這些指示,將 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 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 叢集能夠從容器映像庫提取映像。 若要執行此操作,您必須提供服務主體 ID(SPN)和密碼,將 SPN 新增為源註冊表的貢獻者,並建立 Kubernetes 密碼。 您也需要更新 YAML 檔案以引用機密。

將 SPN 新增至 ACR

將SPN新增為 ACR 的參與者。

注意

此腳本已從 Azure Container Registry 網站 修改(bash 範例),因為 Azure Stack Hub 尚未具有 ACRPULL 角色。 此範例是 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

後續步驟

在 Azure Stack Hub 上使用 CLI 來運行 Azure Kubernetes Service