部署與維護 / Helm 部署
本文檔主要介紹如何透過 Helm 部署 DataFlux Func.
1. 系統與環境要求
安裝 DataFlux Func 前, 請確保環境符合以下條件.
1.1 系統要求
執行 DataFlux Func 的叢集必須符合以下要求:
- Kubernetes > 1.14
- Helm >= 3.8
- 網路頻寬 >= 10Mbps
- 記憶體容量 >= 4GB
- CPU 核心數 >= 2
- 使用外部 MySQL 時, MySQL 版本必須為 5.7 或更高, 請啟用
innodb_large_prefix 參數, 且資料庫編碼必須為 utf8mb4
- 使用外部 Redis 時, Redis 版本必須為 5.0 或更高, 至少 1 GB 可用記憶體, 非叢集版本
DataFlux Func 儲存建議使用共享儲存, hostPath 存在缺點
2. 命令列部署
2.1 取得叢集 Storage Class
執行命令:
輸出結果如下:
| Text Only |
|---|
| NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs-client cluster.local/nfs-subdir-external-provisioner Delete Immediate true 77d
|
2.2 檢查 Helm 版本
執行命令:
2.3 執行安裝
| Bash |
|---|
| helm upgrade -i {Release Name} oci://pubrepo.dataflux-func.com/dataflux-func/func -n {Namespace} --create-namespace \
--set storage.pvc.enabled=true,storage.pvc.storageClass="{Storage Class}" \
--set ingress.enabled=true,ingress.hostName="{Host Name}"
|
{Release Name} 是 Helm 別名, 若 {Namespace} 不存在則會建立, {Storage Class} 是步驟一的 Storage Class 名稱, {Host Name} 是 ingress 網域名稱, 安裝成功即可存取
Helm 部署預設會安裝 MySQL 和 Redis. 您也可以使用外部 MySQL 和 Redis. 詳細部署方式請參閱 charts 套件中的 README 文件

2.4 驗證安裝
執行命令:

您也可以透過瀏覽器存取指定的 {Host Name}.
2.5 初始化系統
透過瀏覽器存取所設定的 ingress 網域, 您可以使用預設設定進行初始化, 自訂您的設定, 或儲存並以預設值初始化資料庫.
![setup-page.png]()
3. Func 升級
3.1 取得 values 設定
執行命令:
| Bash |
|---|
| helm get values {Release Name} -n {Namespace} -o yaml > values.yaml
cat values.yaml
|
3.2 取得目前 Func 版本
執行命令:
3.3 升級 Func
執行命令:
| Bash |
|---|
| helm upgrade {Release Name} oci://pubrepo.dataflux-func.com/dataflux-func/func \
-n {Namespace} \
-f values.yaml
|
3.4 驗證升級結果
執行命令:
4. 其他問題
4.1 瀏覽器回傳 502
如果 Helm 狀態顯示為 deployed, 請按照以下步驟進行故障排除:
檢查 Ingress 是否建立成功
檢查 ingress 資訊:
| Bash |
|---|
| kubectl get ing -n {Namespace}
|
檢查 Pod 狀態
通常是由 pvc 建立失敗造成, 請依實際情況解決
檢查 pod 狀態:
| Bash |
|---|
| kubectl get pods -n {Namespace}
|
輸出結果如下:
| Text Only |
|---|
| NAME READY STATUS RESTARTS AGE
func-mysql-575d576db7-zclcr 1/1 Running 0 13m
func-redis-fc8f8b95f-c27b2 1/1 Running 0 13m
func-server-7d44fc4dc6-d4gp8 1/1 Running 0 13m
func-worker-0-cb64778bc-q6vts 1/1 Running 2 13m
func-worker-1-6-597668777f-lnmbb 1/1 Running 2 13m
func-worker-7-8f976bfd9-fz7jf 1/1 Running 2 13m
func-worker-8-9-656fdb9bd9-rcbph 1/1 Running 1 13m
func-worker-beat-67c995968c-znq2r 1/1 Running 1 13m
|
檢查 PVC 狀態:
| Bash |
|---|
| kubectl get pvc -n {Namespace}
|
輸出結果如下:
| Text Only |
|---|
| func-mysql Pening pvc-0a3db9c5-0b60-428b-9b19-4ff827d155fe 50G RWX nfs-client 15m
func-redis Pening pvc-cfceb581-c711-4e1d-9ae9-8063ca1ee1a9 10G RWX nfs-client 15m
func-resources Bound pvc-0cc6f1df-666c-4512-bea9-baa40461c81c 10G RWX nfs-client 15m
|
4.2 錯誤 "cannot re-use a name that is still in use"
如果在部署期間遇到錯誤 "cannot re-use a name that is still in use", 即表示目前命名空間已有 {Release Name}.
您可以在安裝前刪除舊的 {Release Name}, 或修改 {Release Name}.
4.3 錯誤 "Connection to Connector Timed Out"
如果在建立 connector 時發現錯誤 "Connection to Connector Timed Out", 請重新啟動所有與 func 相關的 pod.
以下是與 func 相關的 deployments:
- func-server
- func-worker-0
- func-worker-1-6
- func-worker-7
- func-worker-8-9
- func-worker-beat
func-server 中的 func 即為 {Release Name}, 且會隨 {Release Name} 而改變
5.4 環境變數擴充支援 Secret 引用
環境變數請參閱 部署與維護 / 設定檔, DFF_ + 設定項. 例如, MYSQL_HOST 對應環境變數 DFF_MYSQL_HOST
建立 Kubernetes Secret
| Bash |
|---|
| kubectl create ns {Namespace}
kubectl create secret generic func \
--from-literal=DFF_MYSQL_HOST=<your-host> \
--from-literal=DFF_MYSQL_PORT=<your-port> \
--from-literal=DFF_MYSQL_USER=<your-user> \
--from-literal=DFF_MYSQL_PASSWORD=<your-password> \
--from-literal=DFF_MYSQL_DATABASE=<your-database> \
-n {Namespace}
|
修改 values.yaml
| Text Only |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | extraBackendEnvs:
# 有關 secret 引用的更多資訊, 請參閱 readme 頁面
- name: DFF_MYSQL_HOST
valueFrom:
secretKeyRef:
name: func
key: DFF_MYSQL_HOST
- name: DFF_MYSQL_PORT
valueFrom:
secretKeyRef:
name: func
key: DFF_MYSQL_PORT
- name: DFF_MYSQL_USER
valueFrom:
secretKeyRef:
name: func
key: DFF_MYSQL_USER
- name: DFF_MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: func
key: DFF_MYSQL_PASSWORD
- name: DFF_MYSQL_DATABASE
valueFrom:
secretKeyRef:
name: func
key: DFF_MYSQL_DATABASE
|
升級或安裝
| Bash |
|---|
| helm upgrade {Release Name} func --repo https://pubrepo.dataflux-func.com/chartrepo/func \
-n {Namespace} \
-f values.yaml
|