Эй, 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.
За это:
- Создать временную учетную запись электронной почты
- Перейдите к https://cloud.google.com/ и нажмите кнопку Начать бесплатно
- Заполните свою кредитную карту и личные данные
- Начните мою бесплатную пробную версию
Приложение
Клонируйте приложение с github. Проект уже содержит Dockerfile, облачную сборку.yaml и развертывание.файл yaml. Требуется только обновить номер проекта gcp [your_project_id].
git clone https://github.com/LehaUchicha/gcp-project.git
Изображение Docker Для ручной сборки
- Создайте Облачный репозиторий исходных текстов с помощью нашего gcp-проекта.
- Добавьте файл Dockerfile в свой репозиторий, чтобы создать свое приложение.
- Протестируйте созданный образ Docker.
- Поместите образ Docker в хранилище артефактов.
Перейдите в GCP и откройте консоль DHCP:
Создайте репозиторий
Клонирование репозитория
Создание образа для проекта
Запустите изображение docker
Тестовый контейнер docker
Создать репозиторий Docker
Проверьте, что репозиторий был создан
Настройка аутентификации в docker
Пометьте изображение тегом
Получить название проекта
Затем выполните приведенную ниже команду:
Где
- PROJECT – это ваш идентификатор проекта Google Cloud Project. Если ваш идентификатор проекта содержит двоеточие (:), см. раздел Проекты с доменной областью.
- us-central1 – это местоположение хранилища.
- docker.pkg.dev – это имя хоста для репозиториев Docker.
- quickstart-image – это имя изображения, которое вы хотите использовать в репозитории. Имя изображения может отличаться от имени локального изображения.
- tag1 – это тег, который вы добавляете к изображению Docker. Если вы не указали тег, Docker применит последнюю версию тега по умолчанию.
Нажмите на изображение docker, чтобы сообщить
или
``` gcloud builds submit --tag us-central1-docker.pkg.dev/PROJECT/gcp-project-docker-repo/gcp-project:0.0.1 ```
Автоматизируйте Создание Образа Docker:
- Создайте конвейер в облачной сборке для создания образа Docker при изменении исходного кода.
создайте конвейер сборки cloud build.yaml
Запустите конвейер с помощью команды
Создайте триггер
Где:
- REPO_NAME – это имя вашего репозитория.
- BRANCH_PATTERN – это имя ветки в вашем репозитории для вызова сборки.
- TAG_PATTERN – это имя тега в вашем репозитории для вызова сборки.
- BUILD_CONFIG_FILE – это путь к вашему файлу конфигурации сборки.
- SERVICE_ACCOUNT – это адрес электронной почты, связанный с вашей учетной записью службы. Если вы не включаете этот флаг, используется учетная запись службы облачной сборки по умолчанию.
Ручное Развертывание образа Docker:
- Используйте образ для создания и предоставления развертывания в k8s.
- Обновите образ и внесите изменения в развертывание.
Работа с кластером:
Создайте кластер
Аутентификация в кластере
Создать deployment.yaml
Применить развертывание с помощью команды
Автоматизируйте Развертывание образа Docker:
- Создайте конвейер в облачной сборке для развертывания новой версии вашего образа при изменении исходного кода.
Измените облачную сборку.файл yaml. Необходимо добавить шаги, где новая версия образа должна быть установлена в deployment.yaml
Измените облачную сборку.файл yaml. Необходимо применить обновленное развертывание.yaml
Подключитесь к базе данных с помощью Cloud SQL Auth Proxy.
Создайте экземпляр sql с частным IP-адресом. (или и то, и другое: частное и публичное)
Для получения доступа приложения к облачному 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 вручную
Добавить библиотеку liquibase в pom.xml
Создавайте сценарии миграции. Файл db.changelog-0.0.0.yaml
и файл db.changelog-master.yaml
```yaml
databaseChangeLog:
- включить: файл: db/changelog/db.changelog-0.0.0.yaml “
включить: файл: 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-адресом
Создать сервис.yaml
Выполнить команду:
Ты все еще здесь? Ух ты! Спасибо вам за чтение! Если будет полезно сделать эту статью более подробной, пожалуйста, дайте мне знать в комментариях. Если вам понравилась статья, вы можете поддержать меня
Оригинал: “https://dev.to/lehauchicha/google-cloud-platform-deploy-simple-java-spring-boot-application-4f85”