Kubernetes ã䜿çšããŠããŸãã? Camunda BPM ã€ã³ã¹ã¿ã³ã¹ãä»®æ³ãã·ã³ãã移åããæºåã¯ã§ããŠããŸãã? ãããšããKubernetes äžã§å®è¡ããŠã¿ãŠã¯ãããã§ãã? ããã€ãã®äžè¬çãªæ§æãšãç¹å®ã®ããŒãºã«åãããŠã«ã¹ã¿ãã€ãºã§ããåå¥ã®é ç®ãèŠãŠã¿ãŸãããã
以åã« Kubernetes ã䜿çšããããšãããããšãåæãšãªã£ãŠããŸãã ããã§ãªãå Žåã¯ãèŠãŠã¿ãŠã¯ãããã§ãããã
èè
ã¢ã©ã¹ãã¢ã»ãã¡ãŒã¹ (Alastair Firth) - Camunda Cloud ããŒã ã®ã·ã㢠ãµã€ãä¿¡é Œæ§ãšã³ãžãã¢ãã©ãŒã¹ã»ã©ã³ã² (Lars Lange) - Camunda ã® DevOps ãšã³ãžãã¢ã
èŠããã«ã
git clone https://github.com/camunda-cloud/camunda-examples.git
cd camunda-examples/camunda-bpm-demo
make skaffold
skaffold ãš kusTOMize ãã€ã³ã¹ããŒã«ãããŠããªããããããããæ©èœããŸããã§ããã ããã§ã¯ç¶ããèªãã§ãã ããïŒ
ã«ã ã³ãBPMãšã¯
Camunda BPM ã¯ãããžãã¹ ãŠãŒã¶ãŒãšãœãããŠã§ã¢éçºè
ãçµã³ä»ããããªãŒãã³ãœãŒã¹ã®ããžãã¹ ããã»ã¹ç®¡çããã³ææ決å®èªååãã©ãããã©ãŒã ã§ãã 人ã
ã(ãã€ã¯ã) ãµãŒãã¹ãããã«ã¯ãããã調æŽãæ¥ç¶ããã®ã«æé©ã§ãã ããŸããŸãªäœ¿çšäŸã®è©³çŽ°ã«ã€ããŠã¯ã次㮠Web ãµã€ããåç
§ããŠãã ããã
Kubernetes ã䜿çšããçç±
Kubernetes ã¯ãLinux äžã§ææ°ã®ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã®äºå®äžã®æšæºã«ãªã£ãŠããŸãã ããŒããŠã§ã¢ ãšãã¥ã¬ãŒã·ã§ã³ã®ä»£ããã«ã·ã¹ãã ã³ãŒã«ã䜿çšããã¡ã¢ãªãšã¿ã¹ã¯ã®åãæ¿ãã管çããã«ãŒãã«ã®æ©èœã䜿çšããããšã«ãããããŒãæéãšèµ·åæéãæå°éã«æããããŸãã ãã ããæ倧ã®å©ç¹ã¯ãã¹ãã¬ãŒãžããããã¯ãŒãã³ã°ãç£èŠãªã©ããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã«å¿ èŠãªã€ã³ãã©ã¹ãã©ã¯ãã£ãæ§æããããã« Kubernetes ãæäŸããæšæº API ããåŸãããå¯èœæ§ããããŸãã 2020 幎 6 æ㧠XNUMX åšå¹Žãè¿ãããããã (Linux ã«æ¬¡ã) XNUMX çªç®ã«å€§ããªãªãŒãã³ãœãŒã¹ ãããžã§ã¯ãã§ãã äžçäžã®éçšã¯ãŒã¯ããŒãã«ãšã£ãŠéèŠã«ãªã£ãŠãããããéå»æ°å¹Žéã®æ¥éãªå埩ãçµãŠãæè¿ã§ã¯ãã®æ©èœã®å®å®åã«ç©æ¥µçã«åãçµãã§ããŸãã
Camunda BPM Engine ã¯ãåãã¯ã©ã¹ã¿ãŒäžã§å®è¡ãããŠããä»ã®ã¢ããªã±ãŒã·ã§ã³ã«ç°¡åã«æ¥ç¶ã§ããKubernetes ã¯åªããã¹ã±ãŒã©ããªãã£ãæäŸãããããæ¬åœã«å¿ èŠãªå Žåã«ã®ã¿ã€ã³ãã©ã¹ãã©ã¯ã㣠ã³ã¹ããå¢ããããšãã§ããŸã (å¿ èŠã«å¿ããŠç°¡åã«åæžã§ããŸã)ã
PrometheusãGrafanaãLokiãFluentdãElasticsearch ãªã©ã®ããŒã«ã«ãã£ãŠã¢ãã¿ãªã³ã°ã®å質ãå€§å¹ ã«åäžããã¯ã©ã¹ã¿ãŒå ã®ãã¹ãŠã®ã¯ãŒã¯ããŒããäžå çã«è¡šç€ºã§ããããã«ãªããŸãã ä»æ¥ã¯ãPrometheus ãšã¯ã¹ããŒã¿ãŒã Java ä»®æ³ãã·ã³ (JVM) ã«å®è£ ããæ¹æ³ãèŠãŠãããŸãã
ç®æš
Camunda BPM Docker ã€ã¡ãŒãžãã«ã¹ã¿ãã€ãºã§ããããã€ãã®é åãèŠãŠã¿ãŸããã (
- ãã°ãšã¡ããªã¯ã¹ã
- ããŒã¿ããŒã¹æ¥ç¶ã
- èªèšŒ;
- ã»ãã·ã§ã³ç®¡çã
ãããã®ç®æšãéæããããã®ããã€ãã®æ¹æ³ãæ€èšããããã»ã¹å šäœãæ確ã«ç€ºããŸãã
泚æ: Enterprise ããŒãžã§ã³ã䜿çšããŠããŸãã? èŠãŠ
ã¯ãŒã¯ãããŒéçº
ãã®ãã¢ã§ã¯ãSkaffold ã䜿çšããŠãGoogle Cloud Build ã䜿çšã㊠Docker ã€ã¡ãŒãžãæ§ç¯ããŸãã ããŸããŸãªããŒã« (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 ã«çµã¿èŸŒãŸããŠããããã®ãããªçšéã«ã¯éåžžã«ããŸãæ©èœããŸãã
ãŸããenvsubst ã䜿çšããŠã*.yaml.tmpl ãã¡ã€ã«ã«ãã¹ãåãš GCP ãããžã§ã¯ã ID ãå
¥åããŸãã ãããã©ã®ããã«æ©èœããããèŠãããšãã§ããŸã makefile
ãŸãã¯ããã«ç¶è¡ããŸãã
åææ¡ä»¶
- äœæ¥ã¯ã©ã¹ã¿ãŒ
Kubernetes ã«ã¹ã¿ãã€ãº è¶³å Ž - ç¬èªã® Docker ã€ã¡ãŒãžãäœæããGKE ã«ç°¡åã«ãããã€ãããã- ãã®ã³ãŒãã®ã³ããŒ
- ç°å¢ãµãã¹ã
ãããã§ã¹ãã䜿çšããã¯ãŒã¯ãããŒ
kusTOMize ãŸã㯠skaffold ã䜿çšããããªãå Žåã¯ã次ã®ãããã§ã¹ããåç
§ã§ããŸãã generated-manifest.yaml
éžæããã¯ãŒã¯ãããŒã«é©å¿ãããŸãã
ãã°ãšã¡ããªã¯ã¹
Prometheus ã¯ãKubernetes ã§ã¡ããªã¯ã¹ãåéããããã®æšæºã«ãªã£ãŠããŸãã ããã¯ãAWS Cloudwatch MetricsãCloudwatch AlertsãStackdriver MetricsãStatsDãDatadogãNagiosãvSphere Metrics ãªã©ãšåãããããªåéãå ããŠããŸãã ããã¯ãªãŒãã³ãœãŒã¹ã§ããã匷åãªã¯ãšãªèšèªãåããŠããŸãã èŠèŠå㯠Grafana ã«ä»»ããŸãã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 ã¯ãã®ãã¡ã® XNUMX ã€ã«ãããªãããããšã¯ã¹ããŒã¿ãŒã«ã¯è¿œå ã®æ§æãå¿
èŠã§ãã TomcatãWildflyãKafka ãªã©ã®æšæºæ§æãå©çšå¯èœ
ãŸãããšã¯ã¹ããŒã¿ãŒèšå®ãã¡ã€ã«ã platform/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 ã¯ãæ§æããŒã¿ãããã·ã¥ããå€æŽãããå Žåã«ãããã®åèµ·åã匷å¶ãããããåªããŠããŸãã ãŸããæ§æãã¡ã€ã«ã®ããã©ã«ããŒãå
šäœã XNUMX ã€ã® 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 ãå®å
šãªã¯ãªãŒã³ã¢ãããå®è¡ããããã«æ§æãããŠããªãå Žåã¯ãPod ãã¯ãªãŒã³ã¢ããããããã«æ瀺ããå¿
èŠãããå ŽåããããŸãã Prometheus Operator ãŠãŒã¶ãŒã䜿çšã§ããã®ã¯ service-monitor.yaml
å§ããããã«ã æ¢æ€ãã Service-monitor.yaml
,
ãã®ãã¿ãŒã³ãä»ã®ãŠãŒã¹ã±ãŒã¹ã«æ¡åŒµãã
ConfigMapGenerator ã«è¿œå ãããã¹ãŠã®ãã¡ã€ã«ã¯ãæ°ãããã£ã¬ã¯ããªã§äœ¿çšã§ããããã«ãªããŸãã /etc/config
ã ãã®ãã³ãã¬ãŒããæ¡åŒµããŠãå¿
èŠãªä»ã®æ§æãã¡ã€ã«ãããŠã³ãããããšãã§ããŸãã æ°ããèµ·åã¹ã¯ãªãããããŠã³ãããããšãã§ããŸãã 䜿çšã§ããŸã
éèª
çŽ æŽããããã¥ãŒã¹ïŒ ã¢ããªã±ãŒã·ã§ã³ ãã°ã¯ãã§ã«æšæºåºåã§å©çšå¯èœã§ããããšãã°ã kubectl logs
ã FluentdïŒGKE ã«ããã©ã«ãã§ã€ã³ã¹ããŒã«ãããŸãïŒã¯ããã°ã ElasticsearchãLokiããŸãã¯ãšã³ã¿ãŒãã©ã€ãº ãã° ãã©ãããã©ãŒã ã«è»¢éããŸãã ãã°ã« jsonify ã䜿çšãããå Žåã¯ãäžèšã®ãã³ãã¬ãŒãã«åŸã£ãŠã€ã³ã¹ããŒã«ã§ããŸãã
ããŒã¿ããŒã¹
ããã©ã«ãã§ã¯ãã€ã¡ãŒãžã«ã¯ H2 ããŒã¿ããŒã¹ãå«ãŸããŸãã ããã¯ç§ãã¡ã«ã¯é©ããŠããªããããGoogle Cloud SQL ãš Cloud SQL Proxy ã䜿çšããŸããããã¯åŸã§å éšåé¡ã解決ããããã«å¿ èŠã«ãªããŸãã ããŒã¿ããŒã¹ã®èšå®ã«ç¬èªã®èšå®ããªãå Žåãããã¯ã·ã³ãã«ã§ä¿¡é Œæ§ã®é«ããªãã·ã§ã³ã§ãã 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 ã³ã³ãããŒã©ãŒãå¿
èŠã«ãªããŸãã 䜿çšããªãå Žå ingress-patch.yaml.tmpl
ãŸã㯠platform/ingress.yaml
ã ingress-nginx ã䜿çšããŠããŠãããŒã ãã©ã³ãµãŒããããæããŠãã nginx ingress ã¯ã©ã¹ãšãå€éš DNS ãŸãã¯ã¯ã€ã«ãã«ãŒã DNS ãšã³ããªã衚瀺ãããã°ãåé¡ãããŸããã ãã以å€ã®å Žåã¯ãã€ã³ã°ã¬ã¹ ã³ã³ãããŒã©ãŒãš 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 ãããã¯ããã«é©ããŠããŸãã Cmã ingress-patch.yaml.tmpl О ./kustomization.yaml.tmpl
åºå
ããã§ãPrometheus ã¡ããªã¯ã¹ããã°ãH2 ããŒã¿ããŒã¹ãTLSãIngress ãåãã Camunda BPM ã Kubernetes ã«ã€ã³ã¹ããŒã«ããŸããã 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ã翻蚳
åºæïŒ habr.com