Краткое руководство. Развертывание приложения с помощью расширения кластера Dapr для Службы Azure Kubernetes (AKS) или Kubernetes с поддержкой Arc
В этом кратком руководстве вы используете расширение кластера Dapr в кластере Kubernetes с поддержкой Arc или AKS. Вы развертываете hello world
пример, состоящий из приложения Python, которое создает сообщения и приложение узла, которое потребляет и сохраняет сообщения.
Необходимые компоненты
- Подписка Azure. Если у вас еще нет подписки Azure, вы можете создать бесплатную учетную запись.
- Установленные Azure CLI или Azure PowerShell.
- Кластер Kubernetes с поддержкой AKS или Arc с включенным расширением кластера Dapr.
Клонирование репозитория
Клонируйте репозиторий кратких руководств Dapr с помощью
git clone
команды.git clone https://github.com/dapr/quickstarts.git
Перейдите
hello-kubernetes
в каталог с помощьюcd
.cd quickstarts/tutorials/hello-kubernetes/
Создание и настройка хранилища состояний
Dapr может использовать множество различных хранилищ состояний, таких как Redis, Azure Cosmos DB, DynamoDB и Cassandra, для сохранения и извлечения состояния. В этом примере мы используем Redis.
Создание хранилища Redis
Откройте портал Azure, чтобы запустить поток создания Кэш Azure для Redis.
Укажите необходимые сведения.
Выберите "Создать", чтобы запустить развертывание экземпляра Redis.
Запишите имя узла экземпляра Redis, которое можно получить из раздела "Обзор " в Azure. Имя узла может быть похоже на следующий пример:
xxxxxx.redis.cache.windows.net:6380
В разделе Параметры перейдите к ключам доступа, чтобы получить ключи доступа.
Создайте секрет Kubernetes для хранения пароля Redis с помощью
kubectl create secret generic redis
команды.kubectl create secret generic redis --from-literal=redis-password=<your-redis-password>
Настройка компонентов Dapr
После создания хранилища необходимо добавить ключи redis.yaml
в файл в каталог развертывания репозитория Hello World . Дополнительные сведения см. здесь.
Замените
redisHost
значение собственным главным адресом Redis.Замените собственный
redisPassword
секрет.Добавьте следующие две строки ниже
redisPassword
, чтобы включить подключение через TLS- name: redisPassword secretKeyRef: name: redis key: redis-password - name: enableTLS value: true
Применение конфигурации
redis.yaml
Примените файл с помощьюkubectl apply
команды.kubectl apply -f ./deploy/redis.yaml
Убедитесь, что хранилище состояний
kubectl get components.redis
успешно настроено с помощью команды.kubectl get components.redis -o yaml
Вы должны увидеть выходные данные, аналогичные следующему примеру выходных данных:
component.dapr.io/statestore created
Развертывание приложения Node.js с помощью расширения Dapr
Примените развертывание приложения 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.
Доступ к службе с помощью
kubectl get svc
команды.kubectl get svc nodeapp
Запишите выходные
EXTERNAL-IP
данные.
Проверка службы
Вызовите службу с помощью
curl
вашейEXTERNAL-IP
команды.curl $EXTERNAL_IP/ports
Вы должны увидеть выходные данные, аналогичные следующему примеру выходных данных:
{"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
Отправьте заказ в приложение с помощью
curl
.curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
Подтвердите сохранение заказа, запросить его с помощью
curl
.curl $EXTERNAL_IP/order
Вы должны увидеть выходные данные, аналогичные следующему примеру выходных данных:
{ "orderId": "42" }
Развертывание приложения Python с помощью расширения Dapr
Перейдите в каталог приложений Python в кратком руководстве
hello-kubernetes
и откройтеapp.py
.В этом примере используется базовое приложение Python, в котором отправляются сообщения
localhost:3500
JSON. Это порт прослушивания по умолчанию для 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)
Разверните приложение Python в кластере Kubernetes с помощью
kubectl apply
команды.kubectl apply -f ./deploy/python.yaml
Примечание.
Как и в предыдущей команде, необходимо дождаться завершения развертывания, прежде чем перейти к следующим шагам. Для этого выполните следующую команду:
kubectl rollout status deploy/pythonapp
Наблюдение за сообщениями и подтверждение сохраняемости
Теперь, когда развертываются Node.js и приложения Python, вы просматриваете сообщения.
Получите журналы приложения 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
Вызовите конечную точку заказа приложения Node.js, чтобы получить последний заказ с помощью
curl
.curl $EXTERNAL_IP/order {"orderID":"42"}
В ответе должна отобразиться последняя JSON.
Очистка ресурсов
Удалите группу ресурсов, кластер, пространство имен и все связанные ресурсы с помощью команды az group delete .
az group delete --name MyResourceGroup