将测试应用程序部署到 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 部署到群集。

  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. 确保具有最新的 stabled 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 容器注册表 (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

后续步骤

通过 CLI 使用 Azure Stack Hub 上的 Azure Kubernetes 服务