コンテナ内のEggplant DAIのデプロイ
Eggplant DAIは、Helmを使用してKubernetesにインストールできます。以下の要件を満たす必要があります: 以下の要件を満たす必要があります:
要件 | Notes |
---|---|
Kubernetesクラスタ | テストバージョン1.24。 |
ingress-nginx | テストバージョン1.3.0 (chartバージョン4.2.1). |
Keda v2 | オプション、オートスケーリングエンジン用。 テストバージョン2.7。 |
Eggplant DAIライセンス | 必要に応じてサポートに問い合わせてください。 |
これらの要件を満たしたら、Helmの値ファイルを作成することで、デフォルトのEggplant DAIデプロイをインストールできます。 以下の例では、独自のデプロイ用にすべての値を置き換えます。
# dai.yaml \{#daiyaml}
global:
postgresql:
auth:
postgresPassword: postgres
ingress:
host: dai.example.com
keycloak:
host: dai.example.com
devLicense: a-real-license-goes-here
execLicense: a-real-license-goes-here
objectStorage:
minio:
rootUser: "eggplant"
rootPassword: "eggplant"
keycloak:
externalDatabase:
# This must match the value of global.postgresql.auth.postgresPassword
password: postgres
keycloak-user-provisioner:
adminUsers:
daiAdmin:
username: admin-username
email: admin-email
password: admin-password
いくつかの注意点:
global.ingress.host
とglobal.keycloak.host
は同じドメインである必要はありませんが、解決可能である必要があります。 これは、クラスタにExternalDNSをデプロイするか、手動でレコードを作成してクラスタを指すことで行うことができます。keycloak-user-provisioner.adminUsers.daiAdmin.password
は12文字以上である必要があります。keycloak-user-provisioner.adminUsers
の下に追加のキ ーを追加することで、追加の管理ユーザーを追加することができます。
すべての値の詳細なドキュメントはこちらで見ることができます。
次に、Kubernetesクラスタにそれをデプロイします:
$ helm upgrade --install
--namespace dai
--create-namespace
dai
dai
--repo https://charts.dai.eggplant.cloud
--version 1.13.9
--values dai.yaml
--wait
Release "dai" does not exist. Installing it now.
NAME: dai
LAST DEPLOYED: Fri Feb 17 08:20:17 2023
NAMESPACE: dai
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing dai.
Your release is named dai.
To learn more about the release, try:
$ helm status dai
$ helm get all dai
You can access your DAI instance by visiting dai.example.com.
admin username: admin-username
admin password: admin-password
このインストールでは、Bitnami Helmチャートを使用して、必要なサードパーティの依存関係が自動的にインストールおよび設定されます。これらの依存関係は: These dependencies are: These dependencies are: これらの依存関係は以下の通りです:
依存関係 | テストされたチャートバージョン | テストされたアプリバージョン |
---|---|---|
RabbitMQ | 11.13.0 | 3.11.13 |
PostgreSQL | 11.9.13 | 14.7.0 |
MinIO | 12.2.6 | 2022.2.5 |
Keycloak | 10.1.6 | 19.0.3 |
Helmチャートはこれらの依存関係をインストールしますが、PostgreSQLまたはMinIOに格納されているデータのバックアップは管理しません。 ディザスタリカバリ計画の一部として、これらのサービスのバックアップを整理する必要があります。 There's an example of one approach to backups later in this documentation.
サポートされるカスタマイゼーション
デフォルトのインストールでは、PostgreSQLとMinIOのデータが永続ボリュームに保存され、すべての依存関係がKubernetesにデプロイされます。 PostgreSQLまたはAWS S3と互換性のあるオブジェクトストレージの既存のソリューションがあり、それを代わりに使用したい場合は、Eggplant DAIのインストールをカスタマイズして使用することができます。 さらに、valuesファイルの中ではなく、Kubernetesのシークレットを使用して認証情報を渡すことができます。
このドキュメントのセクションでは、インストールをカスタマイズする方法を示す例を示しています。 すべての例では、認証情報にシークレットを使用します。 すべての例は、上記で示したデフォルトのインストール値に追加することを意味するスニペットです。
オブジェクトストレージの設定
Eggplant DAIは、テストスクリーンショットなどのアセットを永続的に保持するために、S3互換のオブジェクトストレージソリューションに依存しています。 Helmチャートはこれを設定するいくつかのオプションを提供しています。
バンドルされたMinIO(デフォルト)
デフォルトでは、Eggplant DAI Helmチャートはランダムなroot-userとroot-passwordでMinIOをサブチャートとしてデプロイします。
You can override these random values by providing an existing secret. First, prepare an existing secret with credentials in:
# dai-objectstorage.yaml \{#dai-objectstorageyaml}
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: dai-objectstorage
stringData:
root-user: username
root-password: password
$ kubectl -n dai apply -f dai-objectstorage.yaml
次に、既存のシークレットを指すように値ファイルを更新し、Helmアップグレードを実行します:
# dai.yaml \{#daiyaml-1}
global:
objectStorage:
minio:
existingSecret: dai-objectstorage
minio:
auth:
existingSecret: dai-objectstorage
$ helm upgrade dai eggplant/dai --version 1.13.9 -f dai.yaml --wait
注意:global.objectStorage.minio.existingSecret
と minio.auth.existingSecret
は一致する必要があります。
PostgreSQLのインストールはBitnamiチャートによって提供されています。postgresql
キーの下でvaluesファイルにオプションを渡すことで、さらにカスタマイズすることができます。利用可能なオプションについては、Bitnamiのドキュメントを参照してください。
You can further customise it by passing options to it under the postgresql
key in your values file. See the Bitnami documentation for available options.
Eggplantは、MinIOの設定の変更をサポートしていません。
既存のMinIO
既存のMinIOインストールがある場合、上記で作成した同じシークレットを使用して、次のように使用できます:
# dai.yaml \{#daiyaml-2}
global:
objectStorage:
minio:
existingSecret: dai-objectstorage
endpoint: my.minio.deployment.example.com
minio:
enabled: false
注: minio
キーを使用して enabled
を false
に設定します。これにより、バンドルされたMinIOのデプロイが防止されます。 This prevents the bundled MinIO from being deployed. This prevents the bundled MinIO from being deployed.
DAIインストールの外部のMinIOインストールに対して、Eggplantはサポートを提供できません。
S3
AWS S3は、次のように既存のシークレットを使用してオブジェクトストレージに設定できます。まず、次の資格情報で既存のシークレットを準備します: First, prepare an existing secret with credentials in: First, prepare an existing secret with credentials in: まず、以下に認証情報を含む既存のシークレットを用意してください:
# dai-objectstorage.yaml \{#dai-objectstorageyaml-1}
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: dai-objectstorage
stringData:
aws-access-key-id: my-access-key-id
aws-secret-access-key: my-secret-access-key
$ kubectl -n dai apply -f dai-objectstorage.yaml
次に、次のキーを更新または追加して値ファイルを変更します:
# dai.yaml \{#daiyaml-3}
global:
objectStorage:
provider: "aws"
aws:
existingSecret: dai-objectstorage
awsAccessKeyIdKey: aws-access-key-id
awsSecretAccessKeyKey: aws-secret-access-key
region: "eu-west-1"
minio:
enabled: false
次に、クラスタにHelmを使用してデプロイできます。
PostgreSQL
Eggplant DAIはデータストレージのためにPostgreSQLを使用しています。Helmチャートは、それを設定するためのいくつかのオプションを提供しています。 The Helm chart provides several options for configuring it. The Helm chart provides several options for configuring it.
バンドルされたPostgreSQL(デフォルト)
デフォルトでは、Eggplant DAI Helmチャートはユーザー名とパスワードの両方を postgres
に設定して、PostgreSQLをサブチャートとしてデプロイします。
これを上書きするには、次の資格情報でシークレットを作成します:
# dai-postgres.yaml \{#dai-postgresyaml}
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: dai-postgres
stringData:
postgres-password: my-access-key-id
次に、次のキーを更新または追加して値ファイルを変更し、クラスタにHelmを使用して適用します:
# dai.yaml \{#daiyaml-4}
global:
postgresql:
auth:
existingSecret: dai-postgres
keycloak:
externalDatabase:
existingSecret: dai-postgres
existingSecretPasswordKey: postgres-password
注: keycloak.externalDatabase.existingSecretPasswordKey
は、デフォルトでは、Bitnamiチャートは既存のシークレットがキー password
の下にデータベースのパスワードを持っていることを期待していますが、Bitnami PostgreSQLチャートとDAIはキーとして postgres-password
をデフォルトとして使用しています。上記のように、Keycloakチャートの動作をオーバーライドすることもできますし、代わりに global.postgresql.auth.secretKeys.adminPasswordKey
を設定することもできます。 You can either overrirde
the behaviour of the Keycloak chart, as above, or alternatively you could set
global.postgresql.auth.secretKeys.adminPasswordKey
. You can either overrirde
the behaviour of the Keycloak chart, as above, or alternatively you could set
global.postgresql.auth.secretKeys.adminPasswordKey
.
PostgreSQLのインストールはBitnamiチャートによって提供されています。postgresql
キーの下でvaluesファイルにオプションを渡すことで、さらにカスタマイズすることができます。利用可能なオプションについては、Bitnamiのドキュメントを参照してください。
PostgreSQLのインストールはBitnamiチャートによって提供されています。postgresql
キーの下でvaluesファイルにオプションを渡すことで、さらにカスタマイズすることができます。利用可能なオプションについては、Bitnamiのドキュメントを参照してください。
You can further customise it by passing options to it under the postgresql
key in your values file. See the Bitnami documentation for available options.
extraEnvVars
を上書きする場合、POSTGRESQL_DATABASE
環境変数もkeycloak
に設定することを確認する必要があります。これにより、デフォルトの値のkeycloak
キーの下で設定されたKeycloakデータベースが作成されます。 This creates the Keycloak
database that is configured under the keycloak
key in the default values. This creates the Keycloak
database that is configured under the keycloak
key in the default values.
EggplantはPostgreSQLの設定の変更をサポートしていません。
既存のPostgreSQL
既存のPostgreSQLのインストールがある場合、またはAWS RDSのような外部サービスを使用したい場合は、それを行うことができます。
上記と同じ既存の秘密を使用して、次のキーを設定するようにvaluesファイルを変更します:
# dai.yaml \{#daiyaml-5}
global:
postgresql:
host: my.postgresql.host.example.com
auth:
existingSecret: dai-postgres
keycloak:
externalDatabase:
existingSecret: dai-postgres
existingSecretPasswordKey: postgres-password
host: my.postgresql.host.example.com
postgresql:
enabled: false
既存のPostgreSQLデプロイメントを使用する場合、これを使用するようにKeycloakの設定も更新する必要があります。
エンジンのスケーリング
Eggplant DAIのエンジンコンポーネントは、テストの実行とレポートの生成に使用されます。DAIインスタンスが忙しくなると、このコンポーネントをスケーリングして、より大きなテストボリュームを処理する必要があります。このスケーリングを管理するためにKedaを使用することをお勧めします。 Eggplant DAIのエンジンコンポーネントは、テストの実行とレポートの生成に使用されます。DAIインスタンスが忙しくなると、このコンポーネントをスケーリングして、より大きなテストボリュームを処理する必要があります。このスケーリングを管理するためにKedaを使用することをお勧めします。 As your DAI instance becomes busier, you will need to scale this component to handle greater test volumes. We recommend using Keda to manage this scaling.
Kedaを使用するには、まずupstream instructionsに従ってインストールします。
サポートされているのはKeda v2のみです。
次に、valuesファイルに以下を追加してKedaを有効にします:
# dai.yaml \{#daiyaml-6}
ai-engine:
keda:
enabled: true
何らかの理由でKedaを使用できない場合、以下をvaluesファイルに追加して、エンジンレプリカの数を手動で管理することができます。イ ンスタンスが忙しくなるにつれて、それを増やします。
# dai.yaml \{#daiyaml-7}
ai-engine:
replicaCount: 2
Keycloak
Eggplant DAI depends on Keycloak for authentication and authorisation services. We bundle this as a sub-chart and do not currently support using your own Keycloak installation.
バックアップと復元
DAIのインストールからの設定と結果のデータを定期的にバックアップする必要があります。 バックアップする必要があるデータは、PostgreSQL(DAIおよびKeycloak用に設定されている)およびオブジェクトストレージに保存されています。
このデータをバックアップする方法は、デプロイメントの設定方法によって異なりますが、このドキュメントの開始時に示されているデフォルトのインストールで両方をバックアップする方法の例を提供します。
PostgreSQLのバックアップと復元
Eggplant DAIは、データを保存するためにいくつかのデータベースを使用しています。したがって、デフォルトのインストールでpg_dumpall
を使用して、すべてのデータベースをバックアップすることをお勧めします。 共有データベースインスタンスを使用している場合、次のデータベースをバックアップすることを確認する必要があります:
- execution_service
- keycloak
- sut_service
- ttdb
- vam
以下の例では、デフォルトのPostgreSQLポッド内でpg_dumpall
を直接実行します。結果は、ローカルコンピューターのdai.dump
ファイルにストリームされます: 以下の例では、デフォルトのPostgreSQLポッド内でpg_dumpall
を直接実行します。結果は、ローカルコンピューターのdai.dump
ファイルにストリームされます: The result
is then streamed to dai.dump
file on the local computer: 以下の例では、デフォルトのPostgreSQLポッド内でpg_dumpall
を直接実行します。結果は、ローカルコンピューターのdai.dump
ファイルにストリームされます: The result
is then streamed to dai.dump
file on the local computer:
$ kubectl --namespace dai exec postgres-0 \
-- /bin/sh -c \
'export PGPASSWORD=$POSTGRES_PASSWORD && pg_dumpall --username postgres --clean' \
> dai.dump
The command given here includes the --clean
option. ここで与えられたコマンドには--clean
オプションが含まれています。これにより、pg_dumpall
にダンプのデータ ベースをドロップするコマンドが含まれるようになります。これにより復元が簡単になりますが、これが発生することを知っておく必要があります。 This makes restoring it easier, but you should
know this will happen. This makes restoring it easier, but you should
know this will happen.
実際には、次のことをしたいでしょう:
- ダンプを圧縮する
- バックアップストレージサーバーに配置する
- スケジュールに従って実行する。
ただし、pg_dumpall
の使用はそのまま維持されます。
バックアップを復元するには、次のようにプロセスを反転させることができます:
$ kubectl --namespace dai exec postgres-0 \
-- /bin/sh -c \
'export PGPASSWORD=$POSTGRES_PASSWORD && psql --username postgres \
--dbname postgres \
--file -' < dai.dump
いくつかの注意点:
- -We used the
--clean
option when creating the dump. This means all databases in the backup will be dropped and recreated. - -We specify
--dbname postgres
.--dbname postgres
を指定します。バックアップが--clean
で作成されたため、復元の一部としてドロップされるデータベースのいずれかに接続すると、エラーが発生します。
MinIOのバックアップと復元
Images and other assets are stored in object storage rather than the database. You must back these up in addition to the database content discussed above. A quick way to run this backup from your local machine is demonstrated below. The example below requires you to have the MinIO clienttools installed locally.
$ ROOT_USER=$( kubectl get secret dai-objectstorage -o json | jq -r '.data."root-user"' | base64 -d )
$ ROOT_PASSWORD=$( kubectl get secret dai-objectstorage -o json | jq -r '.data."root-password"' | base64 -d)
$ kubectl port-forward service/minio 9000:9000 &
$ PID=$!
$ mcalias set minio <http://localhost:9000> $ROOT_USER $ROOT_PASSWORD -api S3v4
$ mkdir backup
$ mc cp --recursive --quiet minio/ backup/
$ kill $PID
前述のように、バックアップを圧縮し、適切なストレージサーバーに移動し、スケジュールで実行することをお勧めします。
バックアップを復元するには、コピーコマンドを逆にするだけです:
$ mc mb minio/assets
$ mc mb minio/screenshots
$ mc cp --recursive --quiet backup/ minio/
デフォルトの設定で別々のアセットとスクリーンショットのバケットを使用していると仮定すると、復元する前にmc mb
でバケットを作成する必要があります。
アップグレード
アップグレードの一般的な手順は、任意のHelmリリースと同じです:
- PostgreSQLデータとオブジェクトストレージデータをバックアップします。
- 1.PostgreSQLとオブジェクトストレージのデータをバックアップします。
2.
helm repo update
でリポジトリを更新します。 3.バンドルされたMinioを使用している場合、Minioのデプロイメ ントのルートユーザーとパスワードを取得します。 4.Keycloakのデプロイメントのルートユーザーとパスワードを取得します。 5.既存の値を取得し、必要な新しい値に変換します。 6.helm uninstall -n dai dai
で古いデプロイメントをアンインストールします。 7.さらに、kubectl -n dai delete jobs --all && kubectl -n dai delete pvc --all
で古いPVCとジョブをすべて削除します。 8.次のようにしてHelm 6.5のリリースをインストールします: helm get values
とテキストエディターで新しいリリースの必要に応じて値を変更します。helm upgrade
を実行します。
Each Eggplant DAI release may have specific additional steps. So before applying this procedure, please review the notes below for the upgrade you're performing.
DAI 7.0 から 7.1 へのアップグレード
7.0から7.1へのアップグレードについては、上記の一般的なガイダンスの他には、具体的な手順はありません。
DAI 6.5 から 7.0 へのアップグレード
DAI 7.0 のリリースには、以前のバージョンと互換性のないMinioのアップデートが含まれています。 バンドルされたMinioをオブジェクトストレージとして使用している場合、古いMinioのインストールをバックアップし、Daiのアップグレード後にデータを復元する必要があります:
- -上で説明されているように、現在のMinioのインストールをバックアップします。
-現在のMinioのデプロイメントとPVCを削除します。 現在のMinioのデプロイメントとPVCを削除します。 kubectl delete pvc -l app.kubernetes.io/name=minio --wait=false && kubectl delete deployment -l app.kubernetes.io/name=minio
-Review values and run
helm upgrade
. - 現在のMinioのデプロイメントとPVCを削除します。 現在のMinioのデプロイメントとPVCを削除します。 kubectl delete pvc -l app.kubernetes.io/name=minio --wait=false && kubectl delete deployment -l app.kubernetes.io/name=minio
- 値を確認し、
helm upgrade
を実行します。 これにより、他のDAIコンポーネントをアップグレードすると同時に、Minioのクリーンなインストールが作成されます。 - 上で説明されているように、既存のMinioデータを新しいMinioデプロイメントに復元します。
DAI 6.4 から 6.5 へのアップグレード
DAI 6.5は、以前のリリースと互換性のない新しいHelmチャートを導入します。 このリリースの推奨アップグレード手順は次のとおりです:
- PostgreSQLとオブジェクトストレージのデータをバックアップします。
- -PostgreSQLデータとオブジェクトストレージデータをバックアップします。
-
helm repo update
でリポジトリを更新します。 -helm get values
とテキストエディターで新しいリリースの必要に応じて値を変更します。 -helm upgrade
を実行します。 - バンドルされたMinioを使用している場合、Minioのデプロイメントのルートユーザーとパスワードを取得します。
- Keycloakのデプロイメントのルートユーザーとパスワードを取得します。
- 既存の値を取得し、必要な新しい値に変換します。
helm uninstall -n dai dai
で古いデプロイメントをアンインストールします。- さらに、
kubectl -n dai delete jobs --all && kubectl -n dai delete pvc --all
で古いPVCとジョブをすべて削除します。 - 次のようにしてHelm 6.5のリリースをインストールします:
helm install -n dai dai eggplant/dai --version 1.3.4 -f new-values.yaml --wait
バンドルされたMinioを使用している場合、バックアップからデータを復元します。
The exact process may vary depending on your previous deployment. Please be careful to verify backups before deleting resources and to delete the correct resources.
チャートのドキュメントの残りを確認して新しい値ファイルを作成することをおすすめしますが、以下はpre-6.5値ファイルのキーから6.5+値ファイルの場所へのマッピングです。これは移動した値の完全なリストではありません。必要なすべてのキーを正しく設定するために、値のドキュメンテーションを確認する必要があります。 This is not a complete list of values, only of those that have moved. This is not a complete list of values, only of those that have moved. You'll still need to review the documentation for the values to ensure you set all required keys and they are set correctly.
Old Key | New Key |
---|---|
global.adminusername | keycloak-user-provisioner.adminUsers.daiAdmin.username |
global.adminEmail | keycloak-user-provisioner.adminUsers.daiAdmin.email |
global.adminPassword | keycloak-user-provisioner.adminUsers.daiAdmin.password |
global.license | global.devLicense, global.execLicense* |
externalDatbase | global.postgresql |
externalBroker | global.rabbitmq |
objectStorage | global.objectStorage |
ingress.hostnames | global.ingress.host |
ingress.tls | global.ingress.tls |
keda.enabled | ai-engine.keda.enabled |
keycloak.realm | global.keycloak.realm |
keycloak.url | global.keycloak.host |
keycloak.adminUser | global.keycloak.user |
keycloak.adminPassword | global.keycloak.password |
keycloak.smtp | keycloak-realm-provisioner.smtp |
DAI 6.3 から 6.4 へのアップグレード
DAI 6.4 のリリースには、Keycloakの内部バージョンがバージョン19に更新されています。この新しいバージョンにアップグレードするには: To upgrade to this new version: To upgrade to this new version: この新しいバージョンにアップグレードするには:
- yamlファイルを編集して、
keycloak.adminPassword
キーをkeycloak.auth.adminPassword
に移動します。 - デフォルトの管理ユーザー名を使用していない場合、
keycloak.adminUser
キーをyaml内のkeycloak.auth.adminUser
に移動します。 - -yamlファイルを編集して、
keycloak.adminPassword
キーをkeycloak.auth.adminPassword
に移動します。 -デフォルトの管理ユーザー名を使用していない場合、keycloak.adminUser
キーをyaml内のkeycloak.auth.adminUser
に移動します。 -The helm upgrade process deploys a new StatefulSet which is incompatible with the existing StatefulSet. helmのアップグレードプロセスは、既存のStatefulSetと互換性のない新しいStatefulSetをデプロイします。したがって、helmのアップグレードを実行する前に、元のStatefulSetを削除する必要があります(このステップが完了すると、DAIインスタンスは6.4へのアップグレードが完了するまでアクセスできなくなります):
$ kubectl delete statefulsets.app -l app.kubernetes.io/name=keycloak --namespace dai
DAIバージョン 6.2 から 6.3 へのアップグレード
- -If you use KEDA, v1 is no longer supported. KEDAを使用している場合、v1はサポートされていません。DAIをアップグレードする前にKEDA v2にアップグレードする必要があります。これを行うには、KEDAをアップグレードする前に
ai-engine
ジョブを削除することを確認してください。 In order to do this, make sure you remove theai-engine
job before upgrading KEDA. In order to do this, make sure you remove theai-engine
job before upgrading KEDA.
$ kubectl -n dai delete job ai-engine
DAIバージョン 5.3 から 6.0 へのア ップグレード
- -サービストークンとJWTの秘密を設定する必要はもうありません。これらの値を削除します。 Remove these values. Remove these values.
- -The helm chart deploys a Keycloak instance in the same namespace as the rest of the DAI components. You must, however, specify the Keycloak URL, which is set to
https://kc-<ingress-hostname>
, where<ingress-hostname>
is the parameter value that you specified in the values file.
アンインストール
Eggplant DAIをhelm uninstall
でアンインストールするか、それをインストールした名前空間を削除することでアンインストールできます。
外部のリソース、例えばPostgreSQLインスタンスやS3バケットをカスタマイズして使用した場合、これらを別々に削除する必要があります。
値
完全なドキュメントは、Eggplant DAIチャートでサポートされているすべての値を示しています。
サポート
さらなるサポートが必要な場合は、Eggplantカスタマーサポートに連絡してください。