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

1. Обзор

В ходе этой лабораторной работы вы развернете двухуровневый микросервис с модулем, работающим на GKE Autopilot, и подключите его к частному экземпляру базы данных AlloyDB. Приложение Customer Service является частью системы Cymbal Eats и предоставляет функциональные возможности для управления зарегистрированными пользователями. Приложение Customer Service — это микросервис на основе 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 управляет конфигурацией вашего кластера, включая ваши узлы, масштабирование, безопасность и другие предварительно настроенные параметры. Кластеры автопилота оптимизированы для выполнения большинства производственных рабочих нагрузок и выделения вычислительных ресурсов на основе манифестов Kubernetes. Оптимизированная конфигурация соответствует лучшим практикам и рекомендациям GKE по настройке кластера и рабочей нагрузки, масштабируемости и безопасности. Список встроенных настроек см. в сравнительной таблице «Автопилот» и «Стандарт» .

Что такое AlloyDB?

Полностью управляемая служба баз данных, совместимая с PostgreSQL, для самых требовательных рабочих нагрузок корпоративных баз данных. AlloyDB сочетает в себе лучшее от Google с одним из самых популярных механизмов баз данных с открытым исходным кодом PostgreSQL, обеспечивая превосходную производительность, масштабируемость и доступность.

Что вы узнаете

В этой лабораторной работе вы научитесь делать следующее:

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

Предварительные условия

  • Эта лабораторная работа предполагает знакомство со средами Cloud Console и Cloud Shell.
  • Предыдущий опыт работы с GKE и AlloyDB полезен, но не обязателен.

2. Настройка и требования

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы можете обновить его в любое время.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно он обозначается как PROJECT_ID ). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Кроме того, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага, и он останется в силе на протяжении всего проекта.
  • К вашему сведению, есть третье значение — номер проекта , который используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
  1. Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Чтобы отключить ресурсы и не взимать плату за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить весь проект. Новые пользователи 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
  • Реестр артефактов для хранения образов контейнеров для выполнения заданий в облаке и обслуживания клиентов.
  • Соединитель VPC Access для выполнения задания в облаке для связи с базой данных AlloyDB.
  • Cloud Run Job для создания базы данных AlloyDB
  • Кластер GKE Autopilot
./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

Изучите доступные функции (Query Insight, Monitoring) в консоли .

3b12b0fa1367fb42.png

Обзор кластера GKE Autopilot

Установите переменные среды проекта:

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

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

Далее вы развернете приложение службы поддержки клиентов.

Приложение Customer Service — это микросервис на основе 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

Приложению потребуется несколько минут, чтобы перейти в состояние РАБОТАЕТ.

Запустите команду для создания внешнего 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

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

Откройте обозреватель журналов и найдите журналы, содержащие текст «Клиент уже существует».

543c5ed97819f540.png

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

Поздравляем, вы завершили работу над кодом!

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

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

Что дальше:

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

Очистить

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

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

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