Рубрики
Без рубрики

Облачная платформа Google: Развертывание простого приложения Java Spring boot

Эй, dev.io ! В этой статье я покажу вам пример того, как развернуть простое java-приложение в… С тегами java, google cloud, springboot, tutorial.

Эй, dev.io !

В этой статье я покажу вам пример того, как развернуть простое java-приложение в Google Cloud Platform (GCP).

Что именно мы будем делать:

  • Создайте простое java-приложение с помощью Spring Boot
  • Создайте образ docker для приложения
  • Развертывание приложения на облачной платформе Google
  • Создайте конвейер с помощью Google Cloud Build для создания CI/CD
  • Подключите наше приложение к базе данных с помощью Google Cloud Sql + Google Cloud SQL Auth Proxy и добавьте liquibase для управления изменениями базы данных.
  • Используйте k8s secrets и Google Cloud Secret Manager

Обзор

Цель статьи – показать, как работать с DHCP, поэтому мы создадим простое java-приложение с одной сущностью Post и парой точек входа, которое позволит выполнять только операции CRUD.

Мы разработаем поток CI/CD, как показано на диаграмме ниже:

Предпосылки

Нам нужно создать учетную запись Google cloud.

За это:

  1. Создать временную учетную запись электронной почты
  2. Перейдите к https://cloud.google.com/ и нажмите кнопку Начать бесплатно
  3. Заполните свою кредитную карту и личные данные
  4. Начните мою бесплатную пробную версию

Приложение

Клонируйте приложение с github. Проект уже содержит Dockerfile, облачную сборку.yaml и развертывание.файл yaml. Требуется только обновить номер проекта gcp [your_project_id].

git clone https://github.com/LehaUchicha/gcp-project.git

Изображение Docker Для ручной сборки

  • Создайте Облачный репозиторий исходных текстов с помощью нашего gcp-проекта.
  • Добавьте файл Dockerfile в свой репозиторий, чтобы создать свое приложение.
  • Протестируйте созданный образ Docker.
  • Поместите образ Docker в хранилище артефактов.

Перейдите в GCP и откройте консоль DHCP:

  1. Создайте репозиторий

  2. Клонирование репозитория

  3. Создание образа для проекта

  4. Запустите изображение docker

  5. Тестовый контейнер docker

  6. Создать репозиторий Docker

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

  7. Настройка аутентификации в docker

  8. Пометьте изображение тегом

    Получить название проекта

    Затем выполните приведенную ниже команду:

Где

  • PROJECT – это ваш идентификатор проекта Google Cloud Project. Если ваш идентификатор проекта содержит двоеточие (:), см. раздел Проекты с доменной областью.
  • us-central1 – это местоположение хранилища.
  • docker.pkg.dev – это имя хоста для репозиториев Docker.
  • quickstart-image – это имя изображения, которое вы хотите использовать в репозитории. Имя изображения может отличаться от имени локального изображения.
  • tag1 – это тег, который вы добавляете к изображению Docker. Если вы не указали тег, Docker применит последнюю версию тега по умолчанию.
  1. Нажмите на изображение docker, чтобы сообщить

или

  ```
  gcloud builds submit --tag us-central1-docker.pkg.dev/PROJECT/gcp-project-docker-repo/gcp-project:0.0.1
  ```

Автоматизируйте Создание Образа Docker:

  • Создайте конвейер в облачной сборке для создания образа Docker при изменении исходного кода.
  1. создайте конвейер сборки cloud build.yaml

  2. Запустите конвейер с помощью команды

  3. Создайте триггер

Где:

  • REPO_NAME – это имя вашего репозитория.
  • BRANCH_PATTERN – это имя ветки в вашем репозитории для вызова сборки.
  • TAG_PATTERN – это имя тега в вашем репозитории для вызова сборки.
  • BUILD_CONFIG_FILE – это путь к вашему файлу конфигурации сборки.
  • SERVICE_ACCOUNT – это адрес электронной почты, связанный с вашей учетной записью службы. Если вы не включаете этот флаг, используется учетная запись службы облачной сборки по умолчанию.

Ручное Развертывание образа Docker:

  • Используйте образ для создания и предоставления развертывания в k8s.
  • Обновите образ и внесите изменения в развертывание.

Работа с кластером:

  1. Создайте кластер

  2. Аутентификация в кластере

  3. Создать deployment.yaml

  4. Применить развертывание с помощью команды

Автоматизируйте Развертывание образа Docker:

  • Создайте конвейер в облачной сборке для развертывания новой версии вашего образа при изменении исходного кода.
  1. Измените облачную сборку.файл yaml. Необходимо добавить шаги, где новая версия образа должна быть установлена в deployment.yaml

  2. Измените облачную сборку.файл yaml. Необходимо применить обновленное развертывание.yaml

Подключитесь к базе данных с помощью Cloud SQL Auth Proxy.

  1. Создайте экземпляр sql с частным IP-адресом. (или и то, и другое: частное и публичное)

  2. Для получения доступа приложения к облачному Sql необходимо настроить прокси-сервер проверки подлинности SQL. Вы можете найти подробную инструкцию здесь: https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine .

Создавайте секреты

kubectl create secret generic postgres-db-secret> \
--from-literal=username=db_username \
--from-literal=password=db_pass \
--from-literal=database=db_database

Включите идентификацию рабочей нагрузки в вашем кластере

gcloud container clusters update nginx-1-cluster \
--workload-pool=gcp-project-322518.svc.id.goog

Создать учетную запись службы.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name:  # TODO(developer): replace these values

Применить файл

kubectl apply -f service-account.yaml

Включите привязку IAM между вашим ИМЕНЕМ YOUR-GSA и ВАШИМ ИМЕНЕМ KSA

gcloud iam service-accounts add-iam-policy-binding \
--role="roles/iam.workloadIdentityUser" \
--member="serviceAccount:gcp-project-[your_project_id].svc.id.goog[default/sql-service-account]" \
postgres-service-account@gcp-project-[your_project_id].iam.gserviceaccount.com

Добавьте аннотацию к ВАШЕМУ-KSA-ИМЕНИ, чтобы завершить привязку

kubectl annotate serviceaccount \
sql-service-account \
iam.gke.io/gcp-service-account=postgres-service-account@gcp-project-[your_project_id].iam.gserviceaccount.com

Сценарии миграции SQL вручную

  1. Добавить библиотеку liquibase в pom.xml

  2. Создавайте сценарии миграции. Файл db.changelog-0.0.0.yaml

и файл db.changelog-master.yaml

  ```yaml

databaseChangeLog:

  • включить: файл: db/changelog/db.changelog-0.0.0.yaml “
  1. включить: файл: db/changelog/db.changelog-0.0.0.yaml “

Автоматизация сценариев миграции SQL

Измените облачную сборку.файл yaml. добавьте такие фрагменты:

#Step 3. Install Cloud SQL proxy
- id: Install Cloud Sql Auth Proxy
  name: maven:3-jdk-11
  entrypoint: sh
  args:
    - "-c"
    - "wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy"

#Step 4. Run migration scripts using liquibase
- id: Run migration scripts
  name: maven:3-jdk-11
  entrypoint: sh
  args:
    - "-c"
    - "(./cloud_sql_proxy -instances=gcp-project-[your_project_id]:us-central1:postgre-instance=tcp:localhost:5432 & sleep 2) && mvn liquibase:update -Dliquibase.url=jdbc:postgresql://$$DB_HOST/$$DB_NAME -Dliquibase.username=$$DB_USER -Dliquibase.password=$$DB_PASS"
  timeout: "150s"
  secretEnv: ['DB_PASS', 'DB_USER', 'DB_HOST', 'DB_NAME']
  waitFor: ["Install Cloud Sql Auth Proxy"]

Шаг 3 необходим для установки Cloud SQL Auth proxy, в противном случае подключение к Postgressql будет невозможно.

Шаг 4. запустим Cloud SQL Auth proxy, затем запустим команду liquibase для миграции.

Здесь такие секреты, как DB_PASS’, ‘DB_USER’, ‘DB_HOST’, ‘DB_NAME’, происходят из управления секретами. Для получения секретов из secrets manager необходимо изменить cloudbuild.yaml

availableSecrets:
  secretManager:
    - versionName: projects/[project_id]/secrets/POSTGRES_PASSWORD/versions/2
      env: 'DB_PASS'
    - versionName: projects/[project_id]/secrets/POSTGRES_USERNAME/versions/1
      env: 'DB_USER'
    - versionName: projects/[project_id]/secrets/POSTGRES_HOST/versions/2
      env: 'DB_HOST'
    - versionName: projects/[project_id]/secrets/POSTGRES_DATABASE/versions/1
      env: 'DB_NAME'

Предоставьте свой сервис через облачный балансировщик нагрузки с внешним статическим IP-адресом

  1. Создать сервис.yaml

  2. Выполнить команду:

Ты все еще здесь? Ух ты! Спасибо вам за чтение! Если будет полезно сделать эту статью более подробной, пожалуйста, дайте мне знать в комментариях. Если вам понравилась статья, вы можете поддержать меня

Оригинал: “https://dev.to/lehauchicha/google-cloud-platform-deploy-simple-java-spring-boot-application-4f85”