Введение в режим 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…