Подключение к частному экземпляру AlloyDB из приложения, работающего на GKE Autopilot

1. Обзор

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

e8a5140b09521b7a.png

AlloyDB поддерживает сетевое подключение через частные внутренние IP-адреса, настроенные для доступа к частным сервисам.

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

44662d7a086358de.png

Что такое автопилот 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. Настройка и требования

Настройка облачного проекта

  1. Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

Настройка среды

Активируйте Cloud Shell, нажав на значок справа от строки поиска.

eb0157a992f16fa3.png

Клонируйте репозиторий, перейдите в нужную директорию, скопируйте и вставьте приведенную ниже команду в терминал и нажмите 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

Если появится запрос на авторизацию, нажмите «Авторизовать», чтобы продолжить.

6356559df3eccdda.png

Настройка займет около 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

Ознакомьтесь с доступными функциями (анализ запросов, мониторинг) в консоли .

3b12b0fa1367fb42.png

Обзор кластера автопилота 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

Пример выходных данных:

e8882c44fa0bb631.png

Выполните команду для сохранения учетных данных для кластера:

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 в консоли, чтобы просмотреть подробную информацию о последней сборке.

49fd65309967ae47.png

Установите указанную ниже переменную среды, используя значение частного 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

Пример выходных данных:

179a23bd33793924.png

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 и просмотрите созданные рабочие нагрузки и сервисы.

e1217216e003a839.png

d5c97fb5950c4db.png

Журналы приложений

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

543c5ed97819f540.png

5. Поздравляем!

Поздравляем, вы завершили практическое занятие!

Что мы рассмотрели:

  • Как создать приватный экземпляр базы данных AlloyDB
  • Как развернуть приложение в кластере GKE Autopilot, которое подключается к экземпляру AlloyDB.

Что дальше:

Ознакомьтесь с другими обучающими материалами Cymbal Eats:

Уборка

Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий эти ресурсы, либо сохраните проект и удалите отдельные ресурсы.

Удаление проекта

Самый простой способ избежать выставления счетов — удалить проект, созданный для этого урока.