# Dynamic Engineのデプロイメントにプライベートイメージレジストリを使用する

Dynamic Engineがデプロイメントにプライベートイメージレジストリを使用するように設定します。

## 始める前に

* 各Dynamic Engineサービスのイメージパスまたはタグを変更しないでください。

## このタスクについて

パブリックレジストリにアクセスできない場合は、別のイメージレジストリを設定して、Dynamic Engineをデプロイまたはアップグレードするためのチャートを取得できます。これにより、Kubernetesクラスターはプライベートレジストリまたは内部レジストリから必要なイメージをプルできるようになります。

この手順では、Dynamic Engineのデプロイメントのキャッシュまたはプロキシとしてプライベートイメージレジストリを設定する方法について説明します。

* この例では、プライベートイメージレジストリはmyregistry.example.comからアクセス可能であり、認証情報が必要です。
* ghcr.ioへのプロキシリポジトリはmyregistry.example.com/docker-ghcr-io-remoteからアクセスできます。

## 手順

1. このプライベートレジストリのHelm値ファイルを作成します。
   ```
   cat <<EOF > custom-image-registry-values.yaml
   global:
     registry:
       dockerRegistry: myregistry.example.com/docker-ghcr-io-remote
       dockerUsername: <registry_username>
       dockerPassword: <registry_password>
       imagePullSecretName: <registry_secret_name>
   EOF
   ```

   レジストリ認証にDockerユーザー名とパスワードを使用する場合は、imagePullSecretNameフィールドが必要です。このフィールドは、レジストリ認証情報を保存するKubernetes Secretの名前を指定します。

   情報メモヒント: レジストリーシークレットについて:
   * レジストリシークレットを手動ですでに作成している場合([Kubernetesドキュメントのkubectl create secret docker-registry](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_create/kubectl_create_secret_docker-registry)を参照)、imagePullSecretName に既存のシークレット名を指定します。
   * または、imagePullSecretNameに新しいシークレット名を指定します。デプロイメントプロセスでは、提供された認証情報を使用してシークレットが自動的に作成されます。

   プライベートレジストリで認証が不要な場合は、dockerUsername、dockerPassword、imagePullSecretNameフィールドをすべて省略します。
2. プライベートレジストリで認証します。
   ```
   helm registry login myregistry.example.com
   ```

   このコマンドにより、Dynamic Engineのデプロイメントの際にHelmはチャートまたはイメージをプルするための認証情報にアクセスできるようになります。
3. プライベートレジストリを使用して、Dynamic Engineインスタンスとその環境をインストールまたはアップグレードします。
   ```
   helm upgrade --install dynamic-engine-crd \
     oci://myregistry.example.com/docker-ghcr-io-remote/talend/helm/dynamic-engine-crd \
     --version $DYNAMIC_ENGINE_VERSION

   helm upgrade --install dynamic-engine-$DYNAMIC_ENGINE_ID \
     -f $DYNAMIC_ENGINE_ID-values.yaml \
     -f custom-image-registry-values.yaml \
     oci://myregistry.example.com/docker-ghcr-io-remote/talend/helm/dynamic-engine \
     --version $DYNAMIC_ENGINE_VERSION

   helm upgrade --install dynamic-engine-environment-$DYNAMIC_ENGINE_ENVIRONMENT_ID \
     -f $DYNAMIC_ENGINE_ENVIRONMENT_ID-values.yaml \
     -f custom-image-registry-values.yaml \
     oci://myregistry.example.com/docker-ghcr-io-remote/talend/helm/dynamic-engine-environment \
     --version $DYNAMIC_ENGINE_VERSION
   ```
4. デプロイメントを検証します。
   * imagePullSecretsの仕様には、ポッドがプライベートレジストリからイメージをプルするために使用するSecretが含まれています。デフォルトのSecretはtalend-registryです。
     ```
     spec:
       imagePullSecrets:
         - name: talend-registry
     ```
   * すべてのイメージパスは、myregistry.example.com/docker-ghcr-io-remoteで始まります。

     次のコマンドを実行してイメージパスを確認できます。
     ```
     kubectl get deployment -A -l 'app.qlik.com/part-of=qlik-dynamic-engine' \
       -o jsonpath="{range .items[*]}{.metadata.name}{'\t'}{..image}{'\n'}{end}"
     ```

## タスクの結果

完了すると、すべてのDynamic Engine Helmリリースがインストールされます。つまり、dynamic-engine-crd、dynamic-engine、dynamic-engine-environmentなどのHelmチャートの名前付きデプロイメントがすべて存在することになります。

ネームスペース内のすべてのポッドが実行されている必要があります。

Talend Management Consoleではこの環境のステータスが[Ready] (準備完了)になり、タスクまたはプランを実行する準備ができていることが確定されます。

イメージレジストリが正しく構成されていないか、イメージをプルできない場合は、ポッドにはImagePullBackoffエラーが表示されます。

トラブルシューティング:

この表には、Dynamic Engineチャート(dynamic-engine-crd、dynamic-engine、dynamic-engine-environment)をインストールまたはアップグレードするときに発生する一般的なエラーがリストされています。

Dynamic EngineチャートのインストールエラーDynamic EngineDynamic Engineチャートのインストールエラー

| [Error] (エラー) | 原因 | 修復 |
| --- | --- | --- |
| チャートが見つかりません | <ul> <li>チャートのバージョンに誤りがある</li> <li>プロキシの設定ミス</li> </ul> | <ul> <li>必ず公式ドキュメントで提供されているバージョンを使用してください。</li> <li>この表の下に示されているコマンドを使用して、プロキシの設定を確認してください。</li> </ul> |
| ユーザーが認証されません | ログインコマンドが実行されなかったか、認証情報が不足している | 設定されたプライベートイメージレジストリにログインしてください。 |
| ユーザーが承認されていません | プライベートレジストリへの権限が不十分である | 設定されたレジストリからユーザーがイメージをプルできることを確認してください。 |

正しく設定されたプロキシの場合、次のコマンドは同じ結果を返します。

* プライベートレジストリからのチャートを表示します。
  ```
  helm show chart oci://myregistry.example.com/docker-ghcr-io-remote/talend/helm/dynamic-engine \
    --version $DYNAMIC_ENGINE_VERSION
  ```
* パブリックレジストリからのチャートを表示します。
  ```
  helm show chart oci://ghcr.io/talend/helm/dynamic-engine --version $DYNAMIC_ENGINE_VERSION 
  ```

この表には、dynamic-engine-operatorがDynamic EngineまたはDynamic Engine環境ネームスペースでサービスチャートをインストールまたはアップグレードしようとしたときに発生する一般的なエラーがリストされています。

サービスチャートのインストールエラーサービスチャートのインストールエラー

| [Error] (エラー) | 原因 | 修復 |
| --- | --- | --- |
| チャートが見つかりません | Dockerイメージレジストリが正しく設定されていない | イメージレジストリの設定を確認してください。 |
| ユーザーが認証されません | Dockerイメージレジストリの認証情報が設定されていない | イメージレジストリの設定を確認してください。 |
| ユーザーが承認されていません | Dockerイメージレジストリの認証情報に読み取り権限がない | イメージレジストリの設定を確認してください。 |

## 次のタスク

デプロイメントが成功したら、標準エンジンの場合と同様に、Dynamic Engine環境にタスクを追加できます。詳細は、[Dynamic Engine環境にジョブタスクを追加](https://help.qlik.com/talend/ja-JP/dynamic-engine-configuration-guide/Cloud/adding-task-in-dynamic-engine-environment "ジョブタスクとは、Talend Studioから公開されたジョブアーティファクトを含んでいる実行可能な統合プロセスのことです。")をご覧ください。

情報メモヒント:

Kubernetesクラスターがエアギャップになっている場合、イメージのプルはプライベートレジストリを介してルーティングされるため、クラスターは直接のアウトバウンドHTTPまたはHTTPSアクセスを必要としません。

ただし、 Dynamic Engineサービスが外部のHTTPまたはHTTPSエンドポイントにアクセスする必要がある場合 (Qlik Talend Cloudの操作時などによくあります)、Helm値ファイルでHTTPプロキシも設定する必要があります。

手順は、[エアギャップ環境でのDynamic Engineサービス用のHTTPプロキシの使用](https://help.qlik.com/talend/ja-JP/dynamic-engine-configuration-guide/Cloud/use-http-proxy-dynamic-engine-airgapped "エアギャップ環境において、アウトバウンドのHTTPおよびHTTPSトラフィックにHTTPプロキシを使用するようにDynamic Engineサービスを設定します。")をご覧ください。