Краткое руководство. Развертывание приложения с помощью расширения кластера Dapr для Службы Azure Kubernetes (AKS) или Kubernetes с поддержкой Arc

В этом кратком руководстве вы используете расширение кластера Dapr в кластере Kubernetes с поддержкой Arc или AKS. Вы развертываете hello world пример, состоящий из приложения Python, которое создает сообщения и приложение узла, которое потребляет и сохраняет сообщения.

Необходимые компоненты

Клонирование репозитория

  1. Клонируйте репозиторий кратких руководств Dapr с помощью git clone команды.

    git clone https://github.com/dapr/quickstarts.git
    
  2. Перейдите hello-kubernetes в каталог с помощью cd.

    cd quickstarts/tutorials/hello-kubernetes/
    

Создание и настройка хранилища состояний

Dapr может использовать множество различных хранилищ состояний, таких как Redis, Azure Cosmos DB, DynamoDB и Cassandra, для сохранения и извлечения состояния. В этом примере мы используем Redis.

Создание хранилища Redis

  1. Откройте портал Azure, чтобы запустить поток создания Кэш Azure для Redis.

  2. Укажите необходимые сведения.

  3. Выберите "Создать", чтобы запустить развертывание экземпляра Redis.

  4. Запишите имя узла экземпляра Redis, которое можно получить из раздела "Обзор " в Azure. Имя узла может быть похоже на следующий пример: xxxxxx.redis.cache.windows.net:6380

  5. В разделе Параметры перейдите к ключам доступа, чтобы получить ключи доступа.

  6. Создайте секрет Kubernetes для хранения пароля Redis с помощью kubectl create secret generic redis команды.

    kubectl create secret generic redis --from-literal=redis-password=<your-redis-password>
    

Настройка компонентов Dapr

После создания хранилища необходимо добавить ключи redis.yaml в файл в каталог развертывания репозитория Hello World . Дополнительные сведения см. здесь.

  1. Замените redisHost значение собственным главным адресом Redis.

  2. Замените собственный redisPassword секрет.

  3. Добавьте следующие две строки ниже redisPassword , чтобы включить подключение через TLS

    - name: redisPassword
        secretKeyRef:
          name: redis
          key: redis-password
    - name: enableTLS
      value: true
    

Применение конфигурации

  1. redis.yaml Примените файл с помощью kubectl apply команды.

    kubectl apply -f ./deploy/redis.yaml
    
  2. Убедитесь, что хранилище состояний kubectl get components.redis успешно настроено с помощью команды.

    kubectl get components.redis -o yaml
    

    Вы должны увидеть выходные данные, аналогичные следующему примеру выходных данных:

    component.dapr.io/statestore created
    

Развертывание приложения Node.js с помощью расширения Dapr

  1. Примените развертывание приложения Node.js к кластеру kubectl apply с помощью команды.

    kubectl apply -f ./deploy/node.yaml
    

    Примечание.

    Развертывания Kubernetes являются асинхронными, что означает, что необходимо дождаться завершения развертывания, прежде чем перейти к следующим шагам. Для этого выполните следующую команду:

    kubectl rollout status deploy/nodeapp
    

    При этом приложение Node.js развертывается в Kubernetes. Плоскость управления Dapr автоматически внедряет боковую панель Dapr в Pod. Если вы посмотрите на node.yaml файл, вы увидите, как dapr включен для этого развертывания:

    • dapr.io/enabled: true: сообщает плоскости управления Dapr внедрить боковую панель в это развертывание.
    • dapr.io/app-id: nodeapp: присваивает уникальный идентификатор или имя приложению Dapr, поэтому его можно отправлять и обмениваться сообщениями с другими приложениями Dapr.
  2. Доступ к службе с помощью kubectl get svc команды.

    kubectl get svc nodeapp
    
  3. Запишите выходные EXTERNAL-IP данные.

Проверка службы

  1. Вызовите службу с помощью curl вашей EXTERNAL-IPкоманды.

    curl $EXTERNAL_IP/ports
    

    Вы должны увидеть выходные данные, аналогичные следующему примеру выходных данных:

    {"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
    
  2. Отправьте заказ в приложение с помощью curl.

    curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
    
  3. Подтвердите сохранение заказа, запросить его с помощью curl.

    curl $EXTERNAL_IP/order
    

    Вы должны увидеть выходные данные, аналогичные следующему примеру выходных данных:

    { "orderId": "42" }
    

Развертывание приложения Python с помощью расширения Dapr

  1. Перейдите в каталог приложений Python в кратком руководстве hello-kubernetes и откройте app.py.

    В этом примере используется базовое приложение Python, в котором отправляются сообщения localhost:3500JSON. Это порт прослушивания по умолчанию для Dapr. Вы можете вызвать конечную точку neworder приложения Node.js, сделав публикацию в v1.0/invoke/nodeapp/method/neworder. Сообщение содержит некоторые данные с orderId с шагом приращения один раз в секунду:

    n = 0
    while True:
        n += 1
        message = {"data": {"orderId": n}}
    
        try:
            response = requests.post(dapr_url, json=message)
        except Exception as e:
            print(e)
    
        time.sleep(1)
    
  2. Разверните приложение Python в кластере Kubernetes с помощью kubectl apply команды.

    kubectl apply -f ./deploy/python.yaml
    

    Примечание.

    Как и в предыдущей команде, необходимо дождаться завершения развертывания, прежде чем перейти к следующим шагам. Для этого выполните следующую команду:

    kubectl rollout status deploy/pythonapp
    

Наблюдение за сообщениями и подтверждение сохраняемости

Теперь, когда развертываются Node.js и приложения Python, вы просматриваете сообщения.

  1. Получите журналы приложения Node.js с помощью kubectl logs команды.

    kubectl logs --selector=app=node -c node --tail=-1
    

    Если развертывания были успешными, вы увидите журналы, такие как следующие примеры журналов:

    Got a new order! Order ID: 1
    Successfully persisted state
    Got a new order! Order ID: 2
    Successfully persisted state
    Got a new order! Order ID: 3
    Successfully persisted state
    
  2. Вызовите конечную точку заказа приложения Node.js, чтобы получить последний заказ с помощью curl.

    curl $EXTERNAL_IP/order
    {"orderID":"42"}
    

    В ответе должна отобразиться последняя JSON.

Очистка ресурсов

  • Удалите группу ресурсов, кластер, пространство имен и все связанные ресурсы с помощью команды az group delete .

    az group delete --name MyResourceGroup
    

Следующие шаги