9.9.2から9.10.0へのアップグレード
RapidMiner AI Hub 9.10では、OpenShiftやRootless Dockerなど、Dockerイメージを最新のセキュリティガイドラインに対応するよう改良しました。
古いDockerイメージを使用した、既存のシステムをアップグレードするには、マウントされたファイルシステムのパーミッションを変更し、管理者権限を持たないユーザーがファイルにアクセスできるようにする必要があります。そこで、移行スクリプトを提供しています。
RapidMiner AI Hubを旧バージョンから9.10にアップグレードする場合、以下の点に注意してください。
- RapidMiner AI Hub 9.9.2からアップグレードする必要があります。RapidMiner AI Hubのバージョンが9.9.2以下である場合、まずバージョン9.9.2にアップグレードする必要があります。
- RapidMiner AI Hubをアップグレードする前に、必ず現在の環境をシャットダウンし、バックアップを作成してください。完全なバックアップは、3つで構成されます。
- .envとdocker-compose.ymlファイルを含むフォルダの完全な内容です。Dockerはgoとsslサブフォルダにバインドマウントを作成することに注意してください。
- docker-compose.ymlファイルから参照される名前付きボリュームの完全なセットです。DockerウェブサイトのドキュメントBackup, restore, or migrate data volumesを参照してください。
- JupyterHubによって生成された追加のボリュームで、ユーザーごとに1つ、jupyterhub-user-<username>-<JUPYTER_STACK_NAME>のような名前をもっています。
- まずホストマシン上でdocker-compose downを実行し、RapidMiner AI Hubをオフラインにして初めて、一貫性のある状態のバックアップをとることができます。
- バックアップツールで、Linuxファイルシステムのメタデータ(ユーザー、グループ情報、パーミッションなど)を保存する必要があります。
アップグレード
Rootless Dockerは、Docker Engineバージョン19.03で実験的機能として導入され、バージョン20.10で正式な機能になりました。
そのため、Docker Engine 20.10以上のバージョンを使用することが推奨されます。
オペレーティングシステムの詳細については、ディストリビューション別のヒントを参照してください。CentOS 6/7はサポートされていないことに注意してください。理由は、非特権ユーザーの名前空間がLinuxカーネルバージョン3.19以下ではサポートされていないためです。
上記で述べたように、既存のRapidMiner AI Hub 9.9.2のバックアップを作成したら、アップグレードの準備は完了です。以下の手順は、現在の本番環境上の.envとdocker-compose.ymlを含むフォルダで行われます。
- アップグレードスクリプトをダウンロードし、解凍します。
- 以下のファイルを現在の本番環境上の.envとdocker-compose.ymlのあるフォルダにコピーします。
docker-compose-gen2.yml env-gen2 upgrade-gen2.sh migration-compose.yaml ReadMe.md
docker-compose-gen2.ymlとenv-gen2には新しい設定が書かれていますが、env-gen2にはまだ自身の設定の固有の値、たとえば古い.envファイルに含まれている、CLIENT_SECRETが付く変数の値は含まれていません。ReadMe.mdというファイルに.envとenv-gen2を手動でマージする方法が書かれていますが、このサイトで提供されているファイルを大きく変更していなければ、多くの場合、次のステップで説明するシェルスクリプトを実行する方が簡単です。
- 環境変数の値を古い.envファイルから新しいenv-gen2に移行するシェルスクリプトを実行する前に、.envとdocker-compose.ymlファイルに大きな変更がないか確認してください。理想では、本サイトで提供されているテンプレートをベースに、プロファイルを利用してサービスを選択する構成が望ましいです。docker-compose.ymlにサービスを追加している場合(StandPyや TabGoなど)、docker-compose-gen2.ymlにもサービスを追加する必要があります。
これらの注意点を踏まえて、シェルスクリプトを実行します。sh upgrade-gen2.sh
このスクリプトは、変更された値をスクリーンに書き込み、2つのパッチファイルを作成するので、行われた変更の記録が残ります。
upgrade-env.patch upgrade-yml.patch
この時点では、env-gen2が自身の値で更新されただけで、実際には何も変更されていません。確認として、ReadMe.md内の手順書で、提案されている変更と比較することができます。次のステップで、アップグレードを開始します。
- 変更内容が正しいことが確認できたら、元ファイルにコピーして上書きします。
cp env-gen2 .env cp docker-compose-gen2.yml docker-compose.yml
またはパッチを当てます。
patch .env upgrade-env.patch patch docker-compose.yml upgrade-yml.patch
- ルートレスDockerのコンテキスト内でnginxの要件を満たすには、sslサブフォルダのファイルの所有者を変更する必要があります。
sudo chown -R 2011:0 ssl # as root user
- アップグレード/移行スクリプトを実行し、名前付きボリュームのファイル権限を変更します。
docker-compose -f migration-compose.yaml up
このスクリプトでは、警告やエラーが出ないはずです。もし表示された場合は、migration-compose.yamlがdocker-compose.ymlと同じように.envファイルにアクセスできるか確認してください。
- 新しいイメージのダウンロード
docker-compose pull
- RapidMiner AI Hub 9.10を起動します。以上でアップグレードは完了です。
docker-compose up -d
upgrade-gen2.sh
#!/bin/bash
# The old files correspond to version 9.9.2 of RapidMiner AI Hub
# The new files correspond to version 9.10.0 of RapidMiner AI Hub
old_yml_file="docker-compose.yml"
new_yml_file="docker-compose-gen2.yml"
old_env_file=".env"
new_env_file="env-gen2"
# Find values of the environment variables in the old files that differ from the new files
# and copy them to the new files, excluding variables that should have new values,
# such as those labelled VERSION / BACKEND / REGISTRY
diff -u $old_env_file $new_env_file | grep ^-[^#-] | grep -v VERSION | grep -v BACKEND | grep -v REGISTRY | cut -c 2- | cut -d= -f1 | \
while read key; do
if grep -q $key= $new_env_file; then
replacement=$(grep ^${key}= $old_env_file | cut -d= -f2)
echo "$key=$replacement"
perl -pi -e "s@^$key=.*@$key=$replacement@" $new_env_file
fi
done
# Create patch files
diff -u $old_env_file $new_env_file > upgrade-env.patch
diff -u $old_yml_file $new_yml_file > upgrade-yml.patch
migration-compose.yaml
version: "3.9"
services:
rm-migration-svc:
image: "rapidminer/aihub-migration:9.10.0-gen2"
container_name: "migration"
#entrypoint: sh -c 'while true;do sleep 120;done'
volumes:
#RM PROXY & LE
- ./ssl:/etc/nginx/ssl
#KC PG
#- keycloak-postgresql-vol:/var/lib/postgresql/data
#RM-INIT
- ./.env:/rm-init/rapidminer/.env
- keycloak-admin-cli-vol:/rm-init/rapidminer/.keycloak/
- deployed-services-vol:/rm-init/rapidminer/deployed-services/
- ./go:/rm-init/go/
#RM PG SVC
#- rm-postgresql-vol:/var/lib/postgresql/data
#RM SERVER SVC
- rm-server-bootstrap-vol:/aihub/bootstrap.d
- rm-server-home-vol:/aihub/persistent-rapidminer-home
#RM JA
- rm-server-bootstrap-ja-vol:/ja/bootstrap.d
- rm-server-ja-extensions:/ja/rapidminer-jobagent/home/resources/extensions:rw
- rm-server-ja-log-vol:/ja/rapidminer-jobagent/home/log
- rm-server-ja-data-vol:/ja/rapidminer-jobagent/home/data
#PA
- platform-admin-uploaded-vol:/pa/var/www/html/uploaded/
- rts-licenses-vol:/pa/var/www/html/uploaded/licenses/
#RTS
- rts-deployments-vol:/rtsa/rapidminer-scoring-agent/home/deployments/
- rts-licenses-vol:/rtsa/rapidminer-scoring-agent/home/resources/licenses
#JHUB DB
#- jupyterhub-postgresql-vol:/var/lib/postgresql/data
#CES
- rm-coding-shared-vol:/ces/opt/coding-shared/
#GF
- grafana-home:/var/lib/grafana
#LandingPage
- rm-landing-page-vol:/landingpage/var/www/html/uploaded/
- deployed-services-vol:/landingpage/rapidminer/deployed-services/
#TokenTool
- rm-token-tool-vol:/tokentool/var/www/html/uploaded/
volumes:
rm-postgresql-vol:
rm-server-bootstrap-vol:
rm-server-home-vol:
rm-server-bootstrap-ja-vol:
rm-server-ja-log-vol:
rm-server-ja-data-vol:
rm-server-ja-extensions:
platform-admin-uploaded-vol:
rts-deployments-vol:
rts-licenses-vol:
jupyterhub-postgresql-vol:
grafana-home:
keycloak-postgresql-vol:
keycloak-admin-cli-vol:
rm-landing-page-vol:
rm-token-tool-vol:
deployed-services-vol:
rm-coding-shared-vol:
name: ${JHUB_ENV_VOLUME_NAME}
rapidminer_automodel_dbdata:
rapidminer_automodel_shared: