将测试应用程序部署到 Azure Stack Hub 上的 Azure Kubernetes 服务
本指南可帮助你开始在 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 服务。
部署测试应用
如果你的标记已连接,则可以按照以下说明将 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
确保具有最新的 stabled 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 容器注册表 (ACR) 服务,则可以按照以下说明进行操作。
用于访问本地 ACR 的 Docker 注册表机密
如果要从本地 ACR 部署应用程序映像,则需要存储机密,以便 Kubernetes 群集有权从注册表中提取映像。 为此,你需要提供服务主体 ID (SPN) 和机密,将 SPN 作为参与者添加到源注册表,并创建 Kubernetes 机密。 还需要更新 YAML 文件以引用该机密。
将 SPN 添加到 ACR 中
将 SPN 作为参与者添加到 ACR。
注意
此脚本已从 Azure 容器注册表站点(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