將測試應用程式部署至 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 部署到叢集。
下載並安裝 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 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