《Trino 地端架設與調參》系列都在介紹如何架設並啟動 地端 的 Trino Cluster 實例。
不過在實際情境中,部署通常不會在地端進行,而是需要一種能滾動調整參數並支援動態部署的方式,才能讓系統更具彈性,能夠因應各種突發狀況。
此外,在開發流程中,也應將環境區分為 測試 與 正式 環境,此時動態部署便扮演著關鍵角色,使開發者能在完成測試後順利將系統部署至正式環境,並確保結果一致且無誤。
因此接下來《部署與CICD,Trino 在雲端》系列將分別講述專案上實際部署時使用的框架、環境切分實作、動態調參方法以及 CI/CD 的腳本執行,讓你的 Trino Cluster 能隨心所欲的任你調整。
因公司使用 K8s 進行部署管理,所以選擇 Helm 作為部署工具。Helm Chart 包含部署所需的所有 K8s Yaml ( 如 Deployment、Service、ConfigMap ) 與設定參數,使我們更便於進行環境切分與版本管理。
使用 Helm Chart 可以做到以下:
.yaml
定義應用 ( 此指 Trino cluster ) 如何部署values.yaml
進行參數化設定,渲染部署的 .yaml
values.yaml
)values.yaml
).sh
腳本進行部署 ( Deployment )若讀者到這邊還是不清楚也無妨,本文會使用官方提供的 trino chart 模板做一次實際 Trino cluster 的部署參數設定,依序做下去肯定會更加明白使用 Helm Chart 部署的好處。
本文使用的是 Trino 官方的 Helm Chart template,再以 values.yaml
對官方 Helm Chart template 進行渲染後部署,接下來介紹 3 個部署 Trino cluster 會用到的 values.yaml
:
trino-elt.yaml
external-secrets.yaml
service-monitor.yaml
因官方提供設定繁不及載,本文僅就專案上有使用到的設定做介紹,首先是集群的基礎設定,包含 Trino cluster 名稱、image 版本、權限以及密碼憑證 ( credentials ) 的設定:
# Trino cluster 名稱,用於區別不同的集群
nameOverride: trino-elt
# Trino image 設定 (Pull from AWS ECR)
image:
registry: xxxx.dkr.ecr.ap-southeast-1.amazonaws.com
repository: sldatacenter/trino-elt
tag: latest
pullPolicy: Always
imagePullSecrets: # 沒特別設定
# 環境變數(env)設定
## 使用 eso (External Secrets Operator)
## 故須與 external-secrets.yaml 一併設定
envFrom:
- secretRef:
name: eso-trino-elt-env
# 權限設定
auth:
# 設定 Trino 將根據群組進行授權
groups: "true"
# 儲存密碼驗證的 Secret
## 使用 eso (External Secrets Operator)
## 故須與 external-secrets.yaml 一併設定
passwordAuthSecret: eso-trino-elt-configs
再來則是 Server 以及 Catalogs 的設定,這個設定是整個集群共用的,包含 worker 的數量、登入方式、查詢限制以及可連接資料源的 Catalogs 設定 ( 在地端啟動時是使用 .properties 檔做設定 ) :
server:
## 設定 worker 數量:3
workers: 3
config:
## 設定登入方式:帳號密碼
authenticationType: "PASSWORD"
## 啟用 distributed-sort: 每個node都先排序好再merge,增加查詢效能
## 限制歷史查詢 query.max-history: 限制可以出現在UI的歷史查詢數量,增加查詢效能
coordinatorExtraConfig: |
distributed-sort=true
query.max-history=50
additionalCatalogs:
# 設定 bigquery Catalog
bigquery: |
connector.name=bigquery
bigquery.project-id=shopline-test
bigquery.credentials-file=/secrets/gcp_service_account.json
# 設定 iceberg Catalog
iceberg: |
connector.name=iceberg
iceberg.file-format=PARQUET
iceberg.catalog.type=glue # 使用 AWS Glue 作為 metadata catalog
hive.metastore.glue.region=ap-southeast-1
hive.metastore.glue.default-warehouse-dir=s3://sldatacenter-trino-development
fs.native-s3.enabled=true
s3.region=ap-southeast-1
iceberg.query-partition-filter-required=true
iceberg.query-partition-filter-required-schemas=datalakehouse_elt_raw_development,datalakehouse_elt_bronze_development,datalakehouse_elt_silver_development,datalakehouse_elt_gold_development
系列文明日《部署與 CICD,Trino 在雲端 (二)》,將延續介紹 Trino Cluster 的核心組成,包括 Coordinator 與 Worker 的配置。這部分的設定可說是整個集群的關鍵,因為它決定了 Trino 所能調度的資源,以及影響效能調校的細節。
My Linkedin: https://www.linkedin.com/in/benny0624/
My Medium: https://hndsmhsu.medium.com/