コンテンツにスキップ

デプロイとメンテナンス / 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 クラスタのストレージクラスを確認する

コマンドを実行します。

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} は手順 1 で確認したストレージクラス名、{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 の STATUS が 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 参照の詳細は 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