跳轉到

部署與維護 / 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

執行下列指令:

Bash
1
kubectl get sc

輸出如下:

Text Only
1
2
NAME         PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client   cluster.local/nfs-subdir-external-provisioner   Delete          Immediate           true                   77d

2.2 檢查 Helm 版本

執行下列指令:

Bash
1
helm version

2.3 執行安裝

Bash
1
2
3
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 驗證安裝

執行下列指令:

Bash
1
helm ls -n {Namespace}

STATUS 為 deployed 即表示成功

您也可以透過瀏覽器存取指定的 {Host Name}.

2.5 初始化系統

透過瀏覽器存取所設定的 Ingress 網域,您可以使用預設組態進行初始化,自訂您的設定,或儲存並以預設值初始化資料庫.

setup-page.png

3. Func 升級

3.1 取得 values 組態

執行下列指令:

Bash
1
2
helm get values {Release Name} -n {Namespace} -o yaml > values.yaml
cat values.yaml

3.2 取得目前 Func 版本

執行下列指令:

Bash
1
helm ls -n {Namespace}

3.3 升級 Func

執行下列指令:

Bash
1
2
3
helm upgrade {Release Name} oci://pubrepo.dataflux-func.com/dataflux-func/func \
    -n {Namespace} \
    -f values.yaml

3.4 驗證升級結果

執行下列指令:

Bash
1
helm ls -n {Namespace}

4. 其他問題

4.1 瀏覽器回傳 502

如果 Helm 狀態顯示 deployed,請依照下列步驟進行疑難排解:

檢查 Ingress 是否建立成功

檢查 Ingress 資訊:

Bash
1
kubectl get ing -n {Namespace}

檢查 Pod 狀態

通常是由 pvc 建立失敗所導致,請依實際情況解決.

檢查 Pod 狀態:

Bash
1
kubectl get pods -n {Namespace}

輸出如下:

Text Only
1
2
3
4
5
6
7
8
9
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
1
kubectl get pvc -n {Namespace}

輸出如下:

Text Only
1
2
3
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
1
2
3
4
5
6
7
8
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
1
2
3
helm upgrade {Release Name} func --repo https://pubrepo.dataflux-func.com/chartrepo/func \
    -n {Namespace} \
    -f values.yaml