Покретање Цамунда БПМ-а на Кубернетес-у

Покретање Цамунда БПМ-а на Кубернетес-у

Да ли користите Кубернетес? Спремни да преместите своје Цамунда БПМ инстанце из виртуелних машина или можда једноставно покушате да их покренете на Кубернетес-у? Хајде да погледамо неке уобичајене конфигурације и појединачне ставке које се могу прилагодити вашим специфичним потребама.

Претпоставља се да сте раније користили Кубернетес. Ако не, зашто не погледати вођство и да не покренете свој први кластер?

Аутори

  • Аластаир Фиртх (Аластаир Фиртх) - виши инжењер за поузданост локације у тиму Цамунда Цлоуд;
  • Ларс Ланге (Ларс Ланге) - ДевОпс инжењер у Цамунди.

Укратко, онда:

git clone https://github.com/camunda-cloud/camunda-examples.git
cd camunda-examples/camunda-bpm-demo
make skaffold

У реду, вероватно није функционисало јер немате инсталиран скаффолд и кустомизе. Па онда читајте даље!

Шта је Цамунда БПМ

Цамунда БПМ је платформа отвореног кода за управљање пословним процесима и аутоматизацију одлучивања која повезује пословне кориснике и програмере софтвера. Идеалан је за координацију и повезивање људи, (микро) сервиса или чак ботова! Више о различитим случајевима употребе можете прочитати на веза.

Зашто користити Кубернетес

Кубернетес је постао де фацто стандард за покретање модерних апликација на Линук-у. Коришћењем системских позива уместо хардверске емулације и способности кернела да управља меморијом и пребацивањем задатака, време покретања и време покретања сведено је на минимум. Међутим, највећа корист може доћи од стандардног АПИ-ја који Кубернетес пружа за конфигурисање инфраструктуре потребне свим апликацијама: складиштење, умрежавање и надгледање. У јуну 2020. напунио је 6 година и можда је други највећи пројекат отвореног кода (после Линука). Недавно је активно стабилизовао своју функционалност након брзог понављања у последњих неколико година, јер је постао критичан за производна оптерећења широм света.

Цамунда БПМ Енгине може лако да се повеже са другим апликацијама које раде на истом кластеру, а Кубернетес пружа одличну скалабилност, омогућавајући вам да повећате трошкове инфраструктуре само када је заиста потребно (и лако их смањите по потреби).

Квалитет надгледања је такође значајно побољшан помоћу алата као што су Прометхеус, Графана, Локи, Флуентд и Еластицсеарцх, који вам омогућавају да централно видите сва радна оптерећења у кластеру. Данас ћемо погледати како да имплементирамо Прометхеус извозник у Јава виртуелну машину (ЈВМ).

Мете

Хајде да погледамо неколико области у којима можемо да прилагодимо Цамунда БПМ Доцкер слику (гитхуб) тако да добро комуницира са Кубернетесом.

  1. Дневници и метрика;
  2. Везе базе података;
  3. Аутентикација;
  4. Управљање сесијама.

Размотрићемо неколико начина за постизање ових циљева и јасно приказати цео процес.

Приметити: Да ли користите Ентерприсе верзију? Погледај овде и ажурирајте везе са сликама по потреби.

Развој тока посла

У овој демонстрацији користићемо Скаффолд за прављење Доцкер слика помоћу Гоогле Цлоуд Буилд-а. Има добру подршку за различите алате (као што су Кустомизе и Хелм), ЦИ и алате за прављење, и добављаче инфраструктуре. Филе skaffold.yaml.tmpl укључује подешавања за Гоогле Цлоуд Буилд и ГКЕ, пружајући веома једноставан начин за покретање инфраструктуре производног нивоа.

make skaffold ће учитати Доцкерфиле контекст у Цлоуд Буилд, направити слику и сачувати је у ГЦР-у, а затим применити манифесте на ваш кластер. То је оно што ради make skaffold, али Скаффолд има много других карактеристика.

За иамл шаблоне у Кубернетес-у, користимо кустомизе за управљање иамл преклопима без раздвајања читавог манифеста, што вам омогућава да користите git pull --rebase за даља побољшања. Сада је у кубецтл-у и прилично добро ради за такве ствари.

Такође користимо енвсубст да попунимо име хоста и ИД ГЦП пројекта у *.иамл.тмпл датотеке. Можете видети како то функционише у makefile или само настави даље.

Предувјети

Ток рада користећи манифесте

Ако не желите да користите кустомизе или скаффолд, можете се позвати на манифесте у generated-manifest.yaml и прилагодите их току рада по вашем избору.

Дневници и метрика

Прометеј је постао стандард за прикупљање метрика у Кубернетесу. Заузима исту нишу као АВС Цлоудватцх Метрицс, Цлоудватцх Алертс, Стацкдривер Метрицс, СтатсД, Датадог, Нагиос, вСпхере Метрицс и други. Он је отвореног кода и има моћан језик упита. Визуелизацију ћемо поверити Графани – долази са великим бројем контролних табли доступних из кутије. Они су међусобно повезани и релативно их је лако инсталирати прометеј-оператер.

Подразумевано, Прометеј користи модел екстракције <service>/metrics, а додавање контејнера с приколицом за ово је уобичајено. Нажалост, ЈМКС метрике се најбоље евидентирају у ЈВМ-у, тако да контејнери за приколице нису тако ефикасни. Хајде да се повежемо јмк_екпортер отвореног кода са Прометхеуса на ЈВМ додавањем у слику контејнера која ће обезбедити путању /metrics на другој луци.

Додајте Прометхеус јмк_екпортер у контејнер

-- images/camunda-bpm/Dockerfile
FROM camunda/camunda-bpm-platform:tomcat-7.11.0

## Add prometheus exporter
RUN wget https://repo1.maven.org/maven2/io/prometheus/jmx/
jmx_prometheus_javaagent/0.11.0/jmx_prometheus_javaagent-0.11.0.jar -P lib/
#9404 is the reserved prometheus-jmx port
ENV CATALINA_OPTS -javaagent:lib/
jmx_prometheus_javaagent-0.11.0.jar=9404:/etc/config/prometheus-jmx.yaml

Па, то је било лако. Извозник ће надгледати томцат и приказати његове метрике у Прометхеус формату на <svc>:9404/metrics

Подешавање извозника

Пажљиви читалац може се запитати одакле је дошао prometheus-jmx.yaml? Постоји много различитих ствари које могу да раде у ЈВМ-у, а томцат је само једна од њих, тако да је извознику потребна додатна конфигурација. Доступне су стандардне конфигурације за мачку, дивљу мушицу, кафку и тако даље овде. Додаћемо мачку као ЦонфигМап у Кубернетес-у, а затим га монтирајте као волумен.

Прво, додајемо конфигурациону датотеку извозника у наш директоријум платформ/цонфиг/

platform/config
└── prometheus-jmx.yaml

Затим додајемо ЦонфигМапГенератор в kustomization.yaml.tmpl:

-- platform/kustomization.yaml.tmpl
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
[...] configMapGenerator:
- name: config
files:
- config/prometheus-jmx.yaml

Ово ће додати сваки елемент files[] као конфигурациони елемент ЦонфигМап. ЦонфигМапГенераторс су одлични јер хеширају конфигурационе податке и присиљавају да се под поново покрене ако се промени. Они такође смањују количину конфигурације у Деплоимент-у јер можете монтирати читаву „фасциклу“ конфигурационих датотека у један ВолумеМоунт.

Коначно, морамо да монтирамо ЦонфигМап као волумен на под:

-- platform/deployment.yaml
apiVersion: apps/v1
kind: Deployment
[...] spec:
template:
spec:
[...] volumes:
- name: config
configMap:
name: config
defaultMode: 0744
containers:
- name: camunda-bpm
volumeMounts:
- mountPath: /etc/config/
name: config
[...]

Предивна. Ако Прометхеус није конфигурисан да изврши потпуно чишћење, можда ћете морати да му кажете да очисти махуне. Корисници Прометхеус Оператора могу да користе service-monitor.yaml започети. Истражите Service-monitor.yaml, дизајн оператера и СервицеМониторСпец пре него што почнеш.

Проширивање овог обрасца на друге случајеве употребе

Све датотеке које додамо у ЦонфигМапГенератор биће доступне у новом директоријуму /etc/config. Можете проширити овај шаблон да бисте монтирали све друге конфигурационе датотеке које су вам потребне. Можете чак и монтирати нову скрипту за покретање. Можете користити субПатх да монтирате појединачне датотеке. Да бисте ажурирали кмл датотеке, размислите о коришћењу кмлстарлет уместо сед. Већ је укључено у слику.

Часописи

Сјајна вест! Дневници апликација су већ доступни на стдоут-у, на пример са kubectl logs. Флуентд (подразумевано инсталиран у ГКЕ) ће проследити ваше евиденције на Еластицсеарцх, Локи или платформу за евидентирање у вашем предузећу. Ако желите да користите јсонифи за евиденцију, можете пратити горњи шаблон за инсталацију логбацк.

База података

Подразумевано, слика ће имати Х2 базу података. Ово није прикладно за нас и користићемо Гоогле Цлоуд СКЛ са Цлоуд СКЛ проки-јем – ово ће бити потребно касније за решавање унутрашњих проблема. Ово је једноставна и поуздана опција ако немате сопствене преференције у постављању базе података. АВС РДС пружа сличну услугу.

Без обзира на базу података коју одаберете, осим ако није Х2, мораћете да подесите одговарајуће променљиве окружења у platform/deploy.yaml. Изгледа отприлике овако:

-- platform/deployment.yaml
apiVersion: apps/v1
kind: Deployment
[...] spec:
template:
spec:
[...] containers:
- name: camunda-bpm
env:
- name: DB_DRIVER
value: org.postgresql.Driver
- name: DB_URL
value: jdbc:postgresql://postgres-proxy.db:5432/process-engine
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: cambpm-db-credentials
key: db_username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: cambpm-db-credentials
key: db_password
[...]

Приметити: Можете да користите Кустомизе за примену у различитим окружењима помоћу преклапања: пример.

Приметити: употреба valueFrom: secretKeyRef. Користите ову Кубернетес функцију чак и током развоја да би ваше тајне биле безбедне.

Вероватно је да већ имате преферирани систем за управљање Кубернетес тајнама. Ако не, ево неколико опција: Шифрујте их помоћу КМС-а вашег добављача облака, а затим их убаците у К8С као тајне преко ЦД цевовода – Мозилла СОПС - ће радити веома добро у комбинацији са Кустомизе сецретс. Постоје и други алати, као што је дотГПГ, који обављају сличне функције: ХасхиЦорп трезор, Прилагодите додатке тајне вредности.

Улаз

Осим ако не одлучите да користите прослеђивање локалног порта, биће вам потребан конфигурисани Ингресс Цонтроллер. Ако не користите ингресс-нгинк (Хелм цхарт) онда највероватније већ знате да морате да инсталирате неопходне напомене ingress-patch.yaml.tmpl или platform/ingress.yaml. Ако користите ингресс-нгинк и видите улазну класу нгинк са балансатором оптерећења који указује на њу и спољним ДНС или ДНС уносом са џокер знаком, можете кренути. У супротном, конфигуришите Ингресс Цонтроллер и ДНС или прескочите ове кораке и задржите директну везу са подом.

ТЛС

Ако користите церт-манагер или кубе-лего и летсенцрипт - сертификати за ново пријављивање ће се добити аутоматски. Иначе, отвори ingress-patch.yaml.tmpl и прилагодите га својим потребама.

Лансирање!

Ако сте пратили све горе написано, онда команду make skaffold HOSTNAME=<you.example.com> требало би да покрене доступну инстанцу у <hostname>/camunda

Ако нисте подесили своју пријаву на јавни УРЛ, можете га преусмерити помоћу localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 на localhost:8080/camunda

Сачекајте неколико минута док мачка није потпуно спремна. Церт-манагеру ће бити потребно неко време да потврди име домена. Затим можете пратити евиденцију користећи доступне алате као што је алат као што је кубетаил, или једноставно користећи кубецтл:

kubectl logs -n camunda-bpm-demo $(kubectl get pods -o=name -n camunda-bpm-demo) -f

Следећи кораци

Овлашћење

Ово је релевантније за конфигурисање Цамунда БПМ-а него Кубернетес-а, али је важно напоменути да је аутентификација подразумевано онемогућена у РЕСТ АПИ-ју. Можете омогући основну аутентификацију или користите неки други метод као што је ЈВТ. Можете користити цонфигмапе и волумене за учитавање кмл-а, или кмлстарлет (погледајте горе) за уређивање постојећих датотека на слици, и или користити вгет или их учитати користећи инит контејнер и дељени волумен.

Управљање сесијама

Као и многе друге апликације, Цамунда БПМ управља сесијама у ЈВМ-у, тако да ако желите да покренете више реплика, можете омогућити лепљиве сесије (на пример за ингресс-нгинк), који ће постојати док реплика не нестане, или поставите атрибут Мак-Аге за колачиће. За робусније решење, можете да примените Сессион Манагер у Томцат-у. Ларс има засебан пост на ову тему, али нешто попут:

wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/
2.3.2/memcached-session-manager-2.3.2.jar -P lib/ &&
wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc9/
2.3.2/memcached-session-manager-tc9-2.3.2.jar -P lib/ &&

sed -i '/^</Context>/i
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="redis://redis-proxy.db:22121"
sticky="false"
sessionBackupAsync="false"
storageKeyPrefix="context"
lockingMode="auto"
/>' conf/context.xml

Приметити: можете користити кмлстарлет уместо сед

Користили смо твемпроки испред Гоогле Цлоуд Мемористоре-а, са мемцацхед-сессион-манагер (подржава Редис) да га покрене.

Skaliranje

Ако већ разумете сесије, онда прво (и често последње) ограничење за скалирање Цамунда БПМ-а може бити веза са базом података. Делимично прилагођавање је већ доступно "из кутије" Хајде да такође онемогућимо интиалСизе у датотеци сеттингс.кмл. Додати Хоризонтал Под Аутосцалер (ХПА) и лако можете аутоматски скалирати број махуна.

Захтеви и ограничења

В platform/deployment.yaml Видећете да смо чврсто кодирали поље ресурса. Ово добро функционише са ХПА, али може захтевати додатну конфигурацију. За то је погодан кустомизе фластер. Центиметар. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

Излаз

Тако смо инсталирали Цамунда БПМ на Кубернетес са Прометхеус метрикама, евиденцијама, Х2 базом података, ТЛС-ом и Ингресс-ом. Додали смо јар датотеке и конфигурационе датотеке користећи ЦонфигМапс и Доцкерфиле. Разговарали смо о размени података са томовима и директно са варијаблама окружења из тајни. Поред тога, дали смо преглед подешавања Цамунде за више реплика и аутентификовани АПИ.

референце

github.com/camunda-cloud/camunda-examples/camunda-bpm-kubernetes

├── generated-manifest.yaml <- manifest for use without kustomize
├── images
│ └── camunda-bpm
│ └── Dockerfile <- overlay docker image
├── ingress-patch.yaml.tmpl <- site-specific ingress configuration
├── kustomization.yaml.tmpl <- main Kustomization
├── Makefile <- make targets
├── namespace.yaml
├── platform
│ ├── config
│ │ └── prometheus-jmx.yaml <- prometheus exporter config file
│ ├── deployment.yaml <- main deployment
│ ├── ingress.yaml
│ ├── kustomization.yaml <- "base" kustomization
│ ├── service-monitor.yaml <- example prometheus-operator config
│ └── service.yaml
└── skaffold.yaml.tmpl <- skaffold directives

05.08.2020, превод Чланак Аластаир Фиртх, Ларс Ланге

Извор: ввв.хабр.цом

Додај коментар