Installing Hybrid Manager on AWS EKS#
Helmとブートストラップキットを使用して、 Amazon EKS にHybrid ManagerHMをインストールできます。
重要
インストールプロセスのこの部分を開始する前に、 Prerequisites for AI Factory on Hybrid Manager を完了します。
インストールするバージョンを設定します#
EDB Software Deploymentプラットフォームのバージョンは、環境変数EDB_PLATFORM_VERSIONによって設定されます。これは、インストールするプラットフォームのバージョンに設定する必要があります。たとえば、バージョンv1.2.0をインストールするには、次のように環境変数を設定します。
export EDB_PLATFORM_VERSION="v1.2.0"
トークンを設定します#
このインストールプロセスでは、EDBサブスクリプショントークンを環境変数として保存する必要があります。 EDB Account Profile に移動して、取得できます。プロンプトが表示されたら、ログインします。そこに、Repos 2.0トークンのエントリがあります。
Repo Token#
この値を取得して、環境変数として設定します。
export EDB_SUBSCRIPTION_TOKEN="your-token"
ブートストラップキットを入手する#
Hybrid Managerは、ブートストラップキットを使用してインストールされます。このキットは、EDB Software Deploymentプラットフォームのインストールに使用されるスクリプトとHelmチャートのコレクションです。
すべてのファイルをローカルマシンのディレクトリにコピーし、cd
をそのディレクトリにコピーします。
シークレットのインストール#
ブートストラッププロセスでは、Kubernetesクラスターに多数のシークレットをインストールする必要があります。これらのシークレットは、EDBダウンロードリポジトリで認証し、EDBソフトウェア展開プラットフォームの資格情報を保存するために使用されます。
ブートストラッププロセスに必要なシークレットをインストールするには、
install-secrets.sh
スクリプトを実行します。トークンは環境変数として既に設定しているため、スクリプトにパイプできます。
echo $EDB_SUBSCRIPTION_TOKEN | $SHELL eks-install-secrets.sh
Enter the password for pgai-platform@docker.enterprisedb.com
Creating secret edb-cred
namespace/upm-replicator configured
secret/edb-cred configured
namespace/edbpgai-bootstrap configured
secret/edb-cred configured
secret/edb-cred annotated
PG_CONFOUNDING_KEY is 01234567890123456789ABCDEFG - store safely
Installation completed
このプロセスでは、ハイブリッドマネージャーを実行するために必要なシークレットを作成します。これらのシークレットの詳細については、次の場所で確認できます。
** A secret for Griptape and DeltaLake object storage configuration GenAI Builderのオプショナル**
** A secret for Catalog カタログを使用する場合のオプショナル**
** custom secrets for Migration Portal 移行ポータルとの内部通信を保護するオプション** も参照してください。
値ファイルの準備#
ブートストラッププロセスでは、Helmチャートで多くの値を設定する必要があります。これらの値は、values.yaml
というファイルに保存されます。このファイルは、 default-env.sh
ファイルの変数を使用するprepare.sh
スクリプトを実行して作成できます。 default-env.sh
ファイルを編集して、必要な値を設定します。
これは、デフォルトのdefault-env.sh ファイルです。
# exports for EKS
export EDB_PLATFORM_VERSION="v1.2.0"
export EDB_TARGET_PLATFORM="eks"
export CONTAINER_REGISTRY_URI="docker.enterprisedb.com/pgai-platform"
export IMAGESET_REGISTRY_URI=$CONTAINER_REGISTRY_URI
export IMAGESET_AUTHTYPE="token"
export PORTAL_DOMAIN_NAME="portal.foo.network"
export TRANSPORTER_RW_SERVICE_DOMAIN_NAME="transporter.foo.network"
export BEACON_SERVICE_DOMAIN_NAME="beacon.foo.network"
export AUTHENTICATION_EMAIL="owner@mycompany.com"
export AUTHENTICATION_USER="owner@mycompany.com"
export LOCATION_NAME="default-location"
# Set a password hash for the user or pass a password to have it hashed for you.
# If you pass a password, you will need to remove it from your history.
# You can hash a password using the following command:
# echo -n "password" | htpasswd -BinC 10 admin | cut -d: -f2
#
# export AUTHENTICATION_PASSWORD="password"
export AUTHENTICATION_PASSWORD_HASH="$2y$10$vKOAXfLHbeV1OQxMpxlLdOIwnX.JAN.ZrD9ZU//ocrNQwhQIMtXhy"
次に、 default-env.sh ファイルの変数の簡単なガイドを示します。
Variable |
Description |
|---|---|
EDB_TARGET_PLATFORM |
インストールのターゲットプラットフォーム。 Amazon EKSにインストールするため、eksに設定します。 |
CONTAINER_REGISTRY_URI |
使用するコンテナレジストリのURI。これはEDBダウンロードリポジトリに設定されます。 |
IMAGESET_REGISTRY_URI |
イメージセットレジストリのURI。これはEDBダウンロードリポジトリに設定されます。 |
IMAGESET_AUTHTYPE |
イメージセットレジストリの認証タイプ。 EDBダウンロードリポジトリでの認証にトークンを使用するため、トークンに設定します。 |
PORTAL_DOMAIN_NAME |
ドメインは、HMコンソールにアクセスするためのパブリックURLとして機能します。以下の推奨事項を参照してください。 |
TRANSPORTER_RW_SERVICE_DOMAIN_NAME |
Data Migration Service内部的に`transporter`のドメイン名。以下の推奨事項を参照してください。 |
BEACON_SERVICE_DOMAIN_NAME |
ビーコンサービスのドメイン名。 |
AUTHENTICATION_EMAIL |
作成するユーザーのメールアドレス。 |
AUTHENTICATION_USER |
作成するユーザーのユーザー名。 |
AUTHENTICATION_PASSWORD |
作成するユーザーのパスワード。これは、プレーンテキストとして、またはAUTHENTICATION_PASSWORD_HASHを使用したハッシュとして設定できます。 |
AUTHENTICATION_PASSWORD_HASH |
作成するパスワードのハッシュ。 |
LOCATION_NAME |
エージェントのロケーション名。以前はビーコンエージェントとして知られていました。 |
!!!note PORTAL_DOMAIN_NAMEおよびTRANSPORTER_RW_SERVICE_DOMAIN_NAMEの推奨事項
一貫性と管理を容易にするために、
PORTAL_DOMAIN_NAMEからTRANSPORTER_RW_SERVICE_DOMAIN_NAMEを取得します。最も一般的なアプローチは、
portal サブドメインをdms に置き換えることです。
次の表は、トップレベルドメイン examplecompany.com
に基づいたさまざまな例を使用してこの関係を示しています。
PORTAL_DOMAIN_NAME |
TRANSPORTER_RW_SERVICE_DOMAIN_NAME |
|---|---|
portal.examplecompany.com |
dms.examplecompany.com |
portal-dev.examplecompany.com |
dms-dev.examplecompany.com |
portal.hm001.examplecompany.com |
dms.hm001.examplecompany.com |
portal-hm-us-east-001.examplecompany.com |
dms-hm-us-east-001.examplecompany.com |
prepare.sh スクリプトを実行して、 values.yaml
ファイルを作成します。
$SHELL prepare.sh
これにより、 default-env.sh
ファイルで設定された値を使用してvalues.yaml
ファイルが作成されます。
次のコマンドを使用してHelmチャートリポジトリをインストールします。
helm repo add edbpgai "https://downloads.enterprisedb.com/${EDB_SUBSCRIPTION_TOKEN}/pgai-platform/helm/charts"
チャートリポジトリが追加されたら、最新の状態であることを確認します。
helm repo update
これで、次のコマンドを使用してhelmリポジトリからvalues.yaml
ファイルを作成できます。
helm show values edbpgai/edbpgai-bootstrap > values.yaml
これで、ブートストラッププロセスのチャートのデフォルト値を含むvalues.yaml
ファイルが完成しました。
ブートストラッププロセス用に2つの値を作成する必要があります。これらはAES_256_KEYとAUTHENTICATION_PASSWORD_HASHです。次のコマンドを使用してこれらの値を作成できます。
export AES_256_KEY=$(openssl rand -base64 32)
ハッシュするパスワードがある場合は、次のコマンドで行うことができます。
export AUTHENTICATION_PASSWORD_HASH=$(echo -n $AUTHENTICATION_PASSWORD | htpasswd -BinC 10 admin | cut -d: -f2)
次に、 values.yaml
ファイルを編集し、インストールに必要な値を設定する必要があります。
values.yaml ファイルで適切なキーを見つけ、次のように値を設定します。
$<name> エントリを、同じ名前の環境変数を設定した値に置き換えます。
bootstrapImageNameを\(CONTAINER_REGISTRY_URI、続いて「/edbpgai-bootstrap/bootstrap-」、次に\)EDB_TARGET_PLATFORMを設定します。たとえば、上記の値を指定すると、これはdocker.enterprisedb.com/pgai-platform/edbpgai-bootstrap/bootstrap-eksになります。bootstrapImageTagを$EDB_PLATFORM_VERSIONに設定します。parameters.upm-istio.cookie_aeskeyを$AES_256_KEYに設定します。containerRegistryURLを$CONTAINER_REGISTRY_URIに設定します。systemを$EDB_TARGET_PLATFORMに設定します。parameters.global.portal_domain_nameを$PORTAL_DOMAIN_NAMEに設定します。parameters.transporter-rw-service.domain_nameを$TRANSPORTER_RW_SERVICE_DOMAIN_NAMEに設定します。parameters.transporter-dp-agent.rw_service_urlをhttps://、続いて$TRANSPORTER_RW_SERVICE_DOMAIN_NAME、/transporterに設定します。前に提供した例の最初の例に従って、これはhttps://dms.examplecompany.com/transporterになります。parameters.upm-beacon.server_hostを\(BEACON_SERVICE_DOMAIN_NAMEに設定します。 10. `pgai.portal.authentication.staticPasswords[0].email\) を`AUTHENTICATION_EMAILに設定します。 11.pgai.portal.authentication.staticPasswords[0].hashを\(AUTHENTICATION_PASSWORD_HASHに設定します。 12. `pgai.portal.authentication.staticPasswords[0].username\) を`AUTHENTICATION_USERに設定します。 13.pgai.portal.authentication.staticPasswords[0].userID“c5998173-a605-449a-a9a5-4a9c33e26df”を設定します。 14.beaconAgent.locationを$LOCATION_NAMEに設定します
Helmチャートを適用する#
values.yaml
ファイルを準備したら、Helmチャートを適用してブートストラッププロセスを開始できます。これにより、Kubernetesクラスターに必要なリソースが作成され、ブートストラッププロセスを開始します。
helm upgrade -n edbpgai-bootstrap \
--install -f ./values.yaml \
--version "${EDB_PLATFORM_VERSION/-appl/+appl}" \
edbpgai-bootstrap edbpgai/edbpgai-bootstrap
このコマンドは、Kubernetesクラスターにブートストラップコンテナをインストールします。ブートストラップコンテナは、EDB Software Deploymentプラットフォームの残りの部分をインストールします。
ブートストラッププロセスに従います#
ブートストラッププロセスが完了するまでに時間がかかります。ブートストラップコンテナのログを確認することにより、進行状況を追跡できます。
kubectl logs -f -l app=edbpgai-bootstrap -n edbpgai-bootstrap
ホスト名解決の構成#
イングレスゲートウェイのIPアドレスを取得します。実行します
kubectl -n istio-system get service istio-ingressgateway -o jsonpath={.status.loadBalancer.ingress[0].hostname} | strings | nslookup
このコマンドは、次のような出力を結果ます。
Server: 192.168.111.1
Address: 192.168.111.1#53
Non-authoritative answer:
Name: k8s-istiosys-istioing-b3dc9b4f3c-81dc5c45b1d5f6d2.elb.us-east-1.amazonaws.com
Address: 52.70.180.102
次に、 default-env.sh
で指定されたドメインが上記のコマンドから取得したIPアドレスを指すようにDNSサービスまたは/etc/hosts
ファイルを構成する必要があります。これらのドメインはPORTAL_DOMAIN_NAME
、TRANSPORTER_RW_SERVICE_DOMAIN_NAME
、およびBEACON_SERVICE_DOMAIN_NAME
にあります。上記の例では、それぞれportal.examplecompany.com
、dms.examplecompany.com 、およびbeacon.examplecompany.com
に設定されます。
DNSの構成#
DNS構成で、これらのドメインごとに、取得したIPアドレスをポイントするCNAMEレコードを作成します。したがって、この例では、
examplecompany.com のDNSゾーンファイルに次のレコードを作成します。
cluster IN A 52.70.180.102
portal IN CNAME cluster.examplecompany.com
transporter IN CNAME cluster.examplecompany.com
beacon IN CNAME cluster.examplecompany.com
これは単純化された例です。実際の構成は、DNSプロバイダーとDNSレコードの管理方法によって異なります。
/etc/hosts の構成DNSサービスがない場合#
DNSサービスを構成していない場合は、IPアドレスをローカルの/etc/hosts
ファイルに追加することを検討します。この追加により、default-env.sh
ファイルで設定したドメイン名を使用してハイブリッドマネージャーコンソールにアクセスできます。
次に、次のようにIPアドレスを/etc/hosts ファイルに追加できます。
echo "52.70.180.102 portal.examplecompany.com dms.examplecompany.com beacon.examplecompany.com" | sudo tee -a /etc/hosts
IPアドレスを、前に取得した値に置き換えます。これは一時的な解決策であり、運用環境では使用しないでください。運用展開には、適切なDNSサービスを使用することをお勧めします。
/etc/hosts ファイルの設定は、設定したマシンでのみ機能します。
次のステップ#
connecting to the HM Console によるインストールを検証できるようになりました。
default-env.sh#
# exports for EKS
export EDB_PLATFORM_VERSION="v1.2.0"
export EDB_TARGET_PLATFORM="eks"
export CONTAINER_REGISTRY_URI="docker.enterprisedb.com/pgai-platform"
export IMAGESET_REGISTRY_URI=$CONTAINER_REGISTRY_URI
export IMAGESET_AUTHTYPE="token"
export PORTAL_DOMAIN_NAME="portal.foo.network"
export TRANSPORTER_RW_SERVICE_DOMAIN_NAME="transporter.foo.network"
export BEACON_SERVICE_DOMAIN_NAME="beacon.foo.network"
export AUTHENTICATION_EMAIL="owner@mycompany.com"
export AUTHENTICATION_USER="owner@mycompany.com"
export LOCATION_NAME="default-location"
# Set a password hash for the user or pass a password to have it hashed for you.
# If you pass a password, you will need to remove it from your history.
# You can hash a password using the following command:
# echo -n "password" | htpasswd -BinC 10 admin | cut -d: -f2
#
# export AUTHENTICATION_PASSWORD="password"
# If setting AUTHENTICATION_PASSWORD_HASH, ensure it is single quoted to prevent variable expansion (e.g. $2y$10$...).
export AUTHENTICATION_PASSWORD_HASH=$2y$10$vKOAXfLHbeV1OQxMpxlLdOIwnX.JAN.ZrD9ZU//ocrNQwhQIMtXhy
eks-install-secrets.sh#
registry="docker.enterprisedb.com"
username="pgai-platform"
password=""
echo "Enter the password for ${username}@${registry}"
read -s password
if [ -z "$password" ]; then
echo 1>&2 "Error: password is required" >&2
echo 1>&2
usage
exit 1
fi
kubectl create ns edbpgai-bootstrap
kubectl create ns upm-replicator
kubectl create secret docker-registry edb-cred \
-n edbpgai-bootstrap \
--docker-server="${registry}" \
--docker-username="${username}" \
--docker-password="${password}"
kubectl create secret docker-registry edb-cred \
-n upm-replicator \
--docker-server="${registry}" \
--docker-username="${username}" \
--docker-password="${password}"
kubectl annotate secret -n upm-replicator edb-cred replicator.v1.mittwald.de/replicate-to="*" --overwrite
kubectl create namespace upm-griptape
FERNET_KEY=$(dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64)
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: fernet-secret
namespace: upm-griptape
stringData:
FERNET_KEY: ${FERNET_KEY}
EOF
kubectl create namespace upm-lakekeeper
PG_CONFOUNDING_KEY=$(dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64)
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: pg-confounding-key
namespace: upm-lakekeeper
stringData:
PG_CONFOUNDING_KEY: ${PG_CONFOUNDING_KEY}
EOF
echo "PG_CONFOUNDING_KEY is ${PG_CONFOUNDING_KEY} - store safely"
prepare.sh#
# !/bin/bash
echo "HM Helm values.yaml preparation\n"
# If EDB_PLATFORM_VERSION is not set, error and exit
if [ -z "$EDB_PLATFORM_VERSION" ]; then
echo "EDB_PLATFORM_VERSION is not set, please set it to the version of EDB Platform you are deploying"
exit
fi
# Test for the presence of yq
if ! command -v yq &> /dev/null
then
echo "yq could not be found, please install it"
exit
fi
# Import the eks-default-env file
source ./default-env.sh
# Test for presence of helm repo
value=`helm repo list -o yaml | yq eval contains([{ "name":"edbpgai"}]) -`
if [[ "$value" == "false" ]]; then
echo "EDB Platform Helm repository not found, adding in now"
helm repo add edbpgai "https://downloads.enterprisedb.com/${EDB_SUBSCRIPTION_TOKEN}/pgai-platform/helm/charts/"
fi
# Always update the helm repo
helm repo update
helm show values edbpgai/edbpgai-bootstrap --version $EDB_PLATFORM_VERSION > values.yaml
echo "\n\n"
# Prepare version dependent values
export AES_256_KEY=$(openssl rand -base64 32)
if [[ "$EDB_PLATFORM_VERSION" == v1.2.* ]]; then
echo "EDB Platform version is v1.2.*"
yq -i .bootstrapImageName = env(CONTAINER_REGISTRY_URI)+"/edbpgai-bootstrap/bootstrap-"+env(EDB_TARGET_PLATFORM) |
.bootstrapImageTag=env(EDB_PLATFORM_VERSION) |
del(.bootstrapImage) |
.parameters.upm-istio-gateway.cookie_aeskey = env(AES_256_KEY) |
del(.parameters.upm-beacon-ff-base) |
.beaconAgent.provisioning.imagesetDiscoveryContainerRegistryURL= env(IMAGESET_REGISTRY_URI) |
.beaconAgent.provisioning.imagesetDiscoveryContainerRegistryAuthType= env(IMAGESET_AUTHTYPE) |
.containerRegistryURL = env(CONTAINER_REGISTRY_URI) values.yaml
fi
# Prepare values.yaml for EKS
# if AUTHENTICATION_PASSWORD_HASH is not set, generate it
if [ -z "$AUTHENTICATION_PASSWORD_HASH" ]; then
echo "Generating password hash - please ensure you remove the password from your history"
export AUTHENTICATION_PASSWORD_HASH=$(echo -n $AUTHENTICATION_PASSWORD | htpasswd -BinC 10 admin | cut -d: -f2)
else
echo "Using prehashed password"
fi
yq -i .system = env(EDB_TARGET_PLATFORM) |
.parameters.global.portal_domain_name = env(PORTAL_DOMAIN_NAME) |
.parameters.transporter-rw-service.domain_name = env(TRANSPORTER_RW_SERVICE_DOMAIN_NAME) |
.parameters.transporter-dp-agent.rw_service_url= "https://"+env(TRANSPORTER_RW_SERVICE_DOMAIN_NAME)+"/transporter" |
.parameters.upm-beacon.server_host= env(BEACON_SERVICE_DOMAIN_NAME) |
.pgai.portal.authentication.staticPasswords[0].email=env(AUTHENTICATION_EMAIL) |
.pgai.portal.authentication.staticPasswords[0].hash=env(AUTHENTICATION_PASSWORD_HASH) |
.pgai.portal.authentication.staticPasswords[0].username=env(AUTHENTICATION_USER) |
.pgai.portal.authentication.staticPasswords[0].userID="c5998173-a605-449a-a9a5-4a9c33e26df" |
.beaconAgent.location=env(LOCATION_NAME) values.yaml
echo "Your values.yaml file is ready"