Развертывание приложения Java с помощью Quarkus в кластере Служба Azure Kubernetes

В этой статье показано, как быстро развернуть Red Hat Quarkus на Служба Azure Kubernetes (AKS) с простым приложением CRUD. Приложение — это список действий с интерфейсом JavaScript и конечной точкой REST. База данных Azure для PostgreSQL предоставляет уровень сохраняемости для приложения. В статье показано, как протестировать приложение локально и развернуть его в AKS.

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

  • Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
  • Azure Cloud Shell имеет все эти предварительные требования. Дополнительные сведения см . в кратком руководстве по Azure Cloud Shell.
  • Если вы выполняете команды в этом руководстве локально (вместо использования Azure Cloud Shell), выполните следующие действия:
    • Подготовьте локальный компьютер с установленной операционной системой Unix (например, Ubuntu, macOS или подсистема Windows для Linux).
    • Установите реализацию Java SE (например, сборка Microsoft OpenJDK).
    • Установите Maven 3.5.0 или более поздней версии.
    • Установите Docker или Podman для операционной системы.
    • Установите jq.
    • Установите cURL.
    • Установите cli Quarkus.
  • Azure CLI для сред, таких как Unix. В этой статье требуется только вариант Azure CLI Bash.
    • Разработчик должен установить Azure CLI и войти в интерактивном режиме с помощью команды az login , чтобы войти в Azure, прежде чем использовать DefaultAzureCredential в коде.
      az login
      
    • Для этой статьи требуется Azure CLI версии не ниже 2.31.0. Если вы используете Azure Cloud Shell, последняя версия уже установлена.

Создание проекта приложения

Используйте следующую команду, чтобы клонировать пример проекта Java для этой статьи. Пример размещен на сайте GitHub.

git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-07-17
cd aks-quarkus

Если появится сообщение об отключенном состоянии HEAD , это сообщение безопасно игнорировать. Так как в этой статье нет фиксаций, отсоединяемое состояние HEAD подходит.

Тестирование приложения Quarkus локально

В этом разделе показано, как локально запустить приложение.

Quarkus поддерживает автоматическую подготовку ненастроенных служб в режиме разработки и тестирования. Quarkus ссылается на эту возможность как службы разработки. Предположим, вы включаете функцию Quarkus, например подключение к службе базы данных. Вы хотите протестировать приложение, но еще не полностью настроили подключение к реальной базе данных. Quarkus автоматически запускает версию заглушки соответствующей службы и подключает приложение к нему. Дополнительные сведения см. в разделе "Общие сведения о службах разработки" в документации по Quarkus.

Убедитесь, что среда контейнера Docker или Podman выполняется и использует следующую команду, чтобы ввести режим разработки Quarkus:

quarkus dev

Вместо этого quarkus devможно выполнить то же самое с Помощью Maven mvn quarkus:dev.

Вам может быть предложено отправить данные телеметрии использования режима разработки Quarkus. Если да, ответьте, как вам нравится.

Режим разработки Quarkus обеспечивает динамическую перезагрузку с фоновой компиляцией. Если изменить любой аспект исходного кода приложения и обновить браузер, вы увидите изменения. Если возникают проблемы с компиляцией или развертыванием, вы ознакаете сообщение об ошибке. Режим разработки Quarkus прослушивает отладчик через порт 5005. Если вы хотите дождаться подключения отладчика перед выполнением, перед -Dsuspend выполнением Если отладчик вообще не нужен, можно использовать -Ddebug=false.

Выходные данные должны выглядеть следующим образом:

__  ____  __  _____   ___  __ ____  ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
INFO  [io.quarkus] (Quarkus Main Thread) quarkus-todo-demo-app-aks 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.2.0.Final) started in 3.377s. Listening on: http://localhost:8080

INFO  [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [agroal, cdi, hibernate-orm, hibernate-orm-panache, hibernate-validator, jdbc-postgresql, narayana-jta, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, vertx]

--
Tests paused
Press [e] to edit command line args (currently ''), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>

Нажмите клавишу W в терминале, где выполняется режим разработки Quarkus. Ключ w открывает веб-браузер по умолчанию для отображения Todo приложения. Вы также можете получить доступ к графическому интерфейсу http://localhost:8080 приложения напрямую.

Снимок экрана: пример приложения Todo.

Попробуйте выбрать несколько элементов todo в списке дел. Пользовательский интерфейс указывает выделение с помощью стиля текста с зачеркнутыми элементами. Вы также можете добавить новый элемент todo в список дел, введя "Проверить приложения Todo" и нажав клавишу ВВОД, как показано на следующем снимке экрана:

Снимок экрана: пример приложения Todo с добавленными новыми элементами.

Доступ к API RESTful (/api) для получения всех элементов todo, которые хранятся в локальной базе данных PostgreSQL:

curl --verbose http://localhost:8080/api | jq .

Выходные данные должны выглядеть следующим образом:

* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /api HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-length: 664
< Content-Type: application/json;charset=UTF-8
<
{ [664 bytes data]
100   664  100   664    0     0  13278      0 --:--:-- --:--:-- --:--:-- 15441
* Connection #0 to host localhost left intact
[
  {
    "id": 1,
    "title": "Introduction to Quarkus Todo App",
    "completed": false,
    "order": 0,
    "url": null
  },
  {
    "id": 2,
    "title": "Quarkus on Azure App Service",
    "completed": false,
    "order": 1,
    "url": "https://learn.microsoft.com/en-us/azure/developer/java/eclipse-microprofile/deploy-microprofile-quarkus-java-app-with-maven-plugin"
  },
  {
    "id": 3,
    "title": "Quarkus on Azure Container Apps",
    "completed": false,
    "order": 2,
    "url": "https://learn.microsoft.com/en-us/training/modules/deploy-java-quarkus-azure-container-app-postgres/"
  },
  {
    "id": 4,
    "title": "Quarkus on Azure Functions",
    "completed": false,
    "order": 3,
    "url": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-quarkus"
  },
  {
    "id": 5,
    "title": "Verify Todo apps",
    "completed": false,
    "order": 5,
    "url": null
  }
]

Нажмите q, чтобы выйти из режима разработки Quarkus.

Создание ресурсов Azure для запуска приложения Quarkus

В этом разделе показано, как создать следующие ресурсы Azure для запуска примера приложения Quarkus:

  • База данных Azure для PostgreSQL
  • Реестр контейнеров Azure (ACR)
  • Служба Azure Kubernetes (AKS)

Некоторые из этих ресурсов должны иметь уникальные имена в область подписки Azure. Чтобы обеспечить эту уникальность, можно использовать инициалы, последовательность, дату, суффикс шаблон. Чтобы применить этот шаблон, присвойте ресурсам имя, перечислив свои инициалы, некоторые порядковые номера, текущую дату и определенный суффикс ресурса, например rg для группы ресурсов. Используйте следующие команды, чтобы определить некоторые переменные среды для последующего использования:

export UNIQUE_VALUE=<your unique value, such as ejb010717>
export RESOURCE_GROUP_NAME=${UNIQUE_VALUE}rg
export LOCATION=<your desired Azure region for deploying your resources. For example, eastus>
export REGISTRY_NAME=${UNIQUE_VALUE}reg
export DB_SERVER_NAME=${UNIQUE_VALUE}db
export CLUSTER_NAME=${UNIQUE_VALUE}aks
export AKS_NS=${UNIQUE_VALUE}ns

Создание базы данных Azure для PostgreSQL

База данных Azure для PostgreSQL — это управляемая служба для запуска, управления и масштабирования высокодоступных баз данных PostgreSQL в облаке Azure. В этом разделе описано, как создать один сервер База данных Azure для PostgreSQL и подключиться к нему. Однако при выполнении действий в кратком руководстве необходимо использовать параметры в следующей таблице для настройки развертывания базы данных для примера приложения Quarkus. Замените переменные среды фактическими значениями при заполнении полей в портал Azure.

Параметр значение Описание
Группа ресурсов ${RESOURCE_GROUP_NAME} Выберите Создать. Развертывание создает эту новую группу ресурсов.
Имя сервера ${DB_SERVER_NAME} Это значение является частью имени узла для сервера базы данных.
Расположение ${LOCATION} Выберите расположение из раскрывающегося списка. Запишите расположение. Это же расположение необходимо использовать для других создаваемых ресурсов Azure.
Имя администратора quarkus В примере кода предполагается, что это значение.
Пароль Secret123456 В примере кода предполагается, что это значение.

Учитывая эти подстановки значений, выполните действия, описанные в кратком руководстве. Создайте сервер База данных Azure для PostgreSQL с помощью портал Azure до раздела "Настройка правила брандмауэра". Затем в разделе "Настройка правила брандмауэра" обязательно выберите "Да для разрешения доступа к службам Azure", а затем нажмите кнопку "Сохранить". Если вы игнорируете это, приложение Quarkus не может получить доступ к базе данных и просто не удается запустить.

Выполнив действия, описанные в кратком руководстве, в разделе "Настройка правила брандмауэра", включая шаг, позволяющий получить доступ к службам Azure, вернитесь к этой статье.

Создание базы данных Todo в PostgreSQL

Созданный вами ранее сервер PostgreSQL пуст. У него нет базы данных, которую можно использовать с приложением Quarkus. Создайте базу данных с именем todo, выполнив следующую команду:

az postgres db create \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name todo \
    --server-name ${DB_SERVER_NAME}

Необходимо использовать todo в качестве имени базы данных, так как пример кода предполагает, что имя базы данных.

Если команда выполнена успешно, выходные данные выглядят примерно так:

{
  "charset": "UTF8",
  "collation": "English_United States.1252",
  "id": "/subscriptions/REDACTED/resourceGroups/ejb010718rg/providers/Microsoft.DBforPostgreSQL/servers/ejb010718db/databases/todo",
  "name": "todo",
  "resourceGroup": "ejb010718rg",
  "type": "Microsoft.DBforPostgreSQL/servers/databases"
}

Создание экземпляра Microsoft Реестр контейнеров Azure

Так как Quarkus — это облачная технология, она имеет встроенную поддержку создания контейнеров, работающих в Kubernetes. Kubernetes полностью зависит от наличия реестра контейнеров, из которого он находит образы контейнеров для запуска. AKS имеет встроенную поддержку Реестр контейнеров Azure (ACR).

Создайте экземпляр ACR с помощью команды az acr create. В следующем примере создается экземпляр ACR с именем значения переменной ${REGISTRY_NAME}среды:

az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --location ${LOCATION} \
    --name $REGISTRY_NAME \
    --sku Basic \
    --admin-enabled

Через некоторое время вы увидите выходные данные JSON, содержащие следующие строки:

  "provisioningState": "Succeeded",
  "publicNetworkAccess": "Enabled",
  "resourceGroup": "<YOUR_RESOURCE_GROUP>",

Подключение docker в экземпляр ACR

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

export LOGIN_SERVER=$(az acr show \
    --name $REGISTRY_NAME \
    --query 'loginServer' \
    --output tsv)
echo $LOGIN_SERVER
export USER_NAME=$(az acr credential show \
    --name $REGISTRY_NAME \
    --query 'username' \
    --output tsv)
echo $USER_NAME
export PASSWORD=$(az acr credential show \
    --name $REGISTRY_NAME \
    --query 'passwords[0].value' \
    --output tsv)
echo $PASSWORD
docker login $LOGIN_SERVER -u $USER_NAME -p $PASSWORD

Если вы используете Podman вместо Docker, внесите необходимые изменения в команду.

Если вы успешно вошли в экземпляр ACR, вы увидите Login Succeeded в конце выходных данных команды.

Создание кластера AKS

Используйте команду az aks create, чтобы создать кластер AKS. В следующем примере создается кластер с именем со значением переменной ${CLUSTER_NAME} среды с одним узлом. Кластер подключен к экземпляру ACR, созданному на предыдущем шаге. Выполнение этой команды занимает несколько минут.

az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --location ${LOCATION} \
    --name $CLUSTER_NAME \
    --attach-acr $REGISTRY_NAME \
    --node-count 1 \
    --generate-ssh-keys \
    --enable-managed-identity

Через несколько минут команда завершает работу и возвращает данные в формате JSON в кластере, включая следующие выходные данные:

  "nodeResourceGroup": "MC_<your resource_group_name>_<your cluster name>_<your region>",
  "privateFqdn": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "<your resource group name>",

Подключение к кластеру AKS

Для управления кластером Kubernetes используйте kubectl (клиент командной строки Kubernetes). Если вы используете Azure Cloud Shell, kubectl уже установлен. Чтобы установить kubectl локально, используйте команду az aks install-cli , как показано в следующем примере:

az aks install-cli

Дополнительные сведения о kubectlсредстве командной строки (kubectl) см. в документации kubernetes.

Чтобы настроить kubectl подключение к кластеру Kubernetes, используйте команду az aks get-credentials , как показано в следующем примере. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.

az aks get-credentials \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --overwrite-existing \
    --admin

Успешные выходные данные включают текст, аналогичный следующему примеру:

Merged "ejb010718aks-admin" as current context in /Users/edburns/.kube/config

Вы можете найти его полезным для псевдонима kkubectl. В этом случае используйте следующую команду:

alias k=kubectl

Чтобы проверить подключение к кластеру, используйте kubectl get команду для возврата списка узлов кластера, как показано в следующем примере:

kubectl get nodes

В следующем примере показан единый узел, созданный на предыдущих шагах. Убедитесь, что узел находится в состоянии Ready (Готово):

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy   Ready    agent   76s     v1.23.8

Создание пространства имен в AKS

Используйте следующую команду, чтобы создать новое пространство имен в службе Kubernetes для приложения Quarkus:

kubectl create namespace ${AKS_NS}

Выходные данные должны выглядеть следующим образом:

namespace/<your namespace> created

Настройка собственной конфигурации облака

В качестве облачной технологии Quarkus предлагает возможность автоматически настраивать ресурсы для стандартных Kubernetes, Red Hat OpenShift и Knative. Дополнительные сведения см. в руководстве Quarkus Kubernetes, руководстве Quarkus OpenShift и руководстве quarkus Knative. Разработчики могут развернуть приложение в целевом кластере Kubernetes, применяя созданные манифесты.

Чтобы создать соответствующие ресурсы Kubernetes, используйте следующую команду, чтобы добавить quarkus-kubernetes и container-image-jib расширения в локальный терминал:

quarkus ext add kubernetes container-image-jib

Quarkus изменяет POM, чтобы убедиться, что эти расширения перечислены как <dependencies>. Если будет предложено установить что-то вызываемое JBang, ответьте да и разрешите его установке.

Выходные данные должны выглядеть следующим образом:

[SUCCESS] ✅  Extension io.quarkus:quarkus-kubernetes has been installed
[SUCCESS] ✅  Extension io.quarkus:quarkus-container-image-jib has been installed

Чтобы проверить добавление расширений, можно запустить git diff и проверить выходные данные.

Как облачная технология Quarkus поддерживает понятие профилей конфигурации. Quarkus имеет следующие три встроенных профиля:

  • dev — активируется в режиме разработки
  • test — активируется при выполнении тестов
  • prod — Профиль по умолчанию, если он не запущен в режиме разработки или тестирования

Quarkus поддерживает любое количество именованных профилей по мере необходимости.

Остальные действия, описанные в этом разделе, позволяют раскомментировать и настроить значения в файле src/main/resources/application.properties . Убедитесь, что все строки, начинающиеся с # %prod. , раскомментированы путем удаления ведущего #.

Префикс prod. указывает, что эти свойства активны при выполнении prod в профиле. Дополнительные сведения о профилях конфигурации см. в документации Quarkus.

Конфигурация базы данных

Добавьте следующие переменные конфигурации базы данных. Замените значения фактическими <DB_SERVER_NAME_VALUE> значениями переменной ${DB_SERVER_NAME} среды.

# Database configurations
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://<DB_SERVER_NAME_VALUE>.postgres.database.azure.com:5432/todo
%prod.quarkus.datasource.jdbc.driver=org.postgresql.Driver
%prod.quarkus.datasource.username=quarkus@<DB_SERVER_NAME_VALUE>
%prod.quarkus.datasource.password=Secret123456
%prod.quarkus.hibernate-orm.database.generation=drop-and-create

Конфигурация Kubernetes

Добавьте следующие переменные конфигурации Kubernetes. service-type Обязательно установите для load-balancer доступа к приложению внешний доступ.

# AKS configurations
%prod.quarkus.kubernetes.deployment-target=kubernetes
%prod.quarkus.kubernetes.service-type=load-balancer

Конфигурация образа контейнера

В качестве облачной технологии Quarkus поддерживает создание образов контейнеров OCI, совместимых с Docker и Podman. Добавьте следующие переменные образа контейнера. Замените значения <LOGIN_SERVER_VALUE><USER_NAME_VALUE> и ${USER_NAME} значения фактических значений ${LOGIN_SERVER} переменных среды соответственно.

# Container Image Build
%prod.quarkus.container-image.build=true
%prod.quarkus.container-image.registry=<LOGIN_SERVER_VALUE>
%prod.quarkus.container-image.group=<USER_NAME_VALUE>
%prod.quarkus.container-image.name=todo-quarkus-aks
%prod.quarkus.container-image.tag=1.0

Создание образа контейнера и отправка его в ACR

Теперь используйте следующую команду для создания самого приложения. Эта команда использует расширения Kubernetes и Jib для создания образа контейнера.

quarkus build --no-tests

Выходные данные должны заканчиваться BUILD SUCCESS. Файлы манифеста Kubernetes создаются в target/kubernetes, как показано в следующем примере:

tree target/kubernetes
target/kubernetes
├── kubernetes.json
└── kubernetes.yml

0 directories, 2 files

Вы можете проверить, создается ли образ контейнера, а также с помощью dockerpodman командной строки (CLI). Выходные данные выглядят примерно так:

docker images | grep todo
<LOGIN_SERVER_VALUE>/<USER_NAME_VALUE>/todo-quarkus-aks   1.0       b13c389896b7   18 minutes ago   420MB

Отправьте образы контейнеров в ACR с помощью следующей команды:

export TODO_QUARKUS_TAG=$(docker images | grep todo-quarkus-aks | head -n1 | cut -d " " -f1)
echo ${TODO_QUARKUS_TAG}
docker push ${TODO_QUARKUS_TAG}:1.0

Результат должен выглядеть следующим образом:

The push refers to repository [<LOGIN_SERVER_VALUE>/<USER_NAME_VALUE>/todo-quarkus-aks]
dfd615499b3a: Pushed
56f5cf1aa271: Pushed
4218d39b228e: Pushed
b0538737ed64: Pushed
d13845d85ee5: Pushed
60609ec85f86: Pushed
1.0: digest: sha256:0ffd70d6d5bb3a4621c030df0d22cf1aa13990ca1880664d08967bd5bab1f2b6 size: 1995

После отправки приложения в ACR можно сообщить AKS запустить приложение.

Развертывание приложения Quarkus в AKS

В этом разделе показано, как запустить пример приложения Quarkus в созданных ресурсах Azure.

Использование kubectl для развертывания приложения Quarkus в AKS

Разверните ресурсы Kubernetes с помощью kubectl командной строки, как показано в следующем примере:

kubectl apply -f target/kubernetes/kubernetes.yml -n ${AKS_NS}

Выходные данные должны выглядеть следующим образом:

deployment.apps/quarkus-todo-demo-app-aks created

Убедитесь, что приложение запущено с помощью следующей команды:

kubectl -n $AKS_NS get pods

Если значение STATUS поля отображает что-либо другое Running, устраните и устраните проблему, прежде чем продолжить. Это может помочь изучить журналы pod с помощью следующей команды:

kubectl -n $AKS_NS logs $(kubectl -n $AKS_NS get pods | grep quarkus-todo-demo-app-aks | cut -d " " -f1)

EXTERNAL-IP Получите доступ к приложению Todo с помощью следующей команды:

kubectl get svc -n ${AKS_NS}

Выходные данные должны выглядеть следующим образом:

NAME                        TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
quarkus-todo-demo-app-aks   LoadBalancer   10.0.236.101   20.12.126.200   80:30963/TCP   37s

Для сохранения значения переменной среды в качестве полного EXTERNAL-IP URL-адреса можно использовать следующую команду:

export QUARKUS_URL=http://$(kubectl get svc -n ${AKS_NS} | grep quarkus-todo-demo-app-aks | cut -d " " -f10)
echo $QUARKUS_URL

Откройте новый веб-браузер со значением ${QUARKUS_URL}. Затем добавьте новый элемент todo с текстом Deployed the Todo app to AKS. Кроме того, выберите Introduction to Quarkus Todo App элемент как завершенный.

Снимок экрана: пример приложения Todo, запущенного в AKS.

Доступ к API RESTful (/api) для получения всех элементов todo, хранящихся в базе данных Azure PostgreSQL, как показано в следующем примере:

curl --verbose ${QUARKUS_URL}/api | jq .

Выходные данные должны выглядеть следующим образом:

* Connected to 20.237.68.225 (20.237.68.225) port 80 (#0)
> GET /api HTTP/1.1
> Host: 20.237.68.225
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-length: 828
< Content-Type: application/json;charset=UTF-8
<
[
  {
    "id": 2,
    "title": "Quarkus on Azure App Service",
    "completed": false,
    "order": 1,
    "url": "https://learn.microsoft.com/en-us/azure/developer/java/eclipse-microprofile/deploy-microprofile-quarkus-java-app-with-maven-plugin"
  },
  {
    "id": 3,
    "title": "Quarkus on Azure Container Apps",
    "completed": false,
    "order": 2,
    "url": "https://learn.microsoft.com/en-us/training/modules/deploy-java-quarkus-azure-container-app-postgres/"
  },
  {
    "id": 4,
    "title": "Quarkus on Azure Functions",
    "completed": false,
    "order": 3,
    "url": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-quarkus"
  },
  {
    "id": 5,
    "title": "Deployed the Todo app to AKS",
    "completed": false,
    "order": 5,
    "url": null
  },
  {
    "id": 1,
    "title": "Introduction to Quarkus Todo App",
    "completed": true,
    "order": 0,
    "url": null
  }
]

Проверка обновления базы данных с помощью Azure Cloud Shell

Откройте Azure Cloud Shell в портал Azure, выбрав значок Cloud Shell, как показано на следующем снимке экрана:

Снимок экрана: портал Azure с выделенной кнопкой Cloud Shell.

Выполните следующую команду локально и вставьте результат в Azure Cloud Shell:

echo psql --host=${DB_SERVER_NAME}.postgres.database.azure.com --port=5432 --username=quarkus@${DB_SERVER_NAME} --dbname=todo

При запросе пароля используйте значение, которое вы использовали при создании базы данных.

Используйте следующий запрос, чтобы получить все элементы todo:

select * from todo;

Выходные данные должны выглядеть примерно так, как в следующем примере, и должны содержать те же элементы в графическом интерфейсе приложения Todo, показанном ранее:

Снимок экрана: выходные данные запроса в виде таблицы ASCII.

Если вы видите MORE в выходных данных, введите q , чтобы выйти из пейджера.

Введите \q , чтобы выйти из psql программы и вернуться в Cloud Shell.

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

Чтобы избежать расходов за использование Azure, необходимо удалить ненужные ресурсы. Чтобы удалить ненужные кластер, группу ресурсов, службу контейнеров, реестр контейнеров и все связанные с ними ресурсы, выполните команду az group delete.

git reset --hard
docker rmi ${TODO_QUARKUS_TAG}:1.0
docker rmi postgres
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

Вы также можете использовать для docker rmi удаления образов postgres контейнеров и testcontainers создания в режиме разработки Quarkus.

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