跳轉至

部署與維護 / 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} 是步驟一的 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"

如果在建立 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
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 引用的更多資訊, 請參閱 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