1. Обзор
В этой лабораторной работе вы развернете двухзвенный микросервис с подом, работающим на GKE Autopilot, и подключите его к частному экземпляру базы данных AlloyDB. Приложение «Служба поддержки клиентов» является частью системы Cymbal Eats и предоставляет функциональность для управления зарегистрированными пользователями. Приложение «Служба поддержки клиентов» — это микросервис на Java, использующий фреймворк Quarkus .

AlloyDB поддерживает сетевое подключение через частные внутренние IP-адреса, настроенные для доступа к частным сервисам.
Доступ к частным сервисам реализуется посредством пирингового соединения VPC между вашей сетью VPC и базовой сетью Google Cloud VPC, где расположены ваши ресурсы AlloyDB (кластеры и экземпляры). Частное соединение позволяет ресурсам в вашей сети VPC взаимодействовать с ресурсами AlloyDB, к которым они обращаются, исключительно с использованием внутренних IP-адресов. Ресурсам в вашей сети VPC не требуется доступ в Интернет или внешние IP-адреса для доступа к ресурсам AlloyDB.

Что такое автопилот GKE?
GKE Autopilot — это режим работы в GKE, в котором Google управляет конфигурацией вашего кластера, включая узлы, масштабирование, безопасность и другие предварительно настроенные параметры. Кластеры Autopilot оптимизированы для работы с большинством производственных нагрузок и выделяют вычислительные ресурсы на основе ваших манифестов Kubernetes. Упрощенная конфигурация соответствует передовым методам и рекомендациям GKE по настройке кластера и рабочих нагрузок, масштабируемости и безопасности. Список встроенных параметров см. в сравнительной таблице Autopilot и Standard .
Что такое AlloyDB?
Полностью управляемый сервис баз данных, совместимый с PostgreSQL, для самых требовательных корпоративных задач. AlloyDB сочетает в себе лучшие разработки Google с одним из самых популярных движков баз данных с открытым исходным кодом, PostgreSQL, обеспечивая превосходную производительность, масштабируемость и доступность.
Что вы узнаете
В этой лабораторной работе вы научитесь выполнять следующие действия:
- Создайте частный экземпляр базы данных AlloyDB.
- Разверните приложение в кластере GKE Autopilot, которое подключается к экземпляру AlloyDB.
Предварительные требования
- Для выполнения этой лабораторной работы предполагается знакомство со средами Cloud Console и Cloud Shell.
- Опыт работы с GKE и AlloyDB приветствуется, но не является обязательным.
2. Настройка и требования
Настройка облачного проекта
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы можете изменить её в любое время.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он останется неизменным на протяжении всего проекта. - К вашему сведению, существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
- Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить весь проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Настройка среды
Активируйте Cloud Shell, нажав на значок справа от строки поиска.

Клонируйте репозиторий, перейдите в нужную директорию, скопируйте и вставьте приведенную ниже команду в терминал и нажмите Enter:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
Для развертывания необходимых зависимостей запустите скрипт gke-lab-setup.sh
Будут созданы следующие ресурсы:
- Кластер и экземпляр AlloyDB
- Реестр артефактов для хранения образов контейнеров для заданий Cloud Run и службы поддержки клиентов.
- Коннектор VPC Access для Cloud Run Job, обеспечивающий связь с базой данных AlloyDB.
- Задание Cloud Run для создания базы данных AlloyDB
- Кластер автопилота GKE
./gke-lab-setup.sh
Если появится запрос на авторизацию, нажмите «Авторизовать», чтобы продолжить.

Настройка займет около 10 минут. Ознакомьтесь со скриптом установки, который используется для создания необходимых зависимостей.
gke-lab-setup.sh
Дождитесь завершения выполнения скрипта и появления приведенного ниже результата, прежде чем приступать к следующим шагам.
Job [db-job] has successfully been created. To execute this job, use: gcloud beta run jobs execute db-job OK Creating execution... Done. OK Provisioning resources... Done. Execution [db-job-k94ps] has successfully started running.
3. Развертывание приложения
Обзор кластера AlloyDB
Выполните указанную ниже команду, чтобы просмотреть созданный экземпляр AlloyDB:
gcloud alloydb instances describe customer-instance --cluster=customer-cluster --region=us-central1
Пример выходных данных:
createTime: '2023-01-06T14:40:07.213288293Z' instanceType: PRIMARY ipAddress: 10.77.176.2 machineConfig: cpuCount: 2 name: projects/cymbal-eats-20056-16671/locations/us-central1/clusters/customer-cluster/instances/customer-instance nodes: - zoneId: us-central1-f queryInsightsConfig: queryPlansPerMinute: 5 queryStringLength: 1024 recordApplicationTags: true recordClientAddress: true reconciling: false state: READY uid: df90d57d-88df-49be-a626-6dfec0513e64 updateTime: '2023-01-06T14:49:40.907977843Z' writableNode: zoneId: us-central1-b
Ознакомьтесь с доступными функциями (анализ запросов, мониторинг) в консоли .

Обзор кластера автопилота GKE
Установите переменные среды проекта:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
В рамках первоначальной настройки кластер был создан с помощью приведенной ниже команды (запускать эту команду необязательно):
gcloud container clusters create-auto $CLUSTER_NAME --region $REGION
Выполните команду, чтобы просмотреть созданный кластер GKE Autopilot:
gcloud container clusters list
Пример выходных данных:

Выполните команду для сохранения учетных данных для кластера:
CLUSTER_NAME=rewards-cluster
REGION=us-central1
gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION
Разверните приложение
Далее вам предстоит развернуть приложение для обслуживания клиентов.
Приложение "Служба поддержки клиентов" — это микросервис на Java, использующий фреймворк Quarkus .
Перейдите в папку cymbal-eats/customer-service и выполните команды для сборки и загрузки образа контейнера:
./mvnw clean package -DskipTests
export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0
gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .
Откройте Cloud Build в консоли, чтобы просмотреть подробную информацию о последней сборке.

Установите указанную ниже переменную среды, используя значение частного IP-адреса AlloyDB:
export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
--cluster=customer-cluster \
--region=$REGION \
--format=json | jq \
--raw-output ".ipAddress")
echo $DB_HOST
Выполните приведенные ниже команды, чтобы создать объект секретов Kubernetes для хранения учетных данных базы данных, которые будут использоваться приложением службы поддержки клиентов для подключения к базе данных:
DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123
kubectl create secret generic gke-alloydb-secrets \
--from-literal=database=$DB_NAME \
--from-literal=username=$DB_USER \
--from-literal=password=$DB_PASSWORD \
--from-literal=db_host=$DB_HOST
Выполните команду для замены переменной CUSTOMER_SERVICE_IMAGE в файле deployment.yaml:
sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml
Выполните команду для развертывания приложения:
kubectl apply -f customer-service-deployment.yaml
Для перехода приложения в состояние RUNNING потребуется несколько секунд.
Выполните команду для создания внешнего IP-адреса, который будет использоваться на этапах тестирования:
SERVICE_NAME=customer-service
kubectl expose deployment $SERVICE_NAME \
--type LoadBalancer --port 80 --target-port 8080
Выполните команду для проверки созданных ресурсов:
kubectl get all
Пример выходных данных:

4. Тестовое приложение
Выполните приведенные ниже команды, чтобы сохранить URL-адрес службы поддержки клиентов.
kubectl get svc
Установите указанную ниже переменную среды, используя значение внешнего IP-адреса из предыдущего вывода.
CUSTOMER_SERVICE_URL=$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
Выполните указанные ниже команды, чтобы создать новую запись о клиенте:
curl -X POST $CUSTOMER_SERVICE_URL/customer \
-H 'Content-Type: application/json' \
-d '{"id": "id1","rewardPoints": 3,"address": "1845 Denise St","city": "Mountain View","createDateTime": "2022-11-11T15:56:45.487566","email": "ajensen9090+eats@gmail.com","name": "Angela Jensen","state": "CA","updateDateTime": "2022-11-11T15:56:45.866125","zip": "94043"}'
Выполните указанную выше команду несколько раз, чтобы сгенерировать сообщения журнала, которые вы сможете просмотреть позже в обозревателе журналов.
Проверка клиентских записей
Выполните указанные ниже команды, чтобы просмотреть созданную запись о клиенте.
curl $CUSTOMER_SERVICE_URL/customer | jq
Пример выходных данных:
[
{
"address": "1845 Denise St",
"city": "Mountain View",
"createDateTime": "2023-01-06T16:13:19.118744",
"email": "ajensen9090+eats@gmail.com",
"id": "id1",
"name": "Angela Jensen",
"rewardPoints": 3,
"state": "CA",
"updateDateTime": "2023-01-06T16:13:19.118896",
"zip": "94043"
}
]
Обзор рабочих нагрузок и сервисов GKE
Откройте Kubernetes Engine в Cloud Console и просмотрите созданные рабочие нагрузки и сервисы.


Журналы приложений
Откройте Logs Explorer и найдите записи в логах, содержащие текст "Клиент уже существует".

5. Поздравляем!
Поздравляем, вы завершили практическое занятие!
Что мы рассмотрели:
- Как создать приватный экземпляр базы данных AlloyDB
- Как развернуть приложение в кластере GKE Autopilot, которое подключается к экземпляру AlloyDB.
Что дальше:
Ознакомьтесь с другими обучающими материалами Cymbal Eats:
- Запуск облачных рабочих процессов с помощью Eventarc
- Запуск обработки событий из облачного хранилища.
- Подключение к частному серверу CloudSQL из Cloud Run
- Подключение к полностью управляемым базам данных из Cloud Run
- Защита бессерверного приложения с помощью прокси-сервера с поддержкой идентификации (IAP)
- Запуск заданий Cloud Run с помощью Cloud Scheduler
- Безопасное развертывание в облаке
- Обеспечение безопасности входящего трафика облачных сервисов
Уборка
Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий эти ресурсы, либо сохраните проект и удалите отдельные ресурсы.
Удаление проекта
Самый простой способ избежать выставления счетов — удалить проект, созданный для этого урока.