iT邦幫忙

2025 iThome 鐵人賽

DAY 13
1
AI & Data

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

Day 13 - 部署與 CICD,Trino 在雲端 (二)

  • 分享至 

  • xImage
  •  

13

設定 Trino Cluster - Coordinator

接下來就是對集群成員 — Coordinator 與 Worker 的配置,先說明 Coordinator 的部分,這塊包含了 Coordinator 的:

  1. 資源配置 : CPU 與 記憶體的設置
  2. 失效政策 : 何時檢查失效 與 失效幾次需重啟
  3. secretMounts : 將從 AWS Secrets Manager 拿到的密碼掛進 pod 裡
  4. 權限控管 : 包含 access-control 與 resource-groups 的設定
  5. JVM 設定 : 設定 JVM 記憶體 與 *jmx-exporter

*jmx-exporter (Prometheus JMX Exporter):
用來把 Java 應用程式的內部狀態(JMX metrics),轉換成 Prometheus 可讀格式的工具。
而 trino 是一種 Java app 故用其來做監控。

coordinator:
  resources:
    limits:
      # 最大記憶體上限
      memory: "4Gi"
    requests:
      # initial配置 1CPU 3GB
      cpu: "1000m"
      memory: "3Gi"
  # Pod 檢查政策
  readinessProbe:
    # 60 秒開始檢查,檢查未準備好24次才重啟
    initialDelaySeconds: 60
    failureThreshold: 24
  livenessProbe:
    # 60 秒開始檢查,檢查未活著24次才重啟
    initialDelaySeconds: 60
    failureThreshold: 24
  annotations:
    # 設定 karpenter 不主動終止 Pod
    karpenter.sh/do-not-disrupt: "true"
  additionalConfigFiles:
    # 權限控管(使用 file 做權限控管)
    access-control.properties: |
      access-control.name=file
      security.refresh-period=150s
      security.config-file=/etc/trino/access-control/rules.json
    # 資源群組(使用 file 做權限控管)
    resource-groups.properties: |
      resource-groups.configuration-manager=file
      resource-groups.config-file=/etc/trino/resource-groups/resource-groups.json
  # 將 k8s secrets 掛進 /secrets/
  ## 使用 eso (External Secrets Operator)
  ## 故須與 external-secrets.yaml 一併設定
  secretMounts:
    - name: eso-trino-xxx
      secretName: eso-trino-xxx
      path: /secrets/
  additionalVolumes: 
    # 取出 k8s secrets 的 resource-groups
    - name: resource-groups
      secret:
        secretName: eso-trino-xxx
        items:
          - key: resource_groups.json
            path: resource-groups.json
    # 取出 k8s secrets 的 access-control
    - name: access-control
      secret:
        secretName: eso-trino-xxx
        items:
          - key: access_rules.json
            path: rules.json
  additionalVolumeMounts:
    # 將 resource-groups 掛進 volume
    - name: resource-groups
      mountPath: /etc/trino/resource-groups/
      readOnly: true 
    # 將 access-control 掛進 volume
    - name: access-control
      mountPath: /etc/trino/access-control/
      readOnly: true
  # jvm 記憶體設定
  jvm:
    maxHeapSize: 2G
  additionalJVMConfig:
    # 設定開放模組訪問
    - --add-opens=java.base/java.nio=ALL-UNNAMED
    - -XX:+UnlockDiagnosticVMOptions
    - -XX:G1NumCollectionsKeepPinned=10000000
    - -Dcom.sun.management.jmxremote
    - -Dcom.sun.management.jmxremote.port=9080
    - -Dcom.sun.management.jmxremote.rmi.port=9081
    - -Dcom.sun.management.jmxremote.local.only=false
    - -Dcom.sun.management.jmxremote.authenticate=false
    - -Dcom.sun.management.jmxremote.ssl=false
    - -Djava.rmi.server.hostname=127.0.0.1
    # 加入 JMX Prometheus Java Agent
    - -javaagent:/usr/lib/trino/lib/jmx_prometheus_javaagent.jar=9082:/usr/lib/trino/lib/jmx.config.yaml
  # jmx-Exporter 設定 (提供 Prometheus 監控設定)
  additionalExposedPorts:
    jmxExporter:
      servicePort: 9082
      name: jmx-exporter
      port: 9082
      protocol: TCP

設定 Trino Cluster - Worker

而 Worker 的設定大致都與 Coordinator 相似,一樣包含了資源配置、失效政策、secretMounts 以及 jvm 設定,只是就少了權限控管相關的設定,因為權限控管是做在 Coordinator 裡的:

worker:
  resources:
    limits:
      # 最大記憶體上限
      memory: "4Gi"
    requests:
      # initial配置 1CPU 3GB
      cpu: "1000m"
      memory: "3Gi"
  # Pod 檢查政策
  readinessProbe:
    # 30 秒開始檢查,檢查未準備好24次才重啟
    initialDelaySeconds: 30
    failureThreshold: 24
  livenessProbe:
    # 30 秒開始檢查,檢查未活著24次才重啟
    initialDelaySeconds: 30
    failureThreshold: 24
  # 將 k8s secrets 掛進 /secrets/
  ## 使用 eso (External Secrets Operator)
  ## 故須與 external-secrets.yaml 一併設定
  secretMounts:
    - name: eso-trino-xxx
      secretName: eso-trino-xxx
      path: /secrets/
  # jvm 記憶體設定
  jvm:
    maxHeapSize: 2G
  additionalJVMConfig:
    - --add-opens=java.base/java.nio=ALL-UNNAMED
    - -XX:+UnlockDiagnosticVMOptions
    - -XX:G1NumCollectionsKeepPinned=10000000

明日預告

系列文明日《部署與 CICD,Trino 在雲端 (三)》,將進一步介紹 集群成員之外的設定,內容包含 Exchange Manager(地端啟動時以 .properties 檔設定)、內外部網路配置、資源標籤,以及 *Event Listener 的設置。

Know me more

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


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

尚未有邦友留言

立即登入留言