這部分的設定一樣放在 trino-elt.yaml 裡頭,是集群成員以外的設定,包括了 Exchange manager ( 在地端啟動時使用 .properties 檔做設定 )、內外部網路設定、資源標籤以及 *Event Listener 的設置 :
*Event Listener:
是一種 Trino 的外掛機制,可用來「監聽 Trino 的事件並執行動作」
如: 記錄 query log、監控、安全警示...等。
# 設定 ExchangeManager 讓 Trino 做查詢的 stage shuffle
## 這裡是使用 AWS S3 作為 ExchangeManager
additionalExchangeManagerProperties:
- exchange.s3.region=ap-xxxx-1
- exchange.s3.endpoint=https://s3.ap-xxxx-1.amazonaws.com
# 內部網路設定
additionalConfigProperties:
# http server 設定,使 Trino 可正確解析 IP
- http-server.process-forwarded=true
# Trino 各節點之間的共用通訊密鑰
- internal-communication.shared-secret=xxxxxxxxxxxxx
# Event Listener 設定
- event-listener.config-files=/etc/trino/event-listener.properties
# 外部網路設定
# 啟用 Ingress,讓外部可經 HTTP/HTTPS 存取 Trino Web UI 或 API
ingress:
enabled: true
className: "nginx"
annotations:
cert-manager.io/cluster-issuer: letsencrypt-xxxx
nginx.ingress.kubernetes.io/backend-protocol: HTTP
meta.helm.sh/release-name: trino-elt
meta.helm.sh/release-namespace: sl-xxxxxx
nginx.ingress.kubernetes.io/ssl-protocols: "TLSv1.2 TLSv1.3"
hosts:
- host: xxx-trino-elt.xxx.com
paths:
- path: /
pathType: Prefix
# TLS 憑證設定
tls:
# TLS 金鑰存放的 secret name
- secretName: chart-xxx-tls
hosts:
- xxx-trino-elt.xxx.com
# 資源標籤設定,方便做成本控管或資源監控
commonLabels:
businessid: "xxxxxxxxxxxxxxxxxxxxx"
# eventListener 設定,將 Query 事件寫入 MySQL
eventListenerProperties:
- event-listener.name=mysql
- mysql-event-listener.db.url=${ENV:TIDB_TRINO_ELT_URL}
Trino 是能對多資料源進行查詢的引擎,而查詢多資料源的前提便是要有各資料源的憑證 ( credentials ),這時便可利用 AWS 的 Secrets Manager 來做密碼憑證的管理。
上圖可以看到,透過 Helm Chart 對 External secrets 的設定,便可以使 K8s在啟動 pods 時一併向 AWS Secrets Manager 取得包含:
trino-elt-xxx-service-account
)AWSCURRENT
)並使前面設定 Trino cluster 時使用的 eso
( External Secrets Operator ) 取得相對應的憑證。external-secrets.yaml
的設定如下:
# set the environment
environment: development
externalSecrets:
# 對應前述設定的 eso-trino-xxx
trino-elt-credentials:
version: "AWSCURRENT"
serviceAccount: "trino-elt-xxx-service-account"
# 對應前述設定的 eso-trino-elt-configs
trino-elt-configs:
version: "AWSCURRENT"
serviceAccount: "trino-elt-xxx-service-account"
# 對應前述設定的 eso-trino-elt-env
trino-elt-env:
version: "AWSCURRENT"
serviceAccount: "trino-elt-xxx-service-account"
設定完 Trino Cluster 以及 External secrets 後,便可以來設定 Prometheus 的監控服務,設定後就可以對 Trino 提供的監控指標 ( metrics ) 進行監控,串接 Grafana 後還能自己拉 Dashboard ,非常方便。
而透過 Helm Chart 對 Service monitor 的設定,可以使 Prometheus 知道:
namespace
找尋須監控的服務 ( sl-xxxxxx
)label
的 service
進行監控 ( trino-elt
)endpoint
進行監控 ( jmx-exporter
)service-monitor.yaml
的設定如下:
serviceMonitors:
trino-elt:
# namespace 設定
namespaceSelector:
- sl-xxxxxxx
selector:
# service label 設定
matchLabels:
app.kubernetes.io/instance:
trino-elt
app.kubernetes.io/name:
trino-elt
# 監控 endpoints 設定
endpoints:
- port: jmx-exporter
系列文明日《部署與 CICD,Trino 在雲端 (四)》,將介紹如何透過 Helm Chart 進行開發環境的切分與版本管理,並說明如何利用 .sh
腳本執行部署作業。
My Linkedin: https://www.linkedin.com/in/benny0624/
My Medium: https://hndsmhsu.medium.com/