你在使用 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 是一個開源業務流程管理和決策自動化平台,連接業務用戶和軟體開發人員。 它非常適合協調和連接人員、(微)服務甚至機器人! 您可以閱讀有關不同用例的更多資訊:
為什麼要使用 Kubernetes
Kubernetes 已成為在 Linux 上運行現代應用程式的事實上的標準。 透過使用系統呼叫而不是硬體模擬以及核心管理記憶體和任務切換的能力,引導時間和啟動時間都保持在最低限度。 然而,最大的好處可能來自 Kubernetes 提供的標準 API,用於配置所有應用程式所需的基礎架構:儲存、網路和監控。 它於 2020 年 6 月迎來了 XNUMX 歲生日,可能是第二大開源專案(僅次於 Linux)。 經過過去幾年的快速迭代,它最近一直在積極穩定其功能,因為它對世界各地的生產工作負載變得至關重要。
Camunda BPM Engine 可以輕鬆連接到同一叢集上運行的其他應用程序,並且 Kubernetes 提供出色的可擴展性,讓您僅在真正需要時增加基礎設施成本(並根據需要輕鬆減少基礎設施成本)。
透過 Prometheus、Grafana、Loki、Fluentd 和 Elasticsearch 等工具,監控品質也大大提高,讓您可以集中查看叢集中的所有工作負載。 今天我們將了解如何將 Prometheus 導出器實作到 Java 虛擬機器 (JVM) 中。
目標
讓我們來看看可以自訂 Camunda BPM Docker 映像的幾個區域(
- 日誌和指標;
- 資料庫連線;
- 驗證;
- 會話管理。
我們將研究實現這些目標的幾種方法,並清楚地展示整個過程。
注意: 你用的是企業版嗎? 看
工作流程開發
在此示範中,我們將使用 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 - 它配備了大量開箱即用的儀表板。 它們相互連接並且相對容易安裝
預設情況下,Prometheus 使用提取模型 <service>/metrics
,為此添加邊車容器是很常見的。 不幸的是,JMX 指標最好在 JVM 內記錄,因此 sidecar 容器效率不高。 讓我們聯絡吧 /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等
首先,我們將匯出器設定檔新增到 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 很棒,因為它們對配置資料進行哈希處理,並在配置資料變更時強制 pod 重新啟動。 它們還減少了 Deployment 中的配置量,因為您可以在一個 VolumeMount 中掛載設定檔的整個「資料夾」。
最後,我們需要將 ConfigMap 作為磁碟區掛載到 pod 中:
-- 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-patch.yaml.tmpl
或 platform/ingress.yaml
。 如果您正在使用 ingress-nginx 並看到一個 nginx 入口類,其中有一個指向它的負載平衡器以及一個外部 DNS 或通配符 DNS 項目,那麼您就可以開始了。 否則,請設定 Ingress Controller 和 DNS,或跳過這些步驟並保持與 Pod 的直接連線。
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 完全準備就緒。 證書管理器將需要一些時間來驗證網域名稱。 然後,您可以使用可用的工具(例如 kubetail 等工具)或僅使用 kubectl 來監控日誌:
kubectl logs -n camunda-bpm-demo $(kubectl get pods -o=name -n camunda-bpm-demo) -f
下一步
授權
這與配置 Camunda BPM 比 Kubernetes 更相關,但需要注意的是,預設情況下,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
注意:您可以使用 xmlstarlet 來代替 sed
我們用了
縮放
如果您已經了解會話,那麼擴展 Camunda BPM 的第一個(通常也是最後一個)限制可能是與資料庫的連線。 部分定制已經可用”
要求和限制
В platform/deployment.yaml
您會看到我們已經對資源欄位進行了硬編碼。 這與 HPA 配合良好,但可能需要額外的配置。 kustomize 補丁適合於此。 厘米。 ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl
產量
因此,我們在 Kubernetes 上安裝了 Camunda BPM,其中包含 Prometheus 指標、日誌、H2 資料庫、TLS 和 Ingress。 我們使用 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