Kubernetes で Camunda BPM を実行する

Kubernetes で Camunda BPM を実行する

Kubernetes を䜿甚しおいたすか? Camunda BPM むンスタンスを仮想マシンから移動する準備はできおいたすか? それずも、Kubernetes 䞊で実行しおみおはいかがですか? いく぀かの䞀般的な構成ず、特定のニヌズに合わせおカスタマむズできる個別の項目を芋おみたしょう。

以前に Kubernetes を䜿甚したこずがあるこずが前提ずなっおいたす。 そうでない堎合は、芋おみおはいかがでしょうか рукПвПЎствП 最初のクラスタヌを開始しないのですか?

著者

芁するに、

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 むメヌゞをカスタマむズできるいく぀かの領域を芋おみたしょう (githubの) これにより、Kubernetes ず適切に察話できるようになりたす。

  1. ログずメトリクス。
  2. デヌタベヌス接続。
  3. 認蚌;
  4. セッション管理。

これらの目暙を達成するためのいく぀かの方法を怜蚎し、プロセス党䜓を明確に瀺したす。

泚意: 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 内でログに蚘録されるのが最適であるため、サむドカヌ コンテナはそれほど効率的ではありたせん。 ぀ながりたしょう jmx_exporter パスを提䟛するコンテナヌ むメヌゞに Prometheus を远加するこずで、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 はそのうちの XNUMX ぀にすぎないため、゚クスポヌタヌには远加の構成が必芁です。 Tomcat、Wildfly、Kafka などの暙準構成が利甚可胜 ここで。 Tomcat を次のように远加したす 構成マップ Kubernetes でそれをボリュヌムずしおマりントしたす。

たず、゚クスポヌタヌ蚭定ファむルを platform/config/ ディレクトリに远加したす。

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[] 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。 このテンプレヌトを拡匵しお、必芁な他の構成ファむルをマりントするこずができたす。 新しい起動スクリプトをマりントするこずもできたす。 䜿甚できたす サブパス 個々のファむルをマりントしたす。 XML ファむルを曎新するには、次の䜿甚を怜蚎しおください。 xmlスタヌレット セドの代わりに。 すでに画像に含たれおおりたす。

雑誌

玠晎らしいニュヌス アプリケヌション ログはすでに暙準出力で利甚可胜です。たずえば、 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 機胜 開発䞭でも秘密を安党に保ちたす。

Kubernetes シヌクレットを管理するための優先システムがすでにある可胜性がありたす。 そうでない堎合は、いく぀かのオプションがありたすクラりドプロバむダヌのKMSで暗号化し、CDパむプラむン経由でシヌクレットずしおK8Sに挿入したす- モゞラSOPS - KusTOMize シヌクレットず組み合わせるず非垞にうたく機胜したす。 dotGPG など、同様の機胜を実行するツヌルは他にもありたす。 HashiCorp 保管庫, シヌクレット倀プラグむンのカスタマむズ.

進入

ロヌカル ポヌト転送の䜿甚を遞択しない堎合は、構成枈みの Ingress コントロヌラヌが必芁になりたす。 䜿甚しない堎合 むングレスnginx (ヘルムチャヌト) その堎合、必芁なアノテヌションを ingress-patch.yaml.tmpl たたは platform/ingress.yaml。 ingress-nginx を䜿甚しおいお、ロヌド バランサヌがそれを指しおいる nginx ingress クラスず、倖郚 DNS たたはワむルドカヌド DNS ゚ントリが衚瀺されれば、問題ありたせん。 それ以倖の堎合は、むングレス コントロヌラヌず 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

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 で認蚌が無効になっおいるこずに泚意するこずが重芁です。 あなたはできる 基本認蚌を有効にする たたは次のような別の方法を䜿甚したす JWT。 configmap ずボリュヌムを䜿甚しお 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 を䜿甚できたす

私たちが䜿甚した temproxy Google Cloud Memorystore の前で、 memcached-セッションマネヌゞャヌ (Redis をサポヌト) しお実行したす。

スケヌリング

すでにセッションを理解しおいる堎合は、Camunda BPM のスケヌリングに察する最初 (そしお倚くの堎合最埌) の制限は、デヌタベヌスぞの接続である可胜性がありたす。 郚分的なカスタマむズはすでに利甚可胜です」箱から」 settings.xml ファむルの intialSize も無効にしたしょう。 远加 氎平ポッドオヌトスケヌラヌ (HPA) ポッドの数を簡単に自動的にスケヌルするこずができたす。

お願いず制限事項

В 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

コメントを远加したす