Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL
Примечание.
Для приложений Spring Boot рекомендуется использовать Azure Spring Apps. Однако вы по-прежнему можете использовать Служба Azure Kubernetes в качестве назначения. См. руководство по назначению рабочей нагрузки Java для получения рекомендаций.
В этом руководстве вы настроите и развернете приложение Spring Boot, которое экспонирует интерфейсы REST API для выполнения операций CRUD с данными в Azure Cosmos DB (учетной записи для API NoSQL). Вы упакуете приложение как образ Docker, отправите его в Реестр контейнеров Azure, развернете в Службе Azure Kubernetes и протестируете приложение.
Предварительные требования
- Учетная запись Azure с активной подпиской. Создайте бесплатную учетную запись или воспользуйтесь бесплатной пробной версией Azure Cosmos DB без подписки Azure.
-
Комплект SDK для Java (JDK) версии 8. Укажите для переменной среды
JAVA_HOME
путь, по которому установлен JDK. - Azure CLI для развертывания служб Azure.
- Docker для управления образами и контейнерами.
- Недавняя версия Maven и Git.
- curl для вызова REST API, которые предоставляют приложения.
Предоставление служб Azure
В этом разделе вы создадите службы Azure, необходимые для этого учебника.
- Azure Cosmos DB
- Реестр контейнеров Azure
- Служба Azure Kubernetes
Создайте группу ресурсов Azure, используемых в этом учебнике.
Войдите в свою учетную запись Azure в Azure CLI:
az login
Выберите подписку Azure:
az account set -s <enter subscription ID>
Создать группу ресурсов.
az group create --name=cosmosdb-springboot-aks-rg --location=eastus
Примечание.
Замените
cosmosdb-springboot-aks-rg
уникальным именем для группы ресурсов.
Создание учетной записи базы данных Azure Cosmos DB для NoSQL
Используйте эту команду для создания учетной записи базы данных NoSQL в Azure Cosmos DB с помощью Azure CLI.
az cosmosdb create --name <enter account name> --resource-group <enter resource group name>
Создание закрытого реестра контейнеров Azure с помощью Azure CLI
Примечание.
Замените cosmosdbspringbootregistry
уникальным именем для реестра.
az acr create --resource-group cosmosdb-springboot-aks-rg --location eastus \
--name cosmosdbspringbootregistry --sku Basic
Создание кластера Kubernetes в Azure с помощью Azure CLI
Следующая команда создает кластер Kubernetes в группе ресурсов cosmosdb-springboot-aks-rg с именем кластера cosmosdb-springboot-aks и прикрепленным Реестром контейнеров Azure (ACR)
cosmosdbspringbootregistry
.az aks create \ --resource-group cosmosdb-springboot-aks-rg \ --name cosmosdb-springboot-aks \ --node-count 1 \ --generate-ssh-keys \ --attach-acr cosmosdbspringbootregistry \ --dns-name-prefix=cosmosdb-springboot-aks-app
Выполнение этой команды может занять некоторое время.
Если вы не установили
kubectl
, это можно сделать с помощью Azure CLI.az aks install-cli
Получите учетные данные доступа для кластера Службы Azure Kubernetes.
az aks get-credentials --resource-group=cosmosdb-springboot-aks-rg --name=cosmosdb-springboot-aks kubectl get nodes
Сборка приложения
Клонируйте приложение и перейдите в нужный каталог.
git clone https://github.com/Azure-Samples/cosmosdb-springboot-aks.git cd cosmosdb-springboot-aks
Используйте
Maven
для создания приложения. В конце этого шага в папкеtarget
должен быть создан JAR-файл приложения../mvnw install
Локальный запуск приложения
Если вы собираетесь запустить приложение в Службе Azure Kubernetes, пропустите этот раздел и перейдите к шагу Отправка образа Docker в Реестр контейнеров Azure
Перед запуском приложения обновите файл
application.properties
, указав сведения учетной записи Azure Cosmos DB.azure.cosmos.uri=https://<enter Azure Cosmos DB db account name>.azure.com:443/ azure.cosmos.key=<enter Azure Cosmos DB db primary key> azure.cosmos.database=<enter Azure Cosmos DB db database name> azure.cosmos.populateQueryMetrics=false
Примечание.
База данных и контейнер (с именем
users
) будут созданы автоматически после запуска приложения.Локально запустить приложение.
java -jar target/*.jar
Перейдите к шагу Доступ к приложению или перейдите к следующему разделу, чтобы развернуть приложение в Kubernetes.
Отправка образа Docker в Реестр контейнеров Azure
Создание образа Docker
docker build -t cosmosdbspringbootregistry.azurecr.io/spring-cosmos-app:v1 .
Примечание.
Замените
cosmosdbspringbootregistry
именем Реестра контейнеров AzureВойдите в Реестр контейнеров Azure.
az acr login -n cosmosdbspringbootregistry
Загрузите образ в Реестр контейнеров Azure и перечислите его.
docker push cosmosdbspringbootregistry.azurecr.io/spring-cosmos-app:v1 az acr repository list --name cosmosdbspringbootregistry --output table
Развертывание приложения в Службе Azure Kubernetes
Измените
Secret
вapp.yaml
, указав сведения о настройке Azure Cosmos DB.... apiVersion: v1 kind: Secret metadata: name: app-config type: Opaque stringData: application.properties: | azure.cosmos.uri=https://<enter Azure Cosmos DB db account name>.azure.com:443/ azure.cosmos.key=<enter Azure Cosmos DB db primary key> azure.cosmos.database=<enter Azure Cosmos DB db database name> azure.cosmos.populateQueryMetrics=false ...
Примечание.
База данных и контейнер (
users
) будут созданы автоматически после запуска приложения.Выполните развертывание в Kubernetes и дождитесь перехода
Pod
в состояниеRunning
:kubectl apply -f deploy/app.yaml kubectl get pods -l=app=spring-cosmos-app -w
Примечание.
Вы можете проверить журналы приложений, используя:
kubectl logs -f $(kubectl get pods -l=app=spring-cosmos-app -o=jsonpath='{.items[0].metadata.name}') -c spring-cosmos-app
Доступ к приложению
Если приложение запущено в Kubernetes и вы хотите получить к нему локальный доступ через порт 8080
, запустите приведенную ниже команду:
kubectl port-forward svc/spring-cosmos-app-internal 8080:8080
Вызовите конечные точки REST, чтобы протестировать приложение. Вы также можете перейти в меню Data Explorer
учетной записи Azure Cosmos DB на портале Azure и получить доступ к контейнеру users
для подтверждения результатов операций.
Создание пользователей
curl -i -X POST -H "Content-Type: application/json" -d '{"email":"john.doe@foobar.com", "firstName": "John", "lastName": "Doe", "city": "NYC"}' http://localhost:8080/users curl -i -X POST -H "Content-Type: application/json" -d '{"email":"mr.jim@foobar.com", "firstName": "mr", "lastName": "jim", "city": "Seattle"}' http://localhost:8080/users
В случае успеха вы должны получить HTTP-ответ
201
.Обновление пользователя
curl -i -X POST -H "Content-Type: application/json" -d '{"email":"john.doe@foobar.com", "firstName": "John", "lastName": "Doe", "city": "Dallas"}' http://localhost:8080/users
Список всех пользователей
curl -i http://localhost:8080/users
Получение существующего пользователя
curl -i http://localhost:8080/users/john.doe@foobar.com
Вы должны получить JSON-ответ с данными о пользователе. Например:
{ "email": "john.doe@foobar.com", "firstName": "John", "lastName": "Doe", "city": "Dallas" }
Попробуйте получить пользователя, который не существует
curl -i http://localhost:8080/users/not.there@foobar.com
Вы должны получить HTTP-ответ
404
.Замена пользователя
curl -i -X PUT -H "Content-Type: application/json" -d '{"email":"john.doe@foobar.com", "firstName": "john", "lastName": "doe","city": "New Jersey"}' http://localhost:8080/users/
Попробуйте заменить пользователя, который не существует
curl -i -X PUT -H "Content-Type: application/json" -d '{"email":"not.there@foobar.com", "firstName": "john", "lastName": "doe","city": "New Jersey"}' http://localhost:8080/users/
Вы должны получить HTTP-ответ
404
.Удаление пользователя
curl -i -X DELETE http://localhost:8080/users/mr.jim@foobar.com
Удалите пользователя, который не существует
curl -X DELETE http://localhost:8080/users/go.nuts@foobar.com
Вы должны получить HTTP-ответ
404
.
Доступ к приложению с использованием общедоступного IP-адреса (необязательно)
Создание службы типа LoadBalancer
в службе Azure Kubernetes Service приведет к созданию Azure Load Balancer. После этого вы сможете получить доступ к приложению, используя его общедоступный IP-адрес.
Создание службы Kubernetes типа
LoadBalancer
Примечание.
При этом будет создан Azure Load Balancer с общедоступным IP-адресом.
kubectl apply -f deploy/load-balancer-service.yaml
Дождитесь создания Azure Load Balancer. До этого момента
EXTERNAL-IP
службы Kubernetes останется в состоянии<pending>
.kubectl get service spring-cosmos-app -w NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE spring-cosmos-app LoadBalancer 10.0.68.83 <pending> 8080:31523/TCP 6s
Примечание.
Значение
CLUSTER-IP
может отличаться в вашем случаеПосле завершения создания Azure Load Balancer будет доступен
EXTERNAL-IP
.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE spring-cosmos-app LoadBalancer 10.0.68.83 20.81.108.180 8080:31523/TCP 18s
Примечание.
Значение
EXTERNAL-IP
может отличаться в вашем случаеИспользование общедоступного IP-адреса
Прервите процесс
kubectl watch
и повторите указанные выше командыcurl
с общедоступным IP-адресом и портом8080
. Например, чтобы перечислить всех пользователей:curl -i http://20.81.108.180:8080/users
Примечание.
Замена
20.81.108.180
общедоступным IP-адресом для вашей среды
Ресурсы Kubernetes для приложения
Вот некоторые ключевые моменты, связанные с ресурсами Kubernetes для этого приложения:
Приложение Spring Boot — это приложение Kubernetes, основанное на образе Docker из Реестра контейнеров Azure.
Конфигурация Azure Cosmos DB смонтирована в
application.properties
по пути/config
внутри контейнера.Это возможно с помощью Kubernetes
Volume
, который, в свою очередь, ссылается на Kubernetes Secret, который был создан вместе с приложением. Вы можете выполнить приведенную ниже команду, чтобы подтвердить наличие этого файла в контейнере приложения:kubectl exec -it $(kubectl get pods -l=app=spring-cosmos-app -o=jsonpath='{.items[0].metadata.name}') -c spring-cosmos-app -- cat /config/application.properties
Конфигурация Пробы активности и готовности для приложения относится к конечным точкам HTTP, предоставляемым Spring Boot Actuator, если приложение Spring Boot развертывается в среде Kubernetes -
/actuator/health/liveness
и/actuator/health/readiness
.Можно создать службу ClusterIP для доступа к конечным точкам REST приложения Spring Boot внутри кластера Kubernetes.
Для доступа к приложению с помощью общедоступного IP-адреса можно создать службу LoadBalancer.
Очистка ресурсов
После завершения работы с приложением и учетной записью Azure Cosmos DB можно удалить созданные ресурсы Azure, чтобы избежать дополнительных расходов. Чтобы удалить ресурсы:
На панели поиска портала Azure найдите и выберите Группы ресурсов.
Из списка выберите группу ресурсов, которую вы создали для этого краткого руководства.
На странице обзора группы ресурсов выберите Удалить группу ресурсов.
В следующем окне введите имя группы ресурсов, которую требуется удалить, и щелкните Удалить.
Следующие шаги
В этом руководстве вы узнали, как развернуть приложение Spring Boot для Служба Azure Kubernetes и использовать его для выполнения операций с данными в учетной записи Azure Cosmos DB для NoSQL.