iT邦幫忙

2025 iThome 鐵人賽

DAY 14
1
AI & Data

動不動就要 ETL? 以Trino為例-淺談從資料倉儲到湖倉系列 第 14

Day 14 - 部署與 CICD,Trino 在雲端 (三)

  • 分享至 

  • xImage
  •  

14

設定 Trino Cluster - 集群外成員

這部分的設定一樣放在 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 Cluster - External secrets

Trino 是能對多資料源進行查詢的引擎,而查詢多資料源的前提便是要有各資料源的憑證 ( credentials ),這時便可利用 AWS 的 Secrets Manager 來做密碼憑證的管理。

How K8S get AWS secrets by helm

上圖可以看到,透過 Helm Chart 對 External secrets 的設定,便可以使 K8s在啟動 pods 時一併向 AWS Secrets Manager 取得包含:

  1. Service account 的 IAM 權限 ( trino-elt-xxx-service-account )
  2. credentials 的版本 ( 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 - Service monitor

設定完 Trino Cluster 以及 External secrets 後,便可以來設定 Prometheus 的監控服務,設定後就可以對 Trino 提供的監控指標 ( metrics ) 進行監控,串接 Grafana 後還能自己拉 Dashboard ,非常方便。

How Prometheus get metrics from Trino

而透過 Helm Chart 對 Service monitor 的設定,可以使 Prometheus 知道:

  1. 去哪個 namespace 找尋須監控的服務 ( sl-xxxxxx )
  2. 對有什麼 labelservice 進行監控 ( trino-elt )
  3. 使用什麼 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 腳本執行部署作業。

Know me more

My Linkedin: https://www.linkedin.com/in/benny0624/
My Medium: https://hndsmhsu.medium.com/


上一篇
Day 13 - 部署與 CICD,Trino 在雲端 (二)
下一篇
Day 15 - 部署與 CICD,Trino 在雲端 (四)
系列文
動不動就要 ETL? 以Trino為例-淺談從資料倉儲到湖倉29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言