Helm チャートの展開

Tableau Server Helm チャート - 展開

重要: このドキュメントは、Helm と Helm チャートに関する知識があることを前提としており、詳細で規範的な例を提供するものではありません。これは、Tableau Server、Helm、Helm チャートのすべてに精通しているお客様向けに設計されています。

このトピックでは、Helm チャートを使用して Kubernetes にTableau Server を展開する大まかなステップを説明します。

前提条件

開始する前に、前提条件を満たしていることを確認してください。詳細については、「Tableau Server Helm チャート - 前提条件」を参照してください。

Helm チャートのダウンロード

Helm チャートは、コンテナ内の Tableau Server のセットアップ ツール (tableau-server-container-setup-tool-<version>.tar.gz) の一部として提供され、Tableau Server のダウンロード ページからダウンロードできます。

抽出後、必要な Helm チャート ファイルは helm/tableau ディレクトリに格納されます。

Helm チャートを使用した Tableau Server の展開の概要

重要: これは、Helm チャートを使用した Tableau Server の展開の基本的な概要です。完全なステップを説明するものではありません。Helm と Helm チャートの知識があることを前提としています。

開始する前に、Helm チャートを使用して Tableau Server を展開するための前提条件を満たしていることを確認してください。詳細については、「Tableau Server Helm チャート - 前提条件」を参照してください。

ライセンス キーを values.yaml に追加する

values.yaml を編集し、ライセンス キーを設定します。

シングルノードの Tableau Server の展開

プロンプトで次のコマンドを実行して、Tableau Server のシングルノード インスタンスを展開します (たとえば、tableau または default のように、リリース名前空間を <namespace> に置き換えてください)。

helm install tableau-server ./helm/tableau-server \
-n <namespace> \
--create-namespace \ -f ./helm/tableau-server/values-single.yaml

マルチノードの Tableau Server の展開

上記と同じ名前空間規則を使用して、プロンプトで次のコマンドを実行し、Server のマルチノード インスタンスを展開します。

helm install tableau-server ./helm/tableau-server \
-n <namespace> \
--create-namespace \ -f ./helm/tableau-server/values-multinode.yaml

EKS マルチノードのランブック (名前空間 + 静的 bootstrap PV)

このセクションでは、EKS の操作の順序 (専用名前空間、EFS CSI アドオン、ノード ロール上の IAM、静的 bootstrap PV、Helm) について説明します。

  1. 専用の名前空間を作成します。

    これは、bootstrap PV の claimFef.namespace と一致する必要があります。この例では、tableau.を使用します。

    kubectl create namespace tableau-server
    kubectl get namespace tableau
  2. EFS CSI アドオンが存在していることを確認します。

    アドオンが見つからない場合は、作成してステータスが ACTIVE になるまで待機します。

    kubectl get csidriver efs.csi.aws.com
    aws eks describe-addon \
      --cluster-name <cluster-name> \  
      --addon-name aws-efs-csi-driver \
      --region <region> \
      --query 'addon.status'
  3. Storageclass を確認します。

    efs-bootstrap Storageclass — まだ存在していない場合は適用します。詳細については、「Amazon Elastic Kubernetes Service (EKS) の前提条件」を参照してください。

    kubectl get csidriver efs.csi.aws.com
    aws eks describe-addon \
      --cluster-name <cluster-name> \  
      --addon-name aws-efs-csi-driver \
      --region <region> \
      --query 'addon.status'
  4. 静的 bootstrap PVを確認します。

    claimRef は、Helm チャートで作成されるものと同じ名前空間と PVC 名を参照する必要があります (tableau-server-bootstrap)。fs-... を EFS ファイルシステム ID に置き換えます。

    cat > /tmp/tableau-bootstrap-pv.yaml <<'EOF'
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: tableau-bootstrap-pv
    spec:
      capacity:
        storage: 1Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
    persistentVolumeReclaimPolicy: Retain
    storageClassName: efs-bootstrap
    claimRef:
      namespace: tableau
      name: tableau-server-bootstrap
    csi:
      driver: efs.csi.aws.com
      volumeHandle: <fs-xxxxxxxxxxxxxxxxx>
    EOF
    kubectl apply -f /tmp/tableau-bootstrap-pv.yaml
    kubectl get pv tableau-bootstrap-pv
  5. ノード インスタンス ロール上の IAM。

    EFS クライアントと EC2 読み取り専用ポリシーをアタッチします。ノード グループからの <your-node-instance-role> を解決するには、「Amazon Elastic Kubernetes Service (EKS) の前提条件」を参照してください。

    efs-bootstrap Storageclass — まだ存在していない場合は適用します。詳細については、「Amazon Elastic Kubernetes Service (EKS) の前提条件」を参照してください。

    kubectl get csidriver efs.csi.aws.com
    aws eks describe-addon \
      --cluster-name <cluster-name> \  
      --addon-name aws-efs-csi-driver \
      --region <region> \
      --query 'addon.status'
  6. 値

    values-multinode.yaml (またはオーバーレイ) で、手動静的 PV モードを設定します

    persistence:
      bootstrap:
    createPV: false
    volumeName: tableau-bootstrap-pv
    storageClass: efs-bootstrap
  7. image.repository、image.tag、およびシークレット/ライセンスが必要に応じて設定されていることを確認します。

  8. Helm チャートをインストールします

    チャートを PV claimRef と同じ名前空間にインストールします。

    helm install tableau-server ./helm/tableau-server \
      -n tableau \
    -f ./helm/tableau-server/values-multinode.yaml
  9. ストレージとポッドを確認します。

    kubectl get pv,pvc -n tableau
    kubectl get pods -n tableau -w
  10. データ PVC ステータス

    EBS ボリュームがアタッチされるまで、データ PVC に Pending が短時間表示される場合があります。すべての PVC が Bound、Running の順に移行し、最終的に READY 1/1 になる必要があります。

  11. トポロジ (オプション)

    インストール後のフックが無効になっている場合は、ノード clustercontroller を設定して、保留中の変更を適用する必要があります (このドキュメントで後述されている「インストール後のトポロジの自動化 (フック)」を参照してください)。複数の Tableau ノードがある場合、tsm pending-changes apply コマンドを実行すると、インデックス作成/検索サーバーの分散または調整サービス アンサンブルに関する警告が表示されることがあります。「インデックス作成/検索サーバー」および「Tableau Server 調整サービス」に記載されている説明に従って、これらの警告に対処してください。

カスタム インストール

  1. 値のカスタマイズ

    cp ./helm/tableau-server/values.yaml 
    ./helm/tableau-server/my-values.yaml
    # Edit ./helm/tableau-server/my-values.yaml with your configuration
  2. カスタム値を使用したインストール

    helm install tableau-server ./helm/tableau-server -f ./helm/tableau-server/my-values.yaml

構成

展開モード

シングルノード展開

シングルノード展開では、Tableau Server をモノリシック コンテナとして実行します。

values-single.yaml を使用するか、以下のように設定します。

deploymentMode: "single"
primary:
replicaCount: 1
worker:
replicaCount: 0

マルチノード展開

マルチノード展開では、1 つのプライマリと 1 つ以上のワーカーを実行します。worker.replicaCount を使用してワーカー数を設定します — 1、2、またはクラスターの容量と Tableau のトポロジで許容されるそれ以上の値を使用します。チャートは replicaCount: N に対して tableau-server-worker-0 … tableau-server-worker-(N-1) を作成します。

values-multinode.yaml (既定の例では 2 つのワーカーを使用) を使用するか、以下のように明示的に設定します。

deploymentMode: "multinode"
primary:
replicaCount: 1
worker:
replicaCount: 3 # example: three workers

トポロジ アライメント: values-multinode.yaml にはサンプル config.configJson トポロジ (node1、node2、node3 などのノード ID) が付属しています。worker.replicaCount を変更したり、サービスを再配置したりする場合は、TSM ノードの数とロールが展開と一致するように、そのトポロジ (および関連するTableau プロセスの割り当て) を更新します。クラスタリングとプロセスのレイアウトについては、Tableau Server のヘルプを参照してください。

主要な構成オプション

イメージの構成

image:
repository: tableau_server_image
tag: "latest"
pullPolicy: IfNotPresent
pullSecrets: []

ライセンスとシークレット

secrets:
  licenseKey: "YOUR-LICENSE-KEY"
tsmRemotePassword: "password"
tableauUsername: "admin"
tableauPassword: "password"

または、環境変数を使用してこれらを設定することもできます。

env:
LICENSE_KEY: "YOUR-LICENSE-KEY"
TSM_REMOTE_PASSWORD: "password"
TABLEAU_USERNAME: "admin"
TABLEAU_PASSWORD: "password"

別のファイル (例: secrets.yaml) を使用して、-f スイッチを使って渡すことをお勧めします。

secrets.yaml:

secrets:
licenseKey: "YOUR-LICENSE-KEY"
tsmRemotePassword: "YOUR-TSM-PASSWORD"
tableauUsername: "YOUR-ADMIN-USER"
tableauPassword: "YOUR-ADMIN-PASSWORD"

secrets.yaml を使用したインストール/アップグレードの例:

helm upgrade --install tableau-server ./helm/tableau-server \
-n default \
-f ./helm/tableau-server/values-multinode.yaml \
-f ./helm/tableau-server/secrets.yaml

注: 既存の Kubernetes シークレット (例: ecrets.existingSecret) の参照は現在サポートされていません。唯一サポートされている方法は、別のシークレット値ファイルを使用してチャート値を指定することです。

外部 PostgreSQL リポジトリ

既定では、Helm チャートは、専用の値キーを使用して外部リポジトリを有効にしません。

外部リポジトリを有効にするには、次のステップを実行することをお勧めします。

  1. チャートを展開し、プライマリが正常であることを確認します。

  2. プライマリ ポッドから Tableau tsm external repository コマンドを実行します。

  3. 保留中の変更を適用します。

ワークフローの例 (コマンドの検出と適用):

# Discover command syntax for your Tableau version
kubectl exec -n default tableau-server-primary-0 -- sh -lc 'tsm topology external-services repository enable --help'
# After enabling external repository with Tableau-supported args/options:
kubectl exec -n default tableau-server-primary-0 -- sh -lc 'tsm pending-changes apply -iw --ignore-prompt'
kubectl exec -n default tableau-server-primary-0 -- sh -lc 'tsm status -v'

注:

  • 外部リポジトリの構成は、Tableau のバージョンによって異なります (SSL モード、フェールオーバー オプション、認証資格情報フィールド)。詳細については、「Tableau Server 外部リポジトリ」と「tsm topology」を参照してください。

  • お客様の環境への展開では、データベースの認証資格情報を Kubernetes シークレットに保存し、シェル履歴にプレーン テキストを含めないようにします。

永続ストレージ

persistence:
enabled: true
storageClass: "standard"
accessMode: ReadWriteOnce
size: 100Gi

# Bootstrap volume (required for multi-node)
bootstrap:
enabled: true
storageClass: "standard"
accessMode: ReadWriteMany
size: 1Gi
createPV: false

静的な EFS CSI (例: mounttargetip を指定) を使用するクラスターの場合、Helm はbootstrap PV と PVC の両方を管理できます。

persistence:
bootstrap:
enabled: true
storageClass: "efs-bootstrap"
accessMode: ReadWriteMany
size: 1Gi
createPV: true
permissionsFix:
enabled: true
pv:
name: "tableau-bootstrap-pv"
csi:
driver: efs.csi.aws.com
volumeHandle: "fs-xxxxxxxx"
volumeAttributes:
mounttargetip: "10.x.x.x"

permissionsFix.enabled は、Tableauプロセス (UID/GID 999:998) が共有 EFS マウント (既定値: root:root) に bootstrap.json を書き込めるように、init コンテナを追加します chown/chmods /docker/config/bootstrap。

createPV: true の場合、チャートは値 (tableau-bootstrap-pv など) から bootstrap PV を作成し、それに tableau-server-bootstrap PVC をバインドします。

bootstrap PV を手動で管理する場合は、最初に tableau-bootstrap-pv を作成してから、createPV: false と volumeName: tableau-bootstrap-pv: を指定して Helm をインストールします。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: tableau-bootstrap-pv
spec:
  capacity:
    storage: 1Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: efs-bootstrap
  csi:
    driver: efs.csi.aws.com
    volumeHandle: fs-xxxxxxxx
    volumeAttributes:
      mounttargetip: 10.x.x.x
kubectl apply -f tableau-bootstrap-pv.yaml
kubectl get pv tableau-bootstrap-pv

リソースの制限

primary:
  resources:
    limits:
      cpu: "4"
      memory: "8Gi"
    requests:
      cpu: "2"
      memory: "4Gi"

worker:
  resources:
    limits:
      cpu: "4"
      memory: "8Gi"
    requests:
      cpu: "2"
      memory: "4Gi"

サービス構成

service:
  primary:
    type: ClusterIP  # or NodePort, LoadBalancer
    ports:
      http: 80
      https: 8080
      tsm: 8850

Ingress

ingress:
  enabled: true
  className: "nginx"
  hosts:
    - host: tableau.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: tableau-tls
      hosts:
        - tableau.example.com

Ingress セットアップのランブック (例: NGINX Ingress コントローラー)

  1. クラスターに Ingress コントローラーをインストールします (チャート ingress を有効にする前に行う必要があります)。

  2. 値ファイルに Ingress 値を設定します。

    ingress:
    enabled: true
    className: "nginx"
    annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "64m"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    hosts:
    - host: tableau.example.com
    paths:
    - path: /
    pathType: Prefix
    tls:
    - secretName: tableau-tls
    hosts:
    - tableau.example.com
  3. Ingress/ロード バランサーのエンドポイントに tableau.example.com を指す DNS レコードを作成します。

  4. リリース名前空間で TLS シークレットを作成 (または cert-manager を使用) します。

  5. 展開/アップグレード チャートと Ingress の検証:

    helm upgrade --install tableau-server ./helm/tableau-server -n default -f ./helm/tableau-server/values.yaml
    kubectl get ingress -n default
    kubectl describe ingress tableau-server

詳細については、以下を参照してください。

ヘルス チェック

このチャートでは、startup プローブ、liveness プローブ、および readiness プローブがサポートされています。startup プローブでは、liveness/readiness を実行する前に、初回初期化 (failureThreshold: 200 × periodSeconds など) を長時間実行することができます。

healthChecks:
  startup:
    enabled: true
    initialDelaySeconds: 300
    periodSeconds: 15
    timeoutSeconds: 30
    failureThreshold: 200
  liveness:
    enabled: true
    initialDelaySeconds: 300
    periodSeconds: 30
    timeoutSeconds: 10
    failureThreshold: 3
  readiness:
    enabled: true
    initialDelaySeconds: 300
    periodSeconds: 10
    timeoutSeconds: 5
    failureThreshold: 3

マルチノード ワーカー ポッドの場合、ワーカーが限定されたプロセス セット (たとえば、管理エージェント + クラスター コントローラーのみ) を実行するときのプローブの誤検知を防ぐため、チャートは既定で worker.healthChecks.enabled: false に設定されます。

使用方法

Tableau Server にアクセスする

インストール後、サービス構成に基づいて Tableau Server にアクセスします。

  • ClusterIP: ポート フォワーディングまたは Ingress を使用する

  • NodePort: <node-ip>:<node-port> 経由でアクセスする

  • LoadBalancer:指定された外部 IP 経由でアクセスする

TSM コマンドを使用する

# Get pod name
POD_NAME=$(kubectl get pods -l app.kubernetes.io/component=primary -o jsonpath='{.items[0].metadata.name}')

# Run tabcmd
kubectl exec -it $POD_NAME -- tsm status
kubectl exec -it $POD_NAME -- tsm configuration get

tabcmd を使用する

# Get pod name
POD_NAME=$(kubectl get pods -l app.kubernetes.io/component=primary -o jsonpath='{.items[0].metadata.name}')

# Run tabcmd
kubectl exec -it $POD_NAME -- tabcmd login -u admin -p password
kubectl exec -it $POD_NAME -- tabcmd sites

Tableau Server ログの表示

# Primary node logs
kubectl logs -l app.kubernetes.io/component=primary -f

# Worker node logs (multi-node)
kubectl logs -l app.kubernetes.io/component=worker -f

# All logs
kubectl logs -l app.kubernetes.io/instance=tableau-server -f

シェルへのアクセス

# Get pod name
POD_NAME=$(kubectl get pods -l app.kubernetes.io/component=primary -o jsonpath='{.items[0].metadata.name}')

# Open shell
kubectl exec -it $POD_NAME -- /bin/bash

アップグレード

Tableau Server Helm チャートをアップグレードする

helm upgrade tableau-server ./helm/tableau-server -f ./helm/tableau-server/values.yaml

新しい値を使用してアップグレードする

helm upgrade tableau-server ./helm/tableau-server -f ./helm/tableau-server/new-values.yaml

インストール後のトポロジの自動化 (フック)

マルチノード インストールの場合、このチャートは次のようなインストール後/アップグレード後のフック ジョブを実行できます。

  • ワーカー ノードが TSM に登録されるまで待機します

  • ワーカー clustercontroller プロセスの割り当てを設定します

  • 変更が保留中の場合は tsm pending-changes apply -iw --ignore-prompt を実行します

構成:

hooks:
  autoApplyWorkerTopology:
    enabled: true
    kubectlImage: "bitnami/kubectl:latest"
    timeoutSeconds: 3600

既定:

  • values.yaml で無効になっています

  • values-multinode.yamlで、hooks.autoApplyWorkerTopology.enabled を確認します (リリースに応じて true または false に設定されていますが、ハンズオフ ワーカーの clustercontroller 設定で有効にできます)

以下のフックの実行を検証します。

kubectl get jobs -n default
kubectl get pods -n default -l job-name=tableau-server-hook-topology
kubectl logs -n default job/tableau-server-hook-topology

フックが無効になっているか失敗した場合の手動フォールバック — ワーカー TSMノードごとに tsm topology set-process を実行します (通常、ワーカーが N 個ある場合は node2 から node (1+N) まで)。tsm topology list-nodes -v を使用して ID を確認します。

kubectl exec -n default tableau-server-primary-0 -- sh -lc '
tsm topology set-process -n node2 -pr clustercontroller -c 1
tsm topology set-process -n node3 -pr clustercontroller -c 1
# Add one line per additional worker node, e.g. for four workers:
# tsm topology set-process -n node4 -pr clustercontroller -c 1
# tsm topology set-process -n node5 -pr clustercontroller -c 1
tsm pending-changes apply -iw --ignore-prompt
tsm topology list-nodes -v

tsm status -v

注: tsm pending-changes apply に -iw を付けてください。この環境では、-ig オプションは無効です。

アンインストール

helm uninstall tableau-server

警告: これにより、永続ボリュームを含むすべてのリソースが削除されます。アンインストールする前に、必ずデータをバックアップしてください。

検証のステップ

リリース前またはチャートの変更時に、次のコマンドを実行します。

  1. リント:

    helm lint helm/tableau-server -f helm/tableau-server/values-single.yaml
    helm lint helm/tableau-server -f helm/tableau-server/values-multinode.yaml
  2. テンプレート (ドライラン):

    helm template tableau-server helm/tableau-server -f helm/tableau-server/values-single.yaml
    helm template tableau-server helm/tableau-server -f helm/tableau-server/values-multinode.yaml
  3. インストール テスト (オプション):

    1. テスト名前空間で、values-single または values-multinode を使用して helm install を実行します。

    2. kubectl rollout status (StatefulSetの場合、ポッドが準備完了するまで待機する) と基本的なスモーク チェック (例: サービスへの tsm status または HTTP) を実行します。

詳細なトラブルシューティングについては、「Tableau Server Helm チャート - トラブルシューティング」を参照してください。

その他のリソース