ඔබ Kubernetes භාවිතා කරන්නේද? ඔබේ Camunda BPM නිදසුන් අතථ්ය යන්ත්රවලින් පිටතට ගෙන යාමට සූදානම්ද, නැතහොත් ඒවා Kubernetes මත ධාවනය කිරීමට උත්සාහ කළ හැකිද? ඔබගේ විශේෂිත අවශ්යතා සඳහා සකස් කළ හැකි පොදු වින්යාසයන් සහ තනි අයිතම කිහිපයක් බලමු.
ඔබ මීට පෙර Kubernetes භාවිතා කර ඇති බව උපකල්පනය කරයි. එසේ නොවේ නම්, ඇයි බලන්න
කතුවරුන්
ඇලෙස්ටෙයාර් ෆර්ත් (ඇලෙස්ටෙයාර් ෆර්ත්) - Camunda Cloud කණ්ඩායමේ ජ්යෙෂ්ඨ අඩවි විශ්වසනීය ඉංජිනේරු;Lars Lange (Lars Lange) - Camunda හි DevOps ඉංජිනේරු.
කෙටියෙන්:
git clone https://github.com/camunda-cloud/camunda-examples.git
cd camunda-examples/camunda-bpm-demo
make skaffold
හරි, ඔබ සතුව පලඳනාවක් සහ kustomize ස්ථාපනය කර නොමැති නිසා එය බොහෝ විට ක්රියා නොකළේය. හොඳයි එහෙනම් කියවන්න!
Camunda BPM යනු කුමක්ද?
Camunda BPM යනු ව්යාපාරික පරිශීලකයින් සහ මෘදුකාංග සංවර්ධකයින් සම්බන්ධ කරන විවෘත මූලාශ්ර ව්යාපාර ක්රියාවලි කළමනාකරණය සහ තීරණ ස්වයංක්රීයකරණ වේදිකාවකි. පුද්ගලයන්, (ක්ෂුද්ර) සේවා හෝ බොට් පවා සම්බන්ධීකරණය කිරීම සහ සම්බන්ධ කිරීම සඳහා එය ඉතා සුදුසුය! ඔබට විවිධ භාවිත අවස්ථා පිළිබඳ වැඩිදුර කියවිය හැකිය
ඇයි Kubernetes භාවිතා කරන්නේ
Linux මත නවීන යෙදුම් ධාවනය සඳහා Kubernetes තථ්ය ප්රමිතිය බවට පත්ව ඇත. දෘඪාංග අනුකරණය වෙනුවට පද්ධති ඇමතුම් භාවිතා කිරීමෙන් සහ මතකය සහ කාර්ය මාරු කිරීම කළමනාකරණය කිරීමට කර්නලයට ඇති හැකියාව, ඇරඹුම් කාලය සහ ආරම්භක කාලය අවම මට්ටමක තබා ඇත. කෙසේ වෙතත්, සියලුම යෙදුම් සඳහා අවශ්ය යටිතල පහසුකම් වින්යාස කිරීමට Kubernetes සපයන සම්මත API වෙතින් විශාලතම ප්රතිලාභය ලැබිය හැකිය: ගබඩා කිරීම, ජාලකරණය සහ අධීක්ෂණය. එය 2020 ජූනි මාසයේදී වසර 6ක් පිරුණු අතර සමහර විට දෙවන විශාලතම විවෘත කේත ව්යාපෘතිය (ලිනක්ස් වලින් පසුව) විය හැක. එය ලොව පුරා නිෂ්පාදන කාර්ය භාරයට තීරනාත්මක වන බැවින් පසුගිය වසර කිහිපය තුළ වේගවත් පුනරාවර්තනයෙන් පසුව එහි ක්රියාකාරීත්වය සක්රීයව ස්ථාවර කර ඇත.
Camunda BPM එන්ජිමට එකම පොකුරේ ක්රියාත්මක වන අනෙකුත් යෙදුම් වෙත පහසුවෙන් සම්බන්ධ විය හැකි අතර, Kubernetes විශිෂ්ට පරිමාණයක් සපයයි, ඇත්ත වශයෙන්ම අවශ්ය වූ විට පමණක් යටිතල පහසුකම් පිරිවැය වැඩි කිරීමට ඔබට ඉඩ සලසයි (සහ අවශ්ය පරිදි ඒවා පහසුවෙන් අඩු කරන්න).
Prometheus, Grafana, Loki, Fluentd සහ Elasticsearch වැනි මෙවලම් සමඟින් අධීක්ෂණයේ ගුණාත්මක භාවය ද බෙහෙවින් වැඩි දියුණු කර ඇති අතර, ඔබට පොකුරක් තුළ ඇති සියලුම වැඩ බර මධ්යගතව බැලීමට ඉඩ සලසයි. අද අපි බලමු Prometheus exporter එක Java Virtual Machine (JVM) එකට ක්රියාත්මක කරන්නේ කොහොමද කියලා.
අරමුණු
අපි Camunda BPM Docker රූපය අභිරුචිකරණය කළ හැකි ප්රදේශ කිහිපයක් බලමු (
- ලඝු-සටහන් සහ මිනුම්;
- දත්ත සමුදා සම්බන්ධතා;
- සත්යාපනය;
- සැසි කළමනාකරණය.
මෙම අරමුණු සාක්ෂාත් කර ගැනීම සඳහා ක්රම කිහිපයක් දෙස බලා සම්පූර්ණ ක්රියාවලිය පැහැදිලිව පෙන්වමු.
අදහස් දැක්වීම්: ඔබ භාවිතා කරන්නේ ව්යවසාය අනුවාදයද? බලන්න
කාර්ය ප්රවාහ සංවර්ධනය
මෙම demo තුළ, අපි 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 සැකිලි සඳහා, අපි ඔබට භාවිතා කිරීමට ඉඩ සලසමින්, සම්පූර්ණ මැනිෆෙස්ටයම දෙබලකින් තොරව yaml overlays කළමනාකරණය කිරීමට kustomize භාවිතා කරමු. git pull --rebase
තවදුරටත් වැඩිදියුණු කිරීම් සඳහා. දැන් එය kubectl වල ඇති අතර එය එවැනි දේවල් සඳහා හොඳින් ක්රියා කරයි.
අපි *.yaml.tmpl ගොනු තුළ සත්කාරක නාමය සහ GCP ව්යාපෘති ID පුරවා ගැනීමට envsubst භාවිතා කරමු. එය ක්රියාත්මක වන ආකාරය ඔබට දැක ගත හැක makefile
නැතහොත් තවදුරටත් ඉදිරියට යන්න.
අවශ්ය කොන්දේසි
- වැඩ පොකුර
කුබර්නෙට්ස් අභිරුචිකරණය කරන්න Skaffold - ඔබේම ඩොකර් රූප නිර්මාණය කිරීම සහ 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 තුළ වඩාත් හොඳින් ලොග් වී ඇත, එබැවින් පැති කාර් බහාලුම් එතරම් කාර්යක්ෂම නොවේ. අපි සම්බන්ධ වෙමු /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 සහ යනාදිය සඳහා සම්මත වින්යාසයන් තිබේ
පළමුව, අපි අපගේ වේදිකාව/config/ බහලුම වෙත අපනයනකරු වින්යාස ගොනුව එක් කරන්නෙමු
platform/config
└── prometheus-jmx.yaml
ඊට පස්සේ අපි එකතු කරනවා kustomization.yaml.tmp
l:
-- platform/kustomization.yaml.tmpl
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
[...]
configMapGenerator:
- name: config
files:
- config/prometheus-jmx.yaml
මෙය එක් එක් අංග එකතු කරනු ඇත files[]
ConfigMap වින්යාස අංගයක් ලෙස. ConfigMapGenerators වින්යාස දත්ත හෑෂ් කර එය වෙනස් වුවහොත් පොඩ් නැවත ආරම්භ කිරීමට බල කරන නිසා විශිෂ්ටයි. ඔබට එක් VolumeMount එකක වින්යාස ගොනු වල සම්පූර්ණ "ෆෝල්ඩරයක්" සවි කළ හැකි බැවින් ඒවා යෙදවීමේ වින්යාස ප්රමාණය ද අඩු කරයි.
අවසාන වශයෙන්, අපි Pod එකට පරිමාවක් ලෙස 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
,
මෙම රටාව වෙනත් භාවිත අවස්ථා සඳහා දීර්ඝ කිරීම
අපි ConfigMapGenerator වෙත එක් කරන සියලුම ගොනු නව ඩිරෙක්ටරිය තුළ ලබා ගත හැක /etc/config
. ඔබට අවශ්ය වෙනත් ඕනෑම වින්යාස ගොනු සවි කිරීමට ඔබට මෙම අච්චුව දිගු කළ හැක. ඔබට නව ආරම්භක ස්ක්රිප්ට් එකක් පවා සවි කළ හැක. ඔයාට පාවිච්චි කරන්න පුළුවන්
සඟරා
හොඳ ආරංචියක්! යෙදුම් ලොග දැනටමත් stdout හි ඇත, උදාහරණයක් ලෙස සමඟ kubectl logs
. Fluentd (GKE හි පෙරනිමියෙන් ස්ථාපනය කර ඇත) ඔබගේ ලඝු-සටහන් Elasticsearch, Loki, හෝ ඔබේ ව්යවසාය ලොග් කිරීමේ වේදිකාව වෙත යොමු කරනු ඇත. ඔබට ලොග් සඳහා jsonify භාවිතා කිරීමට අවශ්ය නම්, ඔබට ස්ථාපනය කිරීමට ඉහත අච්චුව අනුගමනය කළ හැක
දත්ත සමුදාය
පෙරනිමියෙන්, රූපයට H2 දත්ත සමුදායක් ඇත. මෙය අපට සුදුසු නොවන අතර, අපි Cloud SQL Proxy සමඟ Google 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 රහස් කළමනාකරණය කිරීම සඳහා කැමති පද්ධතියක් තිබෙන්නට ඇත. එසේ නොවේ නම්, මෙන්න විකල්ප කිහිපයක්: ඒවා ඔබේ වලාකුළු සපයන්නාගේ KMS සමඟ සංකේතනය කර CD නල මාර්ගය හරහා රහස් ලෙස K8S වෙත එන්නත් කිරීම -
ආක්රමණය
ඔබ දේශීය වරාය යොමු කිරීම භාවිතා කිරීමට තෝරා ගන්නේ නම් මිස, ඔබට වින්යාස කළ ඇතුල්වීමේ පාලකයක් අවශ්ය වේ. ඔබ භාවිතා නොකරන්නේ නම් ingress-patch.yaml.tmpl
හෝ platform/ingress.yaml
. ඔබ ingress-nginx භාවිතා කරන්නේ නම් සහ ලෝඩ් බැලන්සර් එකක් සහ බාහිර DNS හෝ වයිල්ඩ්කාඩ් DNS ප්රවේශයක් සහිත nginx ඇතුල් වීමේ පන්තියක් දකින්නේ නම්, ඔබ යන්න හොඳයි. එසේ නොමැතිනම්, Ingress Controller සහ DNS වින්යාස කරන්න, නැතහොත් මෙම පියවර මඟ හැර පෝඩ් වෙත සෘජු සම්බන්ධතාවය තබා ගන්න.
TLS
ඔබ භාවිතා කරන්නේ නම් 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
Tomcat සම්පූර්ණයෙන්ම සූදානම් වන තෙක් මිනිත්තු කිහිපයක් රැඳී සිටින්න. Cert-manager වසම් නාමය සත්යාපනය කිරීමට යම් කාලයක් ගතවනු ඇත. එවිට ඔබට kubetail වැනි මෙවලමක් හෝ සරලව kubectl භාවිතයෙන් පවතින මෙවලම් භාවිතයෙන් ලඝු-සටහන් නිරීක්ෂණය කළ හැක:
kubectl logs -n camunda-bpm-demo $(kubectl get pods -o=name -n camunda-bpm-demo) -f
ඊළඟ පියවර
අවසරය
මෙය Kubernetes වලට වඩා Camunda BPM වින්යාස කිරීමට වඩාත් අදාළ වේ, නමුත් පෙරනිමියෙන්, REST API තුළ සත්යාපනය අක්රිය කර ඇති බව සැලකිල්ලට ගැනීම වැදගත්ය. ඔයාට පුළුවන්
සැසි කළමනාකරණය
වෙනත් බොහෝ යෙදුම් මෙන්, Camunda BPM JVM හි සැසි හසුරුවයි, එබැවින් ඔබට බහු අනුරූ ධාවනය කිරීමට අවශ්ය නම්, ඔබට ඇලෙන සුළු සැසි සක්රීය කළ හැක (
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 භාවිතා කළ හැක
අපි පාවිච්චි කළා
පරිමාණ කිරීම
ඔබ දැනටමත් සැසි තේරුම් ගෙන තිබේ නම්, Camunda BPM පරිමාණය කිරීමේ පළමු (සහ බොහෝ විට අවසාන) සීමාව දත්ත සමුදායට සම්බන්ධ වීම විය හැකිය. අර්ධ අභිරුචිකරණය දැනටමත් පවතී "
ඉල්ලීම් සහ සීමා කිරීම්
В 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/XNUMX/XNUMX, පරිවර්තනය
මූලාශ්රය: www.habr.com