メインコンテンツへスキップ

はじめに

このガイドでは、エアギャップ環境、完全に分離された環境、またはネットワークが制限されたお客様管理の環境に W&B Platform をデプロイするための手順を説明します。エアギャップ環境でのデプロイは、次のようなケースで一般的です。
  • 高いセキュリティ要件を持つ政府機関施設
  • 厳格なネットワーク分離要件を持つ金融機関
  • コンプライアンス要件を有する医療機関
  • 産業制御システム (ICS) 環境
  • 機密ネットワークを持つ研究施設
内部コンテナレジストリと Helm リポジトリを使用して、必要な W&B のイメージとチャートをホストします。Kubernetes クラスターに適切なアクセス権を持つシェルコンソール上で、これらのコマンドを実行してください。 これらのコマンドは、Kubernetes アプリケーションをデプロイする際に使用している任意の CI/CD ツールに合わせて調整できます。 インターネット接続がある標準的なオンプレミス Kubernetes デプロイについては、Kubernetes Operator を使用して W&B をデプロイする を参照してください。

前提条件

作業を開始する前に、エアギャップ環境が以下の要件を満たしていることを確認してください。

バージョン要件

ソフトウェア最低バージョン
Kubernetesv1.32 以降(サポートされている Kubernetes のバージョン
Helmv3.x
MySQLv8.0.x が必須で、v8.0.32 以降。ただし v8.0.44 以降を推奨。
Aurora MySQL 3.x リリースは v3.05.2 以上である必要があります
Redisv7.x

SSL/TLS 要件

W&B では、クライアントとサーバー間の安全な通信のために、有効な署名付き SSL/TLS 証明書が必要です。SSL/TLS の終端は必ず ingress/ロードバランサー上で行う必要があります。W&B Server アプリケーションは SSL または TLS 接続を終端しません。 重要: W&B は自己署名証明書およびカスタム CA をサポートしません。自己署名証明書を使用するとユーザーにとって問題となり、サポート対象外となります。 可能であれば、Let’s Encrypt のようなサービスを利用することで、ロードバランサーに対して信頼された証明書を提供できます。Caddy や Cloudflare のようなサービスは、SSL を代行管理してくれます。 セキュリティポリシーによって、信頼済みネットワーク内でも SSL 通信が必要な場合は、Istio や サイドカーコンテナ のようなツールの利用を検討してください。

ハードウェア要件

CPU アーキテクチャ: W&B は Intel(x86)CPU アーキテクチャのみをサポートしています。ARM はサポートされていません。 サイジング: Kubernetes ノードおよび MySQL の CPU、メモリ、ディスクのサイジングに関する推奨事項については、リファレンスアーキテクチャの サイジングセクション を参照してください。要件は、Models、Weave、またはその両方を実行しているかどうかによって異なります。

MySQL データベース

W&B では外部の MySQL データベースが必要です。 本番環境では、W&B はマネージド データベース サービスの使用を強く推奨します。 マネージド データベース サービスは、自動バックアップ、監視、高可用性、パッチ適用などを提供し、運用負荷を軽減します。 MySQL の要件(サイジングの推奨事項や設定パラメータを含む)の詳細については、リファレンス アーキテクチャを参照してください。データベース作成用の SQL については、ベアメタル ガイドを参照してください。デプロイのデータベース設定に関する質問がある場合は、サポート または AISE までお問い合わせください。 セルフマネージドインスタンスの MySQL 設定パラメータについては、リファレンス アーキテクチャの「MySQL 設定パラメータ」セクションを参照してください。

Redis

W&B は、ジョブキューおよびデータキャッシュのために W&B のコンポーネントが使用する、単一ノード構成の Redis 7.x デプロイメントに依存しています。概念実証のテストや開発を容易にするため、W&B Self-Managed にはローカルの Redis デプロイメントが含まれていますが、これは本番環境での利用には適していません。 本番環境でのデプロイメントでは、W&B は次の環境にある Redis インスタンスに接続できます。

オブジェクトストレージ

W&B には、事前署名付き URL および CORS をサポートするオブジェクトストレージが必要です。 推奨ストレージプロバイダ:
  • Amazon S3: 業界トップクラスのスケーラビリティ、データ可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービス。
  • Google Cloud Storage: 非構造化データを大規模に保存するためのマネージドサービス。
  • Azure Blob Storage: 大量の非構造化データを保存するためのクラウドベースのオブジェクトストレージソリューション。
  • CoreWeave AI Object Storage: AI ワークロード向けに最適化された、高性能で S3 互換のオブジェクトストレージサービス。
  • エンタープライズ向け S3 互換ストレージ: MinIO Enterprise (AIStor)NetApp StorageGRID、その他のエンタープライズグレードのソリューション
MinIO Open Source はメンテナンスモードにあり、積極的な開発や事前コンパイル済みバイナリは提供されていません。本番環境へのデプロイには、W&B はマネージド型オブジェクトストレージサービス、または MinIO Enterprise (AIStor) のようなエンタープライズ向け S3 互換ソリューションの利用を推奨します。
IAM ポリシー、CORS 設定、アクセス設定を含む詳細なバケットのプロビジョニング手順については、Bring Your Own Bucket (BYOB) ガイドを参照してください。 完全な要件については、リファレンスアーキテクチャのオブジェクトストレージセクションを参照してください。 オブジェクトストレージのプロビジョニングに関する詳細については、Bring Your Own Bucket (BYOB) ガイドを参照してください。エアギャップ環境では、MinIO Enterprise、NetApp StorageGRID、Dell ECS などのオンプレミスの S3 互換ストレージを利用するのが一般的です。

エアギャップ環境特有の要件

上記の標準要件に加えて、エアギャップ環境でのデプロイには次のものが必要です。
  • 内部コンテナレジストリ: 必要な W&B イメージをすべて格納したプライベートコンテナレジストリ(Harbor、JFrog Artifactory、Nexus など)へのアクセス
  • 内部 Helm リポジトリ: W&B の Helm チャートを格納したプライベート Helm チャートリポジトリへのアクセス
  • イメージ転送手段: インターネットに接続されたシステムからエアギャップ環境のレジストリへコンテナイメージを転送する方法
  • ライセンスファイル: 有効な W&B Enterprise ライセンス。ライセンスの取得方法(例: インターネット接続されたマシンから取得する場合)については、要件ページの License セクションを参照するか、W&B のアカウントチームにお問い合わせください。
ネットワークおよびロードバランサー設定を含むインフラストラクチャ要件の詳細については、reference architecture を参照してください。

エアギャップ環境の準備

ステップ 1: 内部コンテナレジストリをセットアップする

エアギャップ環境でのデプロイを成功させるには、必要なすべてのコンテナイメージがエアギャップ環境内のコンテナレジストリで利用可能である必要があります。
W&B Operator の要件を把握し、コンテナレジストリ内のイメージを定期的に更新して最新の状態を維持する責任はお客様にあります。必要なコンテナイメージとバージョンの最新一覧については、Helm チャートを参照するか、W&B Support または担当の W&B サポートエンジニアまでお問い合わせください。

W&B のコアコンポーネントコンテナ

以下のコアイメージが必要です:

依存コンテナ

次のサードパーティ製の依存イメージが必要です。

完全なイメージ一覧を取得する

Helm チャートから必要なイメージとバージョンの完全な一覧を抽出するには、次の手順を実行します。
  1. インターネットに接続されたシステムで、W&B Helm charts repository から W&B Helm チャートをダウンロードします:
    # helm-charts リポジトリをクローン
    git clone https://github.com/wandb/helm-charts.git
    cd helm-charts
    
  2. values.yaml ファイルを確認して、すべてのコンテナイメージとそのバージョンを特定します:
    # operator チャートからイメージ参照を抽出
    helm show values charts/operator | grep -E "repository:|tag:" | grep -v "^#"
    
    # platform チャートからイメージ参照を抽出
    helm show values charts/operator-wandb | grep -E "repository:|tag:" | grep -v "^#"
    
    代わりに、次のコマンドを使用して、バージョンタグなしでリポジトリ名だけを抽出することもできます:
    helm show values charts/operator-wandb \
      | awk -F': *' '/^[[:space:]]*repository:/{print $2}' \
      | grep -v "^#" \
      | sort -u
    
    リポジトリの一覧は、次のようになります:
    wandb/controller
    wandb/local
    wandb/console
    wandb/megabinary
    wandb/weave-python
    wandb/weave-trace
    otel/opentelemetry-collector-contrib
    prometheus/prometheus
    prometheus-operator/prometheus-config-reloader
    bitnamilegacy/redis
    
    各イメージの具体的なバージョンタグを取得するには、最初のコマンド(grep -E "repository:|tag:")を使用します。このコマンドにより、リポジトリ名とそれに対応するバージョンタグの両方を確認できます。

イメージをエアギャップ環境向けレジストリに転送する

  1. インターネットに接続されたシステム上で、必要なすべてのイメージを pull して保存します。
    以下の例にあるバージョン番号は、上記ステップ 2 で Helm チャートを確認して得た実際のバージョンに置き換えてください。ここで示しているバージョンはあくまで例であり、今後古くなっていきます。
    シェル変数を使用して、バージョンを一貫して管理します:
    # バージョン変数を設定する(Helm チャートのバージョンに合わせて更新する)
    CONTROLLER_VERSION="1.13.3"
    APP_VERSION="0.59.2"
    CONSOLE_VERSION="2.12.2"
    
    # イメージを pull する
    docker pull wandb/controller:${CONTROLLER_VERSION}
    docker pull wandb/local:${APP_VERSION}
    docker pull wandb/console:${CONSOLE_VERSION}
    docker pull wandb/megabinary:${APP_VERSION}
    # ... 必要な他のすべてのイメージを、それぞれのバージョンで pull する
    
    # イメージを .tar ファイルに保存する
    docker save wandb/controller:${CONTROLLER_VERSION} -o wandb-controller-${CONTROLLER_VERSION}.tar
    docker save wandb/local:${APP_VERSION} -o wandb-local-${APP_VERSION}.tar
    docker save wandb/console:${CONSOLE_VERSION} -o wandb-console-${CONSOLE_VERSION}.tar
    docker save wandb/megabinary:${APP_VERSION} -o wandb-megabinary-${APP_VERSION}.tar
    # ... 他のすべてのイメージを保存する
    
  2. 承認された方法(USB ドライブ、安全なファイル転送など)を使用して .tar ファイルをエアギャップ環境に転送します。
  3. エアギャップ環境内でイメージをロードし、内部レジストリに push します:
    # 上で使用したものと同じバージョン変数を設定する
    CONTROLLER_VERSION="1.13.3"
    APP_VERSION="0.59.2"
    CONSOLE_VERSION="2.12.2"
    INTERNAL_REGISTRY="registry.yourdomain.com"
    
    # イメージをロードする
    docker load -i wandb-controller-${CONTROLLER_VERSION}.tar
    docker load -i wandb-local-${APP_VERSION}.tar
    docker load -i wandb-console-${CONSOLE_VERSION}.tar
    docker load -i wandb-megabinary-${APP_VERSION}.tar
    # ... 他のすべてのイメージをロードする
    
    # 内部レジストリ用にタグを付ける
    docker tag wandb/controller:${CONTROLLER_VERSION} ${INTERNAL_REGISTRY}/wandb/controller:${CONTROLLER_VERSION}
    docker tag wandb/local:${APP_VERSION} ${INTERNAL_REGISTRY}/wandb/local:${APP_VERSION}
    docker tag wandb/console:${CONSOLE_VERSION} ${INTERNAL_REGISTRY}/wandb/console:${CONSOLE_VERSION}
    docker tag wandb/megabinary:${APP_VERSION} ${INTERNAL_REGISTRY}/wandb/megabinary:${APP_VERSION}
    # ... 他のすべてのイメージにタグを付ける
    
    # 内部レジストリに push する
    docker push ${INTERNAL_REGISTRY}/wandb/controller:${CONTROLLER_VERSION}
    docker push ${INTERNAL_REGISTRY}/wandb/local:${APP_VERSION}
    docker push ${INTERNAL_REGISTRY}/wandb/console:${CONSOLE_VERSION}
    docker push ${INTERNAL_REGISTRY}/wandb/megabinary:${APP_VERSION}
    # ... 他のすべてのイメージを push する
    

ステップ 2: 内部 Helm チャートリポジトリをセットアップする

コンテナイメージに加えて、次の Helm チャートが内部 Helm リポジトリで利用可能になっていることを確認します。
  1. インターネットに接続されたシステム上で、チャートをダウンロードします:
    # W&B Helm リポジトリを追加
    helm repo add wandb https://wandb.github.io/helm-charts
    helm repo update
    
    # チャートをダウンロード
    helm pull wandb/operator --version 1.13.3
    helm pull wandb/operator-wandb --version 0.18.0
    
  2. .tgz チャートファイルをエアギャップ環境に転送し、リポジトリの手順に従って内部 Helm リポジトリにアップロードします。 operator チャートは W&B Kubernetes Operator (Controller Manager) をデプロイします。operator-wandb チャートは、Custom Resource (CR) で設定された values を使用して W&B Platform をデプロイします。

ステップ 3: Helm リポジトリへのアクセスを設定する

  1. エアギャップ環境内で、Helm が内部リポジトリを使用するように設定します:
    helm repo add local-repo https://charts.yourdomain.com
    helm repo update
    
  2. チャートが利用可能であることを確認します:
    helm search repo local-repo/operator
    helm search repo local-repo/operator-wandb
    

エアギャップ環境への W&B のデプロイ

ステップ 4: Kubernetes Operator をインストールする

W&B Kubernetes Operator(controller manager)は、W&B プラットフォームコンポーネントを管理します。エアギャップ環境にインストールするには、内部コンテナレジストリを使用するように設定してください。
  1. 次の内容で values.yaml ファイルを作成します:
    image:
      repository: registry.yourdomain.com/wandb/controller
      tag: 1.13.3
    
    airgapped: true
    
    repositorytag は、ステップ 1 で内部レジストリに転送した実際のバージョンに置き換えてください。ここで示しているバージョン(1.13.3)は一例であり、今後古くなる可能性があります。
  2. Operator と Custom Resource Definition(CRD)をインストールします:
    helm upgrade --install operator local-repo/operator \
      --namespace wandb \
      --create-namespace \
      --values values.yaml
    
  3. Operator が動作していることを確認します:
    kubectl get pods -n wandb
    
    Running 状態の operator Pod が表示されているはずです。
サポートされている値の詳細については、Kubernetes operator の GitHub リポジトリの values ファイルを参照してください。

ステップ 5: MySQL データベースをセットアップする

W&B Custom Resource を設定する前に、外部 MySQL データベースをセットアップします。本番環境へのデプロイでは、利用可能な場合はマネージドデータベースサービスの利用を W&B は強く推奨します。ただし、独自の MySQL インスタンスを実行している場合は、データベースとユーザーを作成してください: 次の SQL コマンドを実行して、データベースとユーザーを作成します。SOME_PASSWORD を任意の安全なパスワードに置き換えてください:
CREATE USER 'wandb_local'@'%' IDENTIFIED BY 'SOME_PASSWORD';
CREATE DATABASE wandb_local CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL ON wandb_local.* TO 'wandb_local'@'%' WITH GRANT OPTION;
MySQL の設定パラメータについては、リファレンスアーキテクチャの MySQL 設定セクションを参照してください。

ステップ 6: W&B カスタムリソースを設定する

W&B Kubernetes Operator をインストールしたら、カスタムリソース (CR) を設定して、内部 Helm リポジトリとコンテナレジストリを参照するようにします。 この設定により、Kubernetes Operator は W&B プラットフォームの必要なコンポーネントをデプロイする際に、内部レジストリとリポジトリを使用するようになります。
以下の設定例には、時間の経過とともに古くなるイメージバージョンのタグが含まれています。ステップ 1 で内部レジストリに転送した実際のバージョンに合わせて、すべての tag: の値を置き換えてください。
次の内容で wandb.yaml という名前のファイルを作成します。
apiVersion: apps.wandb.com/v1
kind: WeightsAndBiases
metadata:
  labels:
    app.kubernetes.io/instance: wandb
    app.kubernetes.io/name: weightsandbiases
  name: wandb
  namespace: wandb

spec:
  chart:
    url: https://charts.yourdomain.com
    name: operator-wandb
    version: 0.18.0

  values:
    global:
      host: https://wandb.yourdomain.com
      license: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      
      bucket:
        accessKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        secretKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        name: s3.yourdomain.com:9000
        path: wandb
        provider: s3
        region: us-east-1
      
      mysql:
        database: wandb
        host: mysql.yourdomain.com
        password: <your-mysql-password>
        port: 3306
        user: wandb
      
      redis:
        host: redis.yourdomain.com
        port: 6379
        password: <your-redis-password>
      
      api:
        enabled: true
      
      glue:
        enabled: true
      
      executor:
        enabled: true
      
      extraEnv:
        ENABLE_REGISTRY_UI: 'true'

    # すべてのコンポーネントイメージを内部レジストリを使用するよう設定する
    app:
      image:
        repository: registry.yourdomain.com/wandb/local
        tag: 0.59.2

    console:
      image:
        repository: registry.yourdomain.com/wandb/console
        tag: 2.12.2

    api:
      image:
        repository: registry.yourdomain.com/wandb/megabinary
        tag: 0.59.2

    executor:
      image:
        repository: registry.yourdomain.com/wandb/megabinary
        tag: 0.59.2

    glue:
      image:
        repository: registry.yourdomain.com/wandb/megabinary
        tag: 0.59.2

    parquet:
      image:
        repository: registry.yourdomain.com/wandb/megabinary
        tag: 0.59.2

    weave:
      image:
        repository: registry.yourdomain.com/wandb/weave-python
        tag: 0.59.2

    otel:
      image:
        repository: registry.yourdomain.com/otel/opentelemetry-collector-contrib
        tag: 0.97.0

    prometheus:
      server:
        image:
          repository: registry.yourdomain.com/prometheus/prometheus
          tag: v2.47.0
      configmapReload:
        prometheus:
          image:
            repository: registry.yourdomain.com/prometheus-operator/prometheus-config-reloader
            tag: v0.67.0

    ingress:
      annotations:
        nginx.ingress.kubernetes.io/proxy-body-size: 0
      class: nginx
すべてのプレースホルダー値(ホスト名、パスワード、タグなど)を、実際の設定値に置き換えてください。上記の例では、最も一般的に使用されるコンポーネントのみを示しています。
デプロイの要件によっては、次のような追加コンポーネント用のイメージリポジトリを設定する必要がある場合もあります。
  • settingsMigrationJob
  • weave-trace
  • filestream
  • flat-runs-table
設定可能なコンポーネントの完全な一覧については、W&B Helm リポジトリの values ファイル を参照してください。

ステップ 7: W&B プラットフォームをデプロイする

  1. プラットフォームをデプロイするために、W&B Custom Resource を適用します:
    kubectl apply -f wandb.yaml
    
  2. デプロイの進行状況を監視します:
    # 作成中の Pod を監視
    kubectl get pods -n wandb --watch
    
    # デプロイの状態を確認
    kubectl get weightsandbiases -n wandb
    
    # Operator のログを表示
    kubectl logs -n wandb deployment/wandb-operator-controller-manager
    
    Operator が必要なコンポーネントをすべて作成するまで、デプロイの完了には数分かかる場合があります。

OpenShift の設定

W&B は、エアギャップ環境の OpenShift Kubernetes クラスターへのデプロイを完全にサポートしています。OpenShift のより厳格なセキュリティポリシーにより、OpenShift クラスターへのデプロイでは追加のセキュリティコンテキストの設定が必要になります。

OpenShift セキュリティコンテキスト制約

OpenShift は Pod の権限を制御するために Security Context Constraints (SCC) を使用します。デフォルトでは、OpenShift は Pod に restricted SCC を割り当てます。これにより root としての実行が禁止され、特定のユーザー ID で実行する必要があります。 Custom Resource で適切なセキュリティコンテキストを設定し、W&B コンポーネントが restricted SCC で実行されるように構成します。
spec:
  values:
    # すべてのPodにセキュリティコンテキストを設定する
    app:
      podSecurityContext:
        fsGroup: 1000
        runAsUser: 1000
        runAsNonRoot: true
      securityContext:
        allowPrivilegeEscalation: false
        capabilities:
          drop:
            - ALL
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault

    console:
      podSecurityContext:
        fsGroup: 1000
        runAsUser: 1000
        runAsNonRoot: true
      securityContext:
        allowPrivilegeEscalation: false
        capabilities:
          drop:
            - ALL
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault

    # 他のコンポーネントにも同様に繰り返す: api, executor, glue, parquet, weave

オプション 2: カスタム SCC を作成する(必要な場合)

デプロイにおいて restricted SCC では利用できない機能(または権限)が必要な場合は、カスタム SCC を作成します。
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
  name: wandb-scc
allowHostDirVolumePlugin: false
allowHostIPC: false
allowHostNetwork: false
allowHostPID: false
allowHostPorts: false
allowPrivilegeEscalation: false
allowPrivilegedContainer: false
allowedCapabilities: []
defaultAddCapabilities: []
fsGroup:
  type: MustRunAs
  ranges:
    - min: 1000
      max: 65535
readOnlyRootFilesystem: false
requiredDropCapabilities:
  - ALL
runAsUser:
  type: MustRunAsRange
  uidRangeMin: 1000
  uidRangeMax: 65535
seLinuxContext:
  type: MustRunAs
supplementalGroups:
  type: RunAsAny
volumes:
  - configMap
  - downwardAPI
  - emptyDir
  - persistentVolumeClaim
  - projected
  - secret
  1. SCC を適用します。
    oc apply -f wandb-scc.yaml
    
  2. SCC を W&B のサービスアカウントに関連付けます。
    oc adm policy add-scc-to-user wandb-scc -z wandb-app -n wandb
    oc adm policy add-scc-to-user wandb-scc -z wandb-console -n wandb
    

OpenShift ルート

OpenShift では、標準的な Kubernetes Ingress の代わりに Route を使用します。W&B を OpenShift Route を使用するように構成します:
spec:
  values:
    ingress:
      enabled: false
    
    route:
      enabled: true
      host: wandb.apps.openshift.yourdomain.com
      tls:
        enabled: true
        termination: edge
        insecureEdgeTerminationPolicy: Redirect

OpenShift イメージプル設定

OpenShift クラスターが認証付きの内部イメージレジストリを使用している場合は、次の手順を実行します。
  1. イメージプルシークレットを作成します。
    kubectl create secret docker-registry wandb-registry-secret \
      --docker-server=registry.yourdomain.com \
      --docker-username=<username> \
      --docker-password=<password> \
      --namespace=wandb
    
  2. Custom Resource でこのシークレットを参照します。
    spec:
      values:
        imagePullSecrets:
          - name: wandb-registry-secret
    

OpenShift の完全なサンプル

こちらは、エアギャップ環境向け OpenShift デプロイの、完全なサンプル CR です。
この例に含まれるすべての tag: の値は、手順 1 で内部レジストリに転送した実際のバージョンに置き換えてください。ここで示しているバージョンはあくまで例であり、今後古くなる可能性があります。
apiVersion: apps.wandb.com/v1
kind: WeightsAndBiases
metadata:
  name: wandb
  namespace: wandb

spec:
  chart:
    url: https://charts.yourdomain.com
    name: operator-wandb
    version: 0.18.0

  values:
    global:
      host: https://wandb.apps.openshift.yourdomain.com
      license: <your-license>
      
      bucket:
        accessKey: <your-access-key>
        secretKey: <your-secret-key>
        name: s3.yourdomain.com:9000
        path: wandb
        provider: s3
        region: us-east-1
      
      mysql:
        database: wandb
        host: mysql.yourdomain.com
        password: <your-mysql-password>
        port: 3306
        user: wandb
      
      redis:
        host: redis.yourdomain.com
        port: 6379
        password: <your-redis-password>

    # OpenShift固有: IngressではなくRoutesを使用
    ingress:
      enabled: false
    
    route:
      enabled: true
      host: wandb.apps.openshift.yourdomain.com
      tls:
        enabled: true
        termination: edge

    # 内部レジストリ用のイメージプルシークレット
    imagePullSecrets:
      - name: wandb-registry-secret

    # OpenShift制限付きSCC用のセキュリティコンテキスト
    app:
      image:
        repository: registry.yourdomain.com/wandb/local
        tag: 0.59.2
      podSecurityContext:
        fsGroup: 1000
        runAsUser: 1000
        runAsNonRoot: true
      securityContext:
        allowPrivilegeEscalation: false
        capabilities:
          drop:
            - ALL
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault

    console:
      image:
        repository: registry.yourdomain.com/wandb/console
        tag: 2.12.2
      podSecurityContext:
        fsGroup: 1000
        runAsUser: 1000
        runAsNonRoot: true
      securityContext:
        allowPrivilegeEscalation: false
        capabilities:
          drop:
            - ALL
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault

    # api、executor、glue、parquet、weave にもセキュリティコンテキストを繰り返す
    # (簡略化のため省略)
セキュリティ要件に合わせた包括的な OpenShift 設定例については、W&B Support または担当の W&B サポートエンジニアにご連絡ください。

インストールを検証する

W&B をデプロイしたら、インストールが正しく動作していることを確認してください。 インストールを検証するには、W&B では W&B CLI の使用を推奨します。verify コマンドは、すべてのコンポーネントと設定が正しく動作しているか確認するために、いくつかのテストを実行します。
この手順では、最初の管理者ユーザーアカウントがブラウザーで作成されていることを前提とします。
次の手順に従ってインストールを検証します。
  1. W&B CLI をインストールします。
pip install wandb
  1. W&B にログインします:
wandb login --host=https://YOUR_DNS_DOMAIN
例えば、
wandb login --host=https://wandb.company-name.com
  1. インストールを確認する:
wandb verify
インストールが正常に完了し、W&B デプロイ環境が問題なく動作している場合は、次のような出力が表示されます。
選択されたデフォルトホスト:  https://wandb.company-name.com
このテストの詳細ログの保存先: /var/folders/pn/b3g3gnc11_sbsykqkm3tx5rh0000gp/T/tmpdtdjbxua/wandb
ログイン状態を確認中...................................................✅
署名付きURLアップロードを確認中..............................................✅
プロキシ経由で大きなペイロードを送信できるか確認中...................✅
ベースURLへのリクエストを確認中...........................................✅
署名付きURLを使用したリクエストを確認中.................................✅
バケットのCORS設定を確認中...............................✅
wandbパッケージのバージョンが最新か確認中............................✅
ログされたメトリクスの確認、ファイルの保存とダウンロードを確認中..................✅
アーティファクトの保存とダウンロードのワークフローを確認中...........................✅
エラーが発生した場合は W&B サポートまでお問い合わせください。

エアギャップ環境での追加検証

エアギャップ環境でのデプロイの場合は、次の点も検証してください:
  1. イメージプル: すべての Pod が内部レジストリからイメージを正常にプルできていることを確認します:
    kubectl get pods -n wandb -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.phase}{"\t"}{.status.containerStatuses[*].image}{"\n"}{end}'
    
    すべてのイメージが内部レジストリを指しており、すべての Pod が Running 状態になっている必要があります。
  2. 外部接続: エアギャップモードでは外部接続は行われないはずなので、W&B が外部への接続を試みていないことを確認します:
    kubectl logs -n wandb deployment/wandb-app --tail=100 | grep -i "connection"
    
  3. ライセンス検証: W&B コンソールにアクセスし、ライセンスが有効であることを確認します。

トラブルシューティング

イメージプルエラー

pod がイメージのプルに失敗する場合は、次を確認してください:
  1. 内部レジストリにイメージが存在することを確認する
  2. image pull secret が正しく構成されていることを確認する
  3. Kubernetes ノードからレジストリへのネットワーク接続性があることを確認する
  4. レジストリの認証情報を確認する
    # イメージプルを手動でテスト
    kubectl run test-pull --image=registry.yourdomain.com/wandb/local:0.59.2 --namespace=wandb
    kubectl logs test-pull -n wandb
    kubectl delete pod test-pull -n wandb
    

OpenShift SCC エラー

OpenShift 上で Pod が権限エラーにより起動に失敗する場合:
# 使用されているSCCを確認する
oc get pod <pod-name> -n wandb -o yaml | grep scc

# サービスアカウントの権限を確認する
oc describe scc wandb-scc
oc get rolebinding -n wandb

Helm チャートが見つからない

operator が platform チャートを見つけられない場合は、次の手順を実行します。
  1. Custom Resource 内のチャートリポジトリ URL を確認する
  2. operator の Pod から内部 Helm リポジトリへアクセスできることを確認する
  3. リポジトリ内にチャートが存在することを確認する:
    helm search repo local-repo/operator-wandb
    

よくある質問

別の Ingress クラスを使用できますか?

はい、使用する Ingress クラスは、Custom Resource 内の ingress 設定を変更して構成してください。
spec:
  values:
    ingress:
      class: your-ingress-class

複数の証明書を含む証明書バンドルはどのように扱えばよいですか?

証明書を分けて、customCACerts セクションでそれぞれを個別のエントリとして指定します。
spec:
  values:
    customCACerts:
      cert1.crt: |
        -----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
      cert2.crt: |
        -----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----

自動アップデートを防ぐにはどうすればよいですか?

オペレーターを設定して、W&B が自動的に更新されないようにします:
  1. オペレーターのインストール設定で airgapped: true を指定します(これにより自動アップデートのチェックが無効になります)
  2. Custom Resource 内の spec.chart.version を手動で更新して、バージョンの更新を制御します
  3. 必要に応じて、W&B System Console から自動アップデートを無効化します
詳細については、Disable automatic app version updates を参照してください。
W&B は、Self-Managed インスタンスをご利用のお客様に対し、サポートを維持し、最新の機能、パフォーマンス改善、および修正を受け取るため、少なくとも四半期に一度は最新リリースでデプロイメントを更新することを強く推奨します。W&B は、メジャーリリースの初回リリース日から 12 か月間、そのリリースをサポートします。詳しくは Release policies and processes を参照してください。

デプロイはパブリックリポジトリへの接続なしで動作しますか?

はい。オペレーターの設定で airgapped: true が指定されている場合、Kubernetes オペレーターは内部リソースのみを使用し、パブリックリポジトリに接続しようとしません。

エアギャップ環境で W&B をアップデートするには?

W&B をアップデートするには、次の手順を実行します。
  1. インターネット接続環境にあるシステムで新しいコンテナイメージを取得する
  2. 取得したイメージをエアギャップ環境のレジストリに転送する
  3. 新しい Helm チャートを社内リポジトリにアップロードする
  4. カスタムリソース内の spec.chart.version とイメージタグを更新する
  5. 更新されたカスタムリソースを適用する Operator が W&B コンポーネントをローリングアップデートします。

次のステップ

デプロイが正常に完了したら、次の作業を行います。
  1. ユーザー認証を設定する: SSO またはその他の認証方法を設定する
  2. モニタリングを設定する: W&B インスタンスおよびインフラストラクチャ向けのモニタリングを構成する
  3. アップデート計画を立てる: Server upgrade process を確認し、アップデートサイクルを策定する
  4. バックアップを設定する: MySQL データベースのバックアップ手順を整備する
  5. 手順を文書化する: エアギャップ環境における更新手順向けのランブックを作成する

サポートを受ける

デプロイ中に問題が発生した場合は、次を実行してください。
  • インフラストラクチャに関するガイダンスについては、Reference Architecture を確認してください
  • 設定の詳細については、Operator guide を確認してください
  • W&B Support または担当の W&B サポートエンジニアに連絡してください
  • OpenShift 固有の問題については、Red Hat OpenShift のドキュメントを参照してください