Bereitstellen von Testanwendungen für Azure Kubernetes Service in Azure Stack Hub

Dies ist ein Leitfaden für die ersten Schritte mit Azure Kubernetes Service (AKS) in Azure Stack Hub. In diesem Artikel wird beschrieben, wie Sie einige Test-Apps in Ihrem Cluster bereitstellen, sodass Sie sich mit AKS in Azure Stack Hub vertraut machen können. Die in Azure Stack Hub verfügbare Funktionalität ist eine Teilmenge dessen, was im globalen Azure verfügbar ist.

Stellen Sie vor den ersten Schritten sicher, dass Sie einen AKS-Cluster auf Ihrer Azure Stack Hub-Instanz erstellen können. Eine Anleitung zum Einrichten und Erstellen Ihres ersten Clusters finden Sie unter Verwenden von Azure Kubernetes Service in Azure Stack Hub mit der CLI.

Bereitstellen von Test-Apps

Wenn Ihre Skalierungseinheit verbunden ist, können Sie diese Anweisungen befolgen, um Prometheus und Grafana für den Cluster bereitzustellen.

  1. Laden Sie Helm 3 herunter, und installieren Sie es:

    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
    

    Hinweis

    Verwenden Sie für Windows Benutzer Chocolatey, um Helm zu installieren:

    choco install kubernetes-helm
    
  2. Stellen Sie sicher, dass Sie über das neueste stabile Helm-Repository verfügen:

    helm repo add stable https://charts.helm.sh/stable
    helm repo update
    
  3. Installieren Sie Prometheus.

    helm install my-prometheus stable/prometheus --set server.service.type=LoadBalancer --set rbac.create=false
    
  4. Gewähren Sie dem Cluster Administratorzugriff auf das Prometheus-Konto. Niedrigere Berechtigungen sind aus Sicherheitsgründen besser geeignet.

    kubectl create clusterrolebinding my-prometheus-server --clusterrole=cluster-admin --serviceaccount=default:my-prometheus-server
    
  5. Installieren Sie Grafana.

    helm install my-grafana stable/grafana --set service.type=LoadBalancer --set rbac.create=false
    
  6. Rufen Sie das Geheimnis für das Grafana-Portal ab.

    kubectl get secret --namespace default my-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
    

Hinweis

Verwenden Sie unter Windows die folgenden PowerShell-Cmdlets, um das Geheimnis abzurufen:

\$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}")))

Bereitstellen von Apps in AKS mithilfe von ACR

An diesem Punkt ist Ihr Clientcomputer mit dem Cluster verbunden, und Sie können kubectl verwenden, um den Cluster zu konfigurieren und Ihre Anwendungen bereitzustellen. Wenn Sie auch den ACR-Dienst (Azure Container Registry) testen, können Sie die unten folgenden Anweisungen befolgen.

Docker-Registrierungsgeheimnis für den Zugriff auf lokale ACR

Wenn Sie Anwendungsimages aus einer lokalen ACR bereitstellen, müssen Sie ein Geheimnis speichern, damit der Kubernetes-Cluster Zugriff hat, um die Images aus der Registrierung zu pullen. Hierzu müssen Sie eine Dienstprinzipal-ID (SPN) und einen geheimen Schlüssel angeben, den SPN als Mitwirkenden der Quellregistrierung hinzufügen und das Kubernetes-Geheimnis erstellen. Sie müssen zudem Ihre YAML-Datei aktualisieren, um auf das Geheimnis zu verweisen.

Hinzufügen des SPN zur ACR

Fügen Sie den SPN als „Mitwirkender“ zur ACR hinzu.

Hinweis

Dieses Skript wurde von der Azure Container Registry-Website (Bash-Beispiel) geändert, da Azure Stack Hub noch nicht über die ACRPULL-Rolle verfügt. Dieses Beispiel ist ein PowerShell-Skript, das auch in Bash geschrieben werden kann. Achten Sie darauf, dass Sie die Werte für Ihr System hinzufügen.

# 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

Erstellen des Geheimnisses in Kubernetes

Verwenden Sie den folgenden Befehl, um das Geheimnis dem Kubernetes-Cluster hinzuzufügen. Achten Sie darauf, die Werte für Ihr System in den Codeausschnitten hinzuzufügen.

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> 

Beispiel für den Verweis auf das Geheimnis im YAML-Code Ihrer App

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

Nächste Schritte

Verwenden von Azure Kubernetes Service in Azure Stack Hub mit der CLI