Рубрики
Uncategorized

Kubernetes и Java Spring Boot [Part.2: Непрерывное развертывание]

Этот пост изначально появился в Jaxenter. В части одного из этого учебника мы узнали о основах … Помечено с Кубернетами, Java, DevOps, Docker.

CI/CD Java Docker Kubernetes (2 часть серии)

Этот пост изначально появился в дьяксель .

В Часть одна Из этого учебника мы узнали о основах Docker и Непрерывная интеграция и доставка Отказ Мы использовали CI/CD для создания и тестирования приложения Java Spring Microservice, а конечный результат был готовым к развертыванию докера.

Docker и Java Spring Boot [Part.1: Непрерывная интеграция]

Томас Фернандес · 22 января 22,20 · 5 мин читать

В этой второй (и окончательной) части мы представим Kubernetes на картинку. Kubernetes обеспечит масштабируемость и обновления без простоя.

Добавление профиля в приложение

Вы можете вспомнить с первой части учебника, что наше приложение имеет яркий недостаток: отсутствие постоянства данных — наши драгоценные данные теряются по перезагрузкам. К счастью, это легко исправлено, добавив новый профиль с реальной базой данных.

Во-первых, отредактируйте файл Maven Mainest (Pom.xml), чтобы добавить профиль производства внутри <Профили> ... Теги:


 production
 
    true
 

Затем между <Зависимости> ... Теги, добавьте драйвер MySQL как зависимость:


 mysql
 mysql-connector-java
 runtime

Наконец создайте файл свойств только для производства в SRC/Main/Resources/Application-Production.Properties :

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
spring.datasource.url=jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASSWORD}

Мы должны избегать помещения тайной информации, такой как пароли в GitHub. Мы будем использовать переменные среды и решить позже, как мы пройдем их вместе.

Теперь наше приложение готово к первому времени.

Подготовка облака

В этом разделе мы создадим базу данных и кластеры Kubernetes. Войдите в свой любимый поставщик облака и создайте базу данных MySQL и кластер Kubernetes.

База данных

Создайте базу данных MySQL с относительно новой версией (I.E., 5.7 или 8.0+). Вы можете установить свой собственный сервер или использовать управляемую облачную базу данных. Например, AWS имеет RDS и Aurora, и облако Google имеет Google SQL.

Как только вы создали службу базы данных:

  1. Создайте базу данных под названием «Demodb».
  2. Создать пользователь под названием «Демиузер» с, по крайней мере, Выберите, вставить, обновить Разрешения.
  3. Обратите внимание на IP-адрес базы данных и порт.

Как только это настроено, создайте пользовательские таблицы:

CREATE TABLE `hibernate_sequence` (
 `next_val` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `users` (
 `id` bigint(20) NOT NULL,
 `created_date` datetime DEFAULT NULL,
 `email` varchar(255) DEFAULT NULL,
 `modified_date` datetime DEFAULT NULL,
 `password` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Кубернеты

Самый быстрый способ начать работу с Kubernetes, проходит через управляемый кластер из облачного провайдера (например, упругих службы Kubernetes на AWS, Kubernetes на Google Cloud и т. Д.). Я постараюсь сохранить это руководство поставщику — агности Так вы, уважаемый читатель, у вас свобода выбирают, какая бы альтернатива наилучшим образом подходит для ваших потребностей.

Что касается размеров узла кластера, это микросервис, поэтому требования минимальны. Самая скромная машина будет достаточно, и вы можете настроить количество узлов в ваш бюджет. Если вы хотите иметь обновления Rolling — то есть обновления без простоя — вам понадобится как минимум два узла.

Работа с Кубернетами

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

  • Стручки : POD — это команда контейнеров. Контейнеры в стручке гарантированы на одной машине.

    • Развертывание : Развертывание мониторирует стручков и управляет их распределением. Мы можем использовать развертывание для масштабирования вверх или вниз по количеству стручков и выполнение обновлений прокатки.
    • Услуги : Услуги — это входные точки в наше приложение. Сервис обнаруживает фиксированную публичную IP для наших конечных пользователей, они могут выполнять сопоставление портов и балансировку нагрузки.
    • Этикетки : Ярлыки — короткие пары клавишных значений, мы можем добавить в любой ресурс в кластере. Они полезны для организации и перекрестных объектов в развертывании. Мы будем использовать этикетки для подключения службы с помощью стручков.

Вы заметили, что я не перечислял контейнеры в качестве предмета? Хотя можно запустить один контейнер в Кубейнетах, лучше всего, если мы думаем о них как о шинах на машине, они полезны только в качестве частей целого.

Давайте начнем с определения службы. Создайте файл манифеста под названием Развертывание .yml со следующим содержанием:

# deployment.yml

apiVersion: v1
kind: Service
metadata:
  name: semaphore-demo-java-spring-lb
spec:
  selector:
    app: semaphore-demo-java-spring-service
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 8080

Под деревом SPEC мы находим определение услуги: балансировщик сетевого нагрузки, который пересылает HTTP-трафик в порт 8080.

Добавьте развертывание в тот же файл, разделенный тремя дефисами (—):

# deployment.yml (continued)

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: semaphore-demo-java-spring-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: semaphore-demo-java-spring-service
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: semaphore-demo-java-spring-service
    spec:
      containers:
        - name: semaphore-demo-java-spring-service
          image: ${DOCKER_USERNAME}/semaphore-demo-java-spring:$SEMAPHORE_WORKFLOW_ID
          imagePullPolicy: Always
          env:
            - name: ENVIRONMENT
              value: "production"
            - name: DB_HOST
              value: "${DB_HOST}"
            - name: DB_PORT
              value: "${DB_PORT}"
            - name: DB_NAME
              value: "${DB_NAME}"
            - name: DB_USER
              value: "${DB_USER}"
            - name: DB_PASSWORD
              value: "${DB_PASSWORD}"
          readinessProbe:
            initialDelaySeconds: 60
            httpGet:
              path: /login
              port: 8080

шаблон.spec Дерево определяет контейнеры, которые составляют стручок. В нашем приложении есть только один контейнер, на который ссылается на его образ. Здесь мы также проходим вдоль переменных окружающей среды.

Общее количество стручков контролируется с реплики Отказ

Политика обновления определяется в Стратегия Отказ ОБНОВЛЕНИЕ ROLING обновляет стручки по очереди, поэтому всегда работает как минимум один POD. Тест, используемый для проверки, если POD готов определяется с помощью readishprobe Отказ

селектор , этикетки и Matchlabels Работайте вместе, чтобы подключить обслуживание и развертывание. Kubernetes ищет подходящие этикетки для объединения ресурсов.

Возможно, вы заметили, что используются специальные теги в образе докера.

В Часть одна из учебного пособия мы пометили все наши изображения докера как Последние Отказ Проблема с последней в том, что мы потеряем способность к версии изображения; Старые изображения перезаписываются на каждую сборку. Если у нас есть трудности с выпуском, нет предыдущей версии, чтобы откатиться.

Вместо последних, лучше всего использовать переменную, такую как $ Semaphore_workflow_id однозначно идентифицировать изображение.

Готовимся к постоянному развертыванию

В первую очередь вы создали секрет с вашими учетными данными Docker Hub. Здесь вам нужно будет повторить процедуру с двумя дополнительными частями информации.

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

Добавить секрет:

  • В левом меню навигации на семафоре нажмите на Секреты рядом с Конфигурация .
  • Нажмите на Создать новый секрет Отказ
  • Создайте секрет, как показано:

КУБЕРНЕТЫ КЛАСТЕР : Секрет с параметрами подключения Kubernetes. Конкретные детали будут зависеть от того, как и где работает кластер.

Например, если был предоставлен файл Kubeconfig, вы можете загрузить его в семафор, повторяя те же шаги, которые вы сделали для секрета базы данных:

Развертывание трубопровода

Мы почти закончили. Единственное, что осталось — создать Развертывание трубопровода к:

  • Генерировать манифест : заполните манифест с реальными переменными среды.
  • Сделать развертывание : Отправьте желаемое конечное состояние в кластер Kubernetes.

ОТКРЫТАЙТЕ СТРОИТНИКЕ ОТКЛЮЧЕНИЯ ОТКЛЮЧЕНИЯ, нажав кнопку «Изменить рабочую поверхность»:

Давайте назовем новый трубопровод «Развертываем в Кубейнес». Нажмите на первый блок на новом конвейере и заполните детали работы следующим образом:

  • Секреты : Выберите все секреты:

    • Docker Hub.
    • Production-db-auth
    • Производство-K8S-AUTH
  • Переменные среды : Добавьте любые специальные переменные, требуемые вашим облачным провайдером, таким как Default_region или Project_id Отказ
  • Пролог : Добавить Оформить заказ Команда и заполните любые облачные вход в систему, установите или команды активации (GCloud, AWS и т. Д.)
  • Работа : Создайте манифест и сделать развертывание со следующей командой:
cat deployment.yml | envsubst | tee deployment.yml kubectl apply -f deployment.yml

В зависимости от того, где и как работает кластер, вам может потребоваться адаптировать код выше. Если вам нужен только файл Kubeconfig для подключения к вашему кластеру, отлично, это должно быть достаточно. Некоторые облачные провайдеры, однако, нуждаются в дополнительных программах помощника.

Например, AWS требует AWS-IAM-аутентификатор При подключении с кластером. Для получения дополнительной информации обратитесь к документации по провайдеру облака.

Поскольку мы отказываемся от последнего тега, нам нужно перейти на трубопровод «Docker Build». Изображения докера должны быть помечены тем же идентификатором рабочего процесса по всем трубопроводам.

Прокрутите влево в блок «Build и развертывание контейнера Docker» и замените две последние команды на задании:

docker build \
    --cache-from "$DOCKER_USERNAME"/semaphore-demo-java-spring:latest \
    --build-arg ENVIRONMENT="${ENVIRONMENT}" \
    -t "$DOCKER_USERNAME"/semaphore-demo-java-spring:latest .
docker push "$DOCKER_USERNAME"/semaphore-demo-java-spring:latest

С этими двумя командами:

docker build \
    --cache-from "$DOCKER_USERNAME"/semaphore-demo-java-spring:latest  \
    --build-arg ENVIRONMENT="${ENVIRONMENT}" \
    -t "$DOCKER_USERNAME"/semaphore-demo-java-spring:$SEMAPHORE_WORKFLOW_ID .
docker push "$DOCKER_USERNAME"/semaphore-demo-java-spring:$SEMAPHORE_WORKFLOW_ID

Ваше первое развертывание

На данный момент вы готовы сделать ваше первое развертывание.

Нажмите Запустите рабочий процесс и нажмите «Пуск»:

Разрешить несколько минут для трубопроводов делать их работу. Рабочий процесс остановится в блоке «Docker Build». Нажмите на продвижение, чтобы развернуть в Kubernetes:

Как только рабочий процесс завершен, Kubernetes берет на себя:

Вы можете отслеживать процесс из вашей облачной консоли или с помощью kubectl:

$ kubectl get deployments
$ kubectl get pods

Чтобы получить IP-адрес внешнего сервиса, проверьте страницу приборной панели облака или используйте KUBECTL:

$ kubectl get services

Вот и все. Услуга работает, и теперь у вас есть полный процесс CI/CD для развертывания вашего приложения.

Упаковка

Вы узнали, как Semaphore и Docker могут работать вместе, чтобы автоматизировать развертывание Kubernetes. Не стесняйтесь вилить демонстрационный проект и адаптировать его к вашим потребностям. Разработчики Kubernetes пользуются высоким спросом, и вы просто сделали свое первое развертывание Kubernetes, способ пойти!

Узнайте больше о CI/CD для Docker и Kubernetes с нашими другими пошаговыми учебниками:

Вкусные Кубернеты в 4 шага

Томас Фернандес · 12 декабря 17,19 · 8 минут чтения

Вы хотели бы, специфичный поставщик учебник?

  • Google Cloud: Кубернаны за 10 минут
  • AWS: CI/CD к AWS Kubernetes

Заинтересованы в CI/CD и Kubernetes? Мы работаем над бесплатной электронной книгой, Зарегистрироваться Чтобы получить его, как только он опубликован.

Вы нашли пост полезным? Есть какие-либо вопросы? Оставьте комментарий ниже 👀

Спасибо за чтение!

CI/CD Java Docker Kubernetes (2 часть серии)

Оригинал: «https://dev.to/semaphore/kubernetes-and-java-spring-boot-part-2-continuous-deployment-47l9»