Kubernetes жүйесінде Camunda BPM іске қосу

Kubernetes жүйесінде Camunda BPM іске қосу

Сіз Kubernetes пайдаланасыз ба? Camunda BPM даналарын виртуалды машиналардан шығаруға дайынсыз ба немесе жай ғана Kubernetes-те іске қосып көріңіз бе? Арнайы қажеттіліктеріңізге бейімделуі мүмкін кейбір жалпы конфигурацияларды және жеке элементтерді қарастырайық.

Сіз бұрын Kubernetes пайдаланған деп болжайды. Егер жоқ болса, неге қарап көрмеске көшбасшылық және бірінші кластерді бастамайсыз ба?

авторлар

  • Аластэр Ферт (Alastair Firth) – Camunda Cloud командасының сайт сенімділігі бойынша аға инженері;
  • Ларс Ланге (Ларс Ланге) - Камундадағы DevOps инженері.

Қысқасын айтқанда:

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

Жарайды, ол жұмыс істемеді, себебі сізде skaffold және kustomize орнатылмаған. Жақсы, онда оқыңыз!

Camunda BPM дегеніміз не

Camunda BPM – іскери пайдаланушылар мен бағдарламалық жасақтама әзірлеушілерін байланыстыратын ашық бастапқы бизнес-процестерді басқару және шешімдерді автоматтандыру платформасы. Ол адамдарды, (микро) қызметтерді немесе тіпті боттарды үйлестіру және байланыстыру үшін өте қолайлы! Әртүрлі пайдалану жағдайлары туралы толығырақ мына жерден оқи аласыз байланыс.

Неліктен Kubernetes пайдалану керек

Kubernetes Linux жүйесінде заманауи қолданбаларды іске қосудың іс жүзінде стандартына айналды. Аппараттық эмуляцияның орнына жүйелік қоңырауларды пайдалану және ядроның жадты басқару және тапсырмаларды ауыстыру мүмкіндігін пайдалану арқылы жүктеу уақыты мен іске қосу уақыты минималды деңгейде сақталады. Дегенмен, ең үлкен артықшылық Kubernetes барлық қолданбаларға қажет инфрақұрылымды конфигурациялау үшін ұсынатын стандартты API-дан келуі мүмкін: сақтау, желі және бақылау. Ол 2020 жылдың маусымында 6 жасқа толды және мүмкін екінші ең үлкен ашық бастапқы жоба (Linux-тан кейін). Ол соңғы бірнеше жыл ішінде жылдам итерациядан кейін өзінің функционалдығын белсенді түрде тұрақтандыруда, өйткені ол бүкіл әлем бойынша өндірістік жұмыс жүктемелері үшін маңызды болды.

Camunda BPM Engine бір кластерде жұмыс істейтін басқа қолданбаларға оңай қосыла алады және Kubernetes инфрақұрылымдық шығындарды шынымен қажет болғанда ғана арттыруға (және қажет болған жағдайда оларды оңай азайтуға) мүмкіндік беретін тамаша ауқымдылықты қамтамасыз етеді.

Сондай-ақ бақылау сапасы Prometheus, Grafana, Loki, Fluentd және Elasticsearch сияқты құралдармен айтарлықтай жақсарып, кластердегі барлық жұмыс жүктемелерін орталықтандырылған түрде көруге мүмкіндік береді. Бүгін біз Prometheus экспорттауышын Java виртуалды машинасына (JVM) қалай енгізу керектігін қарастырамыз.

Мақсаттары

Camunda BPM Docker кескінін теңшеуге болатын бірнеше аймақтарды қарастырайық (GitHub) Кубернетеспен жақсы әрекеттесуі үшін.

  1. Журналдар мен көрсеткіштер;
  2. Мәліметтер қорының қосылымдары;
  3. Аутентификация;
  4. Сеансты басқару.

Біз осы мақсаттарға жетудің бірнеше жолдарын қарастырамыз және бүкіл процесті нақты көрсетеміз.

ескерту: Enterprise нұсқасын пайдаланасыз ба? Қараңыз осында және қажетінше кескін сілтемелерін жаңартыңыз.

Жұмыс процесін дамыту

Бұл демонстрацияда Google Cloud Build көмегімен Docker кескіндерін жасау үшін Skaffold қолданамыз. Ол әртүрлі құралдарға (мысалы, Kustomize және Helm), CI және құрастыру құралдарына және инфрақұрылым провайдерлеріне жақсы қолдау көрсетеді. Файл skaffold.yaml.tmpl өндіріс деңгейіндегі инфрақұрылымды іске қосудың өте қарапайым әдісін қамтамасыз ететін Google Cloud Build және GKE параметрлерін қамтиды.

make skaffold Dockerfile мәтінмәнін Cloud Build бағдарламасына жүктейді, кескінді құрастырады және оны GCR ішінде сақтайды, содан кейін манифесттерді кластерге қолданады. Бұл жасайды make skaffold, бірақ Skaffold басқа да көптеген мүмкіндіктері бар.

Kubernetes-тегі yaml үлгілері үшін біз kustomize функциясын пайдаланып, манифесттің барлығын ажыратпай, yaml қабаттасуларын басқаруға мүмкіндік береді. git pull --rebase одан әрі жақсартулар үшін. Қазір ол kubectl-де және ол мұндай нәрселер үшін өте жақсы жұмыс істейді.

Біз сондай-ақ *.yaml.tmpl файлдарында хост атауын және GCP жобасының идентификаторын толтыру үшін envsubst пайдаланамыз. Оның қалай жұмыс істейтінін көруге болады makefile немесе одан әрі жалғастырыңыз.

Пререквизиттер

  • Жұмыс кластері Kubernetes
  • Баптау
  • Скаффолд - жеке докер кескіндерін жасау және GKE-ге оңай орналастыру үшін
  • Осы кодтың көшірмесі
  • Envsubst

Манифесттерді пайдаланатын жұмыс процесі

Егер сіз kustomize немесе skaffold қолданбасын пайдаланғыңыз келмесе, мына жерден манифесттерге сілтеме жасай аласыз. generated-manifest.yaml және оларды өзіңіз таңдаған жұмыс үрдісіне бейімдеңіз.

Журналдар мен көрсеткіштер

Prometheus Kubernetes-те метрика жинаудың стандарты болды. Ол AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics және басқаларымен бірдей орынды алады. Бұл ашық бастапқы код және қуатты сұрау тілі бар. Біз визуализацияны Grafana-ға сеніп тапсырамыз - ол қораптан тыс қол жетімді көптеген бақылау тақталарымен бірге келеді. Олар бір-бірімен байланысты және оларды орнату оңай прометей-оператор.

Әдепкі бойынша, Prometheus экстракция үлгісін пайдаланады <service>/metrics, және бұл үшін бүйірлік контейнерлерді қосу жиі кездеседі. Өкінішке орай, JMX көрсеткіштері JVM ішінде ең жақсы журналға енгізілген, сондықтан бүйірлік контейнерлер соншалықты тиімді емес. Қосылайық jmx_exporter жолды қамтамасыз ететін контейнер кескініне қосу арқылы Prometheus-тен JVM-ге ашық бастапқы коды /metrics басқа портта.

Контейнерге Prometheus jmx_exporter қосыңыз

-- 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

Бұл оңай болды. Экспорттаушы tomcat бақылайды және оның көрсеткіштерін Prometheus пішімінде көрсетеді <svc>:9404/metrics

Экспорттаушыны орнату

Зейін қойып оқитын оқырман оның қайдан шыққанына таң қалуы мүмкін prometheus-jmx.yaml? JVM жүйесінде жұмыс істей алатын көптеген әртүрлі нәрселер бар, және tomcat солардың бірі ғана, сондықтан экспорттаушыға қосымша конфигурация қажет. Tomcat, wildfly, kafka және т.б. үшін стандартты конфигурациялар қол жетімді осында. Біз tomcat ретінде қосамыз ConfigMap Kubernetes ішінде, содан кейін оны том ретінде орнатыңыз.

Біріншіден, біз экспорттаушы конфигурация файлын платформа/config/ каталогына қосамыз

platform/config
└── prometheus-jmx.yaml

Сосын қосамыз ConfigMapGenerator в kustomization.yaml.tmpl:

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

Бұл әрбір элементті қосады files[] ConfigMap конфигурация элементі ретінде. ConfigMapGenerators тамаша, өйткені олар конфигурация деректерін хэштейді және өзгерсе, подкастты қайта іске қосуға мәжбүр етеді. Олар сондай-ақ Орналастырудағы конфигурация көлемін азайтады, өйткені конфигурация файлдарының толық «қалтасын» бір VolumeMount жүйесінде орнатуға болады.

Соңында, ConfigMap файлын подводқа том ретінде орнату керек:

-- 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
[...]

Керемет. Егер Prometheus толық тазалауды орындауға конфигурацияланбаған болса, оған түйіршіктерді тазалауды айту керек болуы мүмкін. Prometheus Operator пайдаланушылары пайдалана алады service-monitor.yaml бастау үшін. Зерттеу Service-monitor.yaml, оператор дизайны и ServiceMonitorSpec бастамас бұрын.

Бұл үлгіні басқа пайдалану жағдайларына кеңейту

ConfigMapGenerator бағдарламасына қосатын барлық файлдар жаңа каталогта қолжетімді болады /etc/config. Бұл үлгіні қажет кез келген басқа конфигурация файлдарын орнату үшін кеңейтуге болады. Сіз тіпті жаңа іске қосу сценарийін орната аласыз. Сіз пайдалана аласыз subPath жеке файлдарды орнату үшін. xml файлдарын жаңарту үшін пайдалануды қарастырыңыз xmlstarlet sed орнына. Ол қазірдің өзінде суретке енгізілген.

Журналдар

Керемет жаңалық! Қолданба журналдары stdout жүйесінде бұрыннан бар, мысалы kubectl logs. Fluentd (GKE жүйесінде әдепкі бойынша орнатылған) журналдарыңызды Elasticsearch, Loki немесе кәсіпорын журналын жүргізу платформасына жібереді. Журналдар үшін jsonify пайдаланғыңыз келсе, орнату үшін жоғарыдағы үлгіні орындауға болады кері кіру.

Мәліметтер базасы

Әдепкі бойынша, кескінде H2 дерекқоры болады. Бұл бізге жарамайды және біз Google Cloud SQL Cloud SQL прокси-серверімен бірге қолданамыз - бұл ішкі мәселелерді шешу үшін кейінірек қажет болады. Бұл дерекқорды орнатуда өзіңіздің қалауыңыз болмаса, қарапайым және сенімді опция. AWS RDS ұқсас қызметті ұсынады.

Сіз таңдаған дерекқорға қарамастан, егер ол H2 болмаса, сізге сәйкес орта айнымалы мәндерін орнату қажет. 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
[...]

ескерту: қабаттасуды пайдаланып әртүрлі орталарға орналастыру үшін Kustomize қолданбасын пайдалануға болады: мысал.

ескерту: қолдану valueFrom: secretKeyRef. Өтінемін, қолданыңыз бұл Kubernetes мүмкіндігі құпияларыңызды қауіпсіз сақтау үшін әзірлеу кезінде де.

Сізде Kubernetes құпияларын басқарудың таңдаулы жүйесі бар болуы мүмкін. Олай болмаса, міне, кейбір опциялар: оларды бұлттық провайдеріңіздің KMS арқылы шифрлау, содан кейін оларды CD құбыры арқылы құпия ретінде K8S ішіне енгізу - Mozilla SOPS - Kustomize құпияларымен үйлескенде өте жақсы жұмыс істейді. Ұқсас функцияларды орындайтын dotGPG сияқты басқа құралдар бар: HashiCorp қоймасы, Құпия мән плагиндерін теңшеңіз.

Кіріс

Жергілікті портты қайта жіберуді пайдалануды таңдамасаңыз, конфигурацияланған кіріс контроллері қажет болады. Егер сіз қолданбасаңыз кіру-nginx (Руль диаграммасы) онда қажетті аннотацияларды орнату қажет екенін білетін шығарсыз ingress-patch.yaml.tmpl немесе platform/ingress.yaml. Егер сіз ingress-nginx қолданып жатсаңыз және оған нұсқайтын жүктеме теңестірушісі және сыртқы DNS немесе қойылмалы DNS жазбасы бар nginx кіру сыныбын көрсеңіз, баруға болады. Әйтпесе, кіріс контроллері мен DNS конфигурациясын жасаңыз немесе осы қадамдарды өткізіп жіберіп, подкастпен тікелей байланысты сақтаңыз.

TLS

Егер сіз пайдалансаңыз сертификат-менеджер немесе kube-lego және letsencrypt - жаңа логин үшін сертификаттар автоматты түрде алынады. Әйтпесе, ашыңыз ingress-patch.yaml.tmpl және оны қажеттіліктеріңізге сәйкес реттеңіз.

Іске қосу!

Егер сіз жоғарыда жазылғандардың бәрін орындасаңыз, онда пәрмен make skaffold HOSTNAME=<you.example.com> ішінде қолжетімді дананы іске қосу керек <hostname>/camunda

Егер сіз логиніңізді жалпыға қолжетімді URL мекенжайына орнатпасаңыз, оны арқылы қайта бағыттауға болады localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 туралы localhost:8080/camunda

Томкат толығымен дайын болғанша бірнеше минут күтіңіз. Сертификаттау менеджеріне домен атауын тексеру үшін біраз уақыт қажет. Содан кейін сіз kubetail сияқты құрал немесе жай kubectl көмегімен қол жетімді құралдарды пайдаланып журналдарды бақылай аласыз:

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

Келесі қадамдар

Авторизация

Бұл Kubernetes-ке қарағанда Camunda BPM конфигурациясына көбірек қатысты, бірақ әдепкі бойынша REST API ішінде аутентификация өшірілгенін ескеру маңызды. Сен істе аласың негізгі аутентификацияны қосыңыз немесе басқа әдісті қолданыңыз J.W.T.. xml жүктеу үшін конфигурация карталары мен томдарды немесе кескіндегі бар файлдарды өңдеу үшін xmlstarlet (жоғарыдан қараңыз) пайдалана аласыз және wget пайдалана аласыз немесе оларды init контейнері мен ортақ көлемді пайдаланып жүктей аласыз.

Сеансты басқару

Көптеген басқа қолданбалар сияқты, Camunda BPM сеанстарды JVM жүйесінде өңдейді, сондықтан бірнеше көшірмелерді іске қосқыңыз келсе, жабысқақ сеанстарды қосуға болады (мысалы, ingress-nginx үшін), ол көшірме жойылғанша болады немесе cookie файлдары үшін Max-Age төлсипатын орнатыңыз. Неғұрлым сенімді шешім үшін Tomcat жүйесінде сеанс менеджерін орналастыруға болады. Ларс бар бөлек пост осы тақырып бойынша, бірақ бір нәрсе:

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

ескерту: sed орнына xmlstarlet пайдалануға болады

пайдаландық твмпрокси Google Cloud Memorystore алдында, бірге memcached-session-менеджер оны іске қосу үшін (Redis-ті қолдайды).

Масштабтау

Егер сіз сеанстарды әлдеқашан түсінсеңіз, Camunda BPM масштабтауының бірінші (және көбінесе соңғы) шектеуі дерекқорға қосылу болуы мүмкін. Ішінара теңшеу қазірдің өзінде қолжетімді »қораптан" Сондай-ақ settings.xml файлында intialSize өшірейік. қосу Көлденең Pod автоматты масштабтауыш (HPA) және сіз блоктардың санын оңай автоматты түрде масштабтай аласыз.

Өтініштер мен шектеулер

В platform/deployment.yaml Сіз ресурстар өрісін қатаң кодтағанымызды көресіз. Бұл HPA-мен жақсы жұмыс істейді, бірақ қосымша конфигурация қажет болуы мүмкін. Бұл үшін kustomize патч қолайлы. См. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

қорытынды

Сонымен, біз Prometheus метрикасымен, журналдарымен, H2 дерекқорымен, TLS және Ingress көмегімен Kubernetes жүйесіне Camunda BPM орнаттық. ConfigMaps және Dockerfile көмегімен jar файлдары мен конфигурация файлдарын қостық. Біз деректерді көлемдерге және құпиялардан тікелей қоршаған орта айнымалыларына алмасу туралы айттық. Бұған қоса, біз бірнеше репликалар және аутентификацияланған API үшін Camunda орнатуға шолу жасадық.

сілтемелер

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, аударма мақалалар Аластэр Ферт, Ларс Ланге

Ақпарат көзі: www.habr.com

пікір қалдыру