Развертывание тестовых приложений в Служба Azure Kubernetes в Azure Stack Hub

Это руководство поможет вам приступить к использованию службы Служба Azure Kubernetes (AKS) в Azure Stack Hub. В этой статье описывается развертывание некоторых тестовых приложений в кластере, чтобы вы могли ознакомиться с AKS в Azure Stack Hub. Функции, доступные в Azure Stack Hub, являются подмножеством функций, доступных в глобальной среде Azure.

Прежде чем приступить к работе, убедитесь, что в экземпляре Azure Stack Hub можно создать кластер AKS. Инструкции по настройке и созданию первого кластера см. в статье Использование Служба Azure Kubernetes в Azure Stack Hub с помощью интерфейса командной строки.

Развертывание тестовых приложений

Если метка подключена, следуйте этим инструкциям, чтобы развернуть 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 для получения секрета:

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

Развертывание приложений в AKS с помощью ACR

На этом этапе клиентский компьютер подключен к кластеру, и вы можете использовать kubectl для настройки кластера и развертывания приложений. Если вы также тестируете службу Реестр контейнеров Azure (ACR), следуйте приведенным ниже инструкциям.

Секрет реестра Docker для доступа к локальному ACR

При развертывании образов приложений из локального ACR необходимо сохранить секрет, чтобы у кластера Kubernetes был доступ к извлечению образов из реестра. Для этого необходимо указать идентификатор субъекта-службы (SPN) и секрет, добавить имя субъекта-службы в качестве участник в исходный реестр и создать секрет Kubernetes. Вам также потребуется обновить YAML-файл, чтобы сослаться на секрет.

Добавление имени субъекта-службы в ACR

Добавьте имя субъекта-службы в качестве участник в 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

Дальнейшие действия

Использование Служба Azure Kubernetes в Azure Stack Hub с интерфейсом командной строки