部署與維護 / 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} 是步驟一取得的儲存類別名稱;{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"
如果在建立連接器時發現錯誤 "Connection to Connector Timed Out",請重新啟動所有與 func 相關的 Pod.
以下為與 func 相關的 Deployment:
- 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 ref 的說明,請參閱 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
|