1. Обзор
В ходе этой лабораторной работы вы развернете двухуровневый микросервис с модулем, работающим на GKE Autopilot, и подключите его к частному экземпляру базы данных AlloyDB. Приложение Customer Service является частью системы Cymbal Eats и предоставляет функциональные возможности для управления зарегистрированными пользователями. Приложение Customer Service — это микросервис на основе Java, использующий платформу Quarkus .
AlloyDB поддерживает сетевое подключение через частные внутренние IP-адреса, настроенные для доступа к частным сервисам.
Доступ к частным сервисам реализуется как пиринговое соединение VPC между вашей сетью VPC и базовой сетью Google Cloud VPC, где находятся ваши ресурсы AlloyDB (кластеры и экземпляры). Частное соединение позволяет ресурсам в вашей сети VPC взаимодействовать с ресурсами AlloyDB, к которым они получают доступ, исключительно с использованием внутренних IP-адресов. Ресурсам в вашей сети VPC не требуется доступ к Интернету или внешние IP-адреса для доступа к ресурсам AlloyDB.
Что такое автопилот GKE?
GKE Autopilot — это режим работы в GKE, в котором Google управляет конфигурацией вашего кластера, включая ваши узлы, масштабирование, безопасность и другие предварительно настроенные параметры. Кластеры автопилота оптимизированы для выполнения большинства производственных рабочих нагрузок и выделения вычислительных ресурсов на основе манифестов Kubernetes. Оптимизированная конфигурация соответствует лучшим практикам и рекомендациям GKE по настройке кластера и рабочей нагрузки, масштабируемости и безопасности. Список встроенных настроек см. в сравнительной таблице «Автопилот» и «Стандарт» .
Что такое AlloyDB?
Полностью управляемая служба баз данных, совместимая с PostgreSQL, для самых требовательных рабочих нагрузок корпоративных баз данных. AlloyDB сочетает в себе лучшее от Google с одним из самых популярных механизмов баз данных с открытым исходным кодом PostgreSQL, обеспечивая превосходную производительность, масштабируемость и доступность.
Что вы узнаете
В этой лабораторной работе вы научитесь делать следующее:
- Создайте частный экземпляр базы данных AlloyDB.
- Разверните приложение в кластере GKE Autopilot, которое подключается к экземпляру AlloyDB.
Предварительные условия
- Эта лабораторная работа предполагает знакомство со средами Cloud Console и Cloud Shell.
- Предыдущий опыт работы с GKE и AlloyDB полезен, но не обязателен.
2. Настройка и требования
Настройка облачного проекта
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы можете обновить его в любое время.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Кроме того, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага, и он останется в силе на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , который используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Чтобы отключить ресурсы и не взимать плату за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить весь проект. Новые пользователи 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
- Реестр артефактов для хранения образов контейнеров для выполнения заданий в облаке и обслуживания клиентов.
- Соединитель VPC Access для выполнения задания в облаке для связи с базой данных AlloyDB.
- Cloud Run Job для создания базы данных AlloyDB
- Кластер GKE Autopilot
./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
Изучите доступные функции (Query Insight, Monitoring) в консоли .
Обзор кластера 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
Пример вывода:
Запустите команду для сохранения учетных данных для кластера:
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 в консоли, чтобы просмотреть подробную информацию о последней сборке.
Установите переменную среды ниже, используя значение частного 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
Пример вывода:
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 и просмотрите созданные рабочие нагрузки и сервисы.
Журналы приложений
Откройте обозреватель журналов и найдите журналы, содержащие текст «Клиент уже существует».
5. Поздравляем!
Поздравляем, вы завершили работу над кодом!
Что мы рассмотрели:
- Как создать частный экземпляр базы данных AlloyDB
- Как развернуть приложение в кластере GKE Autopilot, которое подключается к экземпляру AlloyDB
Что дальше:
Ознакомьтесь с другими лабораториями Cymbal Eats:
- Запуск облачных рабочих процессов с помощью Eventarc
- Запуск обработки событий из облачного хранилища
- Подключение к частному CloudSQL из Cloud Run
- Подключение к полностью управляемым базам данных из Cloud Run
- Безопасное бессерверное приложение с прокси-сервером с функцией идентификации (IAP)
- Запуск заданий Cloud Run с помощью Cloud Scheduler
- Безопасное развертывание в Cloud Run
- Защита входящего трафика Cloud Run
Очистить
Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий ресурсы, либо сохраните проект и удалите отдельные ресурсы.
Удаление проекта
Самый простой способ избавиться от выставления счетов — удалить проект, созданный вами для этого руководства.