Метод развертывания приложения Java на основе режима SideCar на платформе K8S

Kubernetes
Метод развертывания приложения Java на основе режима SideCar на платформе K8S

Введение в режим SideCar

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


Несколько вариантов использования режима SideCar в среде K8S

общее хранилище

Основываясь на функции модуля K8S, один и тот же модуль может совместно использовать том, смонтированный в корневом контейнере. Основываясь на этой функции, мы можем думать о следующих приложениях SideCar:

1. Сбор и загрузка логов

Мы можем монтировать журналы приложений в общий том, бизнес-контейнеры записывают журналы, контейнеры SideCar считывают журналы и загружают платформы анализа журналов, чтобы отделить их по типу производитель-потребитель.

2. Установка пакета приложения JAR

Поскольку Java-приложения должны иметь среду выполнения Java, в большинстве из них в качестве базового образа используются такие образы, как open-jdk. И большинство этих изображений — это сотни M. Через общее хранилище мы можем использовать образы типа busybox объемом всего несколько мегабайт в качестве базового образа, а затем копировать пакет jar на общий том. Образ, содержащий jar, используется в качестве InitContainer, а основной бизнес-контейнер использует пакет jar в общем томе для запуска бизнеса. Последующие обновления версии приложения должны обновлять только образ пакета jar. Этот образ пакета jar представляет собой SideCar.

общая сеть

Тот же POD в K8S также имеет общий IP-адрес. Основываясь на этой функции, мы можем использовать шаблон SideCar следующим образом:

1. Контейнерный прокси

Прокси-контейнеры приложений через контейнер SideCar.

2. Адаптация контейнера

Когда контейнеру необходимо предоставить доступ к нескольким существующим службам, но формат обмена различными бизнес-данными несовместим, модель адаптера можно использовать для справки, а контейнер SideCar можно использовать в качестве адаптера для предоставления внешних служб без изменения исходного бизнес-код.


Пример развертывания приложения Java на основе режима SideCar

Возьмите InitContainer в качестве нашего контейнера SideCar, смонтируйте пакет jar в основной бизнес-контейнер через общее хранилище, а контейнер домашней страницы предоставит рабочую среду Java.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-depl
  labels:
    app: demo
spec:
  selector:
    matchLabels:
      app: demo
  replicas: 1
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
      - name: business-container
        image: java:8-jdk
        imagePullPolicy: IfNotPresent
        command:
        - java
        - -Djava.security.egd=file:/dev/./urandom
        - -Dspring.profiles.active=k8s
        - -jar
        - /temp/demo-1.0.0-SNAPSHOT.jar
        ports:
        - containerPort: 8062
        volumeMounts:
        - mountPath: /temp
          name: jar-volume
        - name: TZ
          value: Asia/Shanghai
      initContainers:
      - image: registry.demo.com/demo:1.0.0
        imagePullPolicy: IfNotPresent
        name: demo-jar
        command:
        - cp
        - /demo-1.0.0-SNAPSHOT.jar
        - /app/demo-1.0.0-SNAPSHOT.jar
        volumeMounts:
        - mountPath: /app
          name: jar-volume
      volumes:
      - emptyDir: {}
        name: jar-volume

использованная литература

1. Открытый курс CNCF X Alibaba по облачным технологиямgit book.capable/git chat/col…