メインコンテンツまでスキップ

プラットフォームのインストール

Helm で Kubernetes に OpenLM Platform をインストールするには、API ゲートウェイと OpenLM Platform の Helm チャートを設定してインストールします。ここで扱う手順は、手動で Kubernetes にデプロイする 3 つのパス(オンプレミスマシン、AWS、Azure)で共通です。Red Hat OpenShift では、Red Hat OpenShift の設定もあわせて適用してください。

プレビュー: openlm-platform チャート

このページは現在の openlm_mono チャートを対象としています。新しいチャート openlm-platform 1.0 がリリース候補として公開されています。このチャートをインストールするには、プレビューガイド Kubernetes と OpenShift (Helm) に従ってください。

Platform as VM には適用されません

Platform as VM でデプロイする場合、このページは読み飛ばしてください。このパスでは同梱のインストーラーがゲートウェイとプラットフォームのチャートを自動でインストールするため、以下の Helm コマンドを重ねて実行すると、競合するサービスが二重に作成されます。代わりに 設定リファレンス と デプロイ を参照してください。

はじめに​

デプロイパスの前提条件チェックリストを完了していることを確認します。

API ゲートウェイのインストール​

OpenLM Platform に外部トラフィックをルーティングするには、先に API ゲートウェイをインストールします。API ゲートウェイは、すべての外部トラフィックの単一入口です。

設定​

ゲートウェイを設定するには、ゲートウェイの values.yaml を編集します。

  1. tyk-oss.tyk-gateway.gateway.hostName にドメイン名を設定します。例: openlm.yourcompany.com
  2. tyk-oss.tyk-gateway.gateway.ingress.hosts と tyk-oss.tyk-gateway.gateway.ingress.tls にも同じドメインを設定します。
  3. tyk-oss.global.redis.addrs に Redis のアドレスを設定します。
  4. tyk-oss.global.redis.pass に Redis のパスワードを設定します。
  5. Redis が TLS を使用する場合は、tyk-oss.global.redis.useSSL: true も設定します。
  6. tyk-oss.global.secrets.APISecret にランダムな値を設定します。例: openssl rand -hex 24 の出力
  7. storageClassName にクラスターのストレージクラスを設定します。
  8. tyk-oss.global.components.pump: false で Tyk pump を無効にします。

インストール​

次のコマンドを実行します。

helm install openlm-gateway openlm-gateway-<version>.tgz \
-f values.yaml \
-n openlm

リリース名は openlm-gateway のままにしてください。OpenLM Platform は /api へのトラフィックを、この名前から作成されるサービス gateway-svc-openlm-gateway-tyk-gateway に送ります。ゲートウェイチャートは OpenLM から提供されるパッケージを使用してください。OpenLM の Helm リポジトリにある openlm-gateway という名前のチャートは別のコンポーネントです。

確認​

次のコマンドを実行します。

kubectl exec -it <any-pod> -n openlm -- /bin/sh
curl https://<your-domain>/api/homepage/.security

この段階で host not reachable が返るのは想定どおりです。これはゲートウェイのルーティング設定が有効であることを示します。別のエラーが出る場合は、ゲートウェイのログと Redis アドレスを確認してください。

OpenLM Platform Helm チャートの設定​

OpenLM Platform は、単一の umbrella Helm チャート openlm_mono でデプロイします。このチャートには、コンポーネントごとにサブチャートが含まれます。既定では、すべてのコンポーネントが無効で、接続情報はすべて空です。これらは 2 か所で指定します。資格情報と接続文字列は Kubernetes の secret に、それ以外は values ファイルに記述します。

インストールする OpenLM Platform チャートのバージョンは、API ゲートウェイチャートとレポート用 SQL スクリプトとあわせて OpenLM から提供されます。提供されたバージョンのチャートをインストールし、チャートが固定しているイメージタグは上書きしないでください。

シークレットを作成する​

各コンポーネントは、openlm namespace の secret から資格情報を読み込みます。OpenLM Platform をインストールする前に secret を作成してください。secret が存在しないコンポーネントは起動しません。

Base64 エンコードが必要なパスワード

エンコードの要否はフィールドごとに異なり、一律ではありません。次の値ではパスワードを Base64 エンコードします。

  • INFRASTRUCTURE__ServerConnectionStringTemplate
  • IDENTITY_DATABASE_CONNECTIONSTRING
  • openlm-dss-db-credentials の DbPassword
  • REPORTING_DATABASE_CONNECTIONSTRING
  • identity コンポーネントの vars_list にある ConnectionString

openlm-generic-reporting-mssql-credentials の PASSWORD には平文のパスワードを使用します。

次のコマンドで、SQL Server 用のデータベース secret を作成します。プレースホルダーを置き換えてください。TLS を使用しない SQL Server では、TAIL の Encrypt=False に変更します。

NS=openlm; H='<sql-host>'; U='<sql-user>'; P='<sql-password>'
PB64=$(printf '%s' "$P" | base64 | tr -d '\n')
TAIL='Min Pool Size=0;Max Pool Size=100;Encrypt=True;TrustServerCertificate=True'

kubectl -n $NS create secret generic openlm-generic-identity-db-credentials \
--from-literal="IDENTITY_DATABASE_CONNECTIONSTRING=Data Source=$H;Initial Catalog=openlm_identity;User ID=$U;Password=$PB64;$TAIL"
kubectl -n $NS create secret generic openlm-generic-server-db-credentials \
--from-literal="INFRASTRUCTURE__ServerConnectionStringTemplate=Data Source=$H;Initial Catalog={0};User ID=$U;Password=$PB64;$TAIL"
kubectl -n $NS create secret generic openlm-generic-reporting-db-credentials \
--from-literal="REPORTING_DATABASE_CONNECTIONSTRING=Data Source=$H;Initial Catalog=openlm_reporting;User ID=$U;Password=$PB64;$TAIL"
kubectl -n $NS create secret generic openlm-generic-reporting-mssql-credentials \
--from-literal=HOST_NAME=$H --from-literal=PORT=1433 --from-literal=USERNAME=$U --from-literal=PASSWORD="$P"
kubectl -n $NS create secret generic openlm-dss-db-credentials \
--from-literal=DbType=2 --from-literal=DbServer=$H --from-literal=DbPort=1433 \
--from-literal=DbName=openlm_dss --from-literal=DbUser=$U --from-literal=DbPassword=$PB64

INFRASTRUCTURE__ServerConnectionStringTemplate の {0} は、各サービスがデータベース名を差し込むプレースホルダーです。そのまま残してください。運用データベースそのものには _none サフィックスが付きます。values ファイルの INFRASTRUCTURE__ServerDbPrefix が openlm_operational であれば、データベース名は openlm_operational_none にする必要があります。外部 SQL Server では、データベース管理者がこのサフィックス付きの名前でデータベースを事前作成する必要があります。

パスワードを Base64 エンコード済みの状態でテンプレートを作成するには、Database Configuration Tool を使用し、Database Name に {0} を入力します。出力は次の例と同じ形式です。

MariaDB または MySQL では、Base64 エンコードしたパスワードを使用した、次のような ServerConnectionStringTemplate を使用します。

Server=mariadb.openlm-infrastructure.svc.cluster.local;Port=3306;User ID=root;Password=<base64-password>;Database={0};Connection Lifetime=0;Minimum Pool Size=0;Maximum Pool Size=100;Default Command Timeout=30

SQL Server では、Base64 エンコードしたパスワードを使用した、次のような ServerConnectionStringTemplate を使用します。

Data Source=<host>;Initial Catalog={0};User ID=<user>;Password=<base64-password>;Min Pool Size=0;Max Pool Size=100;Encrypt=False;TrustServerCertificate=False

openlm-dss-db-credentials の DbType の値で、DSS データベースのエンジンを指定します。

値エンジン
2SQL Server
3MySQL
4MariaDB

次に、MongoDB、Kafka、Redis の secret を作成します。TLS 経由の Redis では、接続文字列を <redis-host>:<port>,ssl=True,password=<redis-password> の形式で記述します。

kubectl -n $NS create secret generic openlm-generic-mongo-db-credentials \
--from-literal="MONGODB__CONNECTIONSTRING=mongodb://<user>:<password>@<mongodb-host>:27017/"
kubectl -n $NS create secret generic openlm-generic-kafka-bootstrap-credentials \
--from-literal="INFRASTRUCTURE__KAFKABOOTSTRAPSERVERS=<kafka-host>:9092"
kubectl -n $NS create secret generic openlm-generic-redis-connection-credentials \
--from-literal="REDIS__CONNECTIONSTRING=<redis-host>:6379,password=<redis-password>,abortConnect=false"

OpenLM Platform は bootstrap endpoint だけで Kafka に接続します。これは、クライアントリスナーに認証のない各デプロイパスのクラスタ内 Kafka に適合します。SASL/SCRAM 認証の Amazon MSK や Confluent Cloud のように SASL 認証を必要とする Kafka には、このガイドで扱っていない追加の接続設定が必要です。インストール時に OpenLM へ設定をお問い合わせください。

次の連携用 secret は、オンプレミスの全コンポーネントセットに含まれるコンポーネントが必要とします。その連携を使用しない場合も作成し、キーの値は連携を使用する場合にのみ入力してください。

Secretキー
openlm-auditservice-aws-credentialsACCESSKEY、SECRETKEY
openlm-licensefilecomparator-aws-credentialsAWS_SQS_ACCESS_KEY、AWS_SQS_SECRET_KEY
openlm-licensefilecomparator-servicenow-credentialsSERVICENOW_CLIENTID、SERVICENOW_CLIENTSECRET、SERVICENOW_USERNAME、SERVICENOW_PASSWORD、SERVICENOW_INSTANCE_URL、AWS_SQS_QUEUE_URL、AWS_SQS_REGION、BROKERHUBAPI_DELAY_IN_MILLISECONDS、BROKERHUBAPI_MAX_RETRY_COUNT、AWS_SQS_MAX_MESSAGES、AWS_SQS_QUEUE_WORKER_COUNT、AWS_SQS_WAIT_TIME_SECONDS
openlm-pushnotification-alertservice-credentials、openlm-pushnotification-identityservice-credentials、openlm-pushnotification-identityalignment-credentialsGoogle サービスアカウントの各フィールド
openlm-sam-apikeys為替レート API のキー

ServiceNow の secret の整数キーには、連携を使用しない場合も値を設定してください。例: BROKERHUBAPI_DELAY_IN_MILLISECONDS=10000、BROKERHUBAPI_MAX_RETRY_COUNT=5、AWS_SQS_MAX_MESSAGES=5、AWS_SQS_QUEUE_WORKER_COUNT=3、AWS_SQS_WAIT_TIME_SECONDS=10。整数キーが空の場合、サービスはクラッシュします。プッシュ通知の secret は空のままでかまいません。

values ファイルを作成する​

values ファイルでは、ルーティング、OpenLM Platform の URL、データベースタイプを設定します。次の例を起点にし、openlm.example.com を実際の FQDN に置き換えてください。

global:
masterIngress:
enabled: true
hostname: openlm.example.com
ingressClassName: traefik # or nginx
secretName: openlm-lb-cert
apiBackendService: gateway-svc-openlm-gateway-tyk-gateway
affinity:
enabled: true # false if your nodes carry no openlm.com/role labels
taints:
enabled: true # false if your nodes carry no openlm.com/role labels

openlm_config_generic:
configmap:
vars_list:
AUTHORITY_URL: https://openlm.example.com/identity
INFRASTRUCTURE__AUTHORITYURL: https://openlm.example.com/identity
IssuerUri: https://openlm.example.com/identity
UI_BASE_HREF_URL: https://openlm.example.com/identity
UI_OAUTH_ISSUER_URL: https://openlm.example.com/identity
LB_FQDN: openlm.example.com
INFRASTRUCTURE__LBFQDN: openlm.example.com
LdapServiceHost: https://openlm.example.com
PERSONAL_DASHBOARD_ADDRESS: https://openlm.example.com/personal-dashboard
general__personalDashboardAddress: https://openlm.example.com/personal-dashboard
INFRASTRUCTURE__ServerDbPrefix: openlm_operational
INFRASTRUCTURE__USESECURITY: 'true'

identity コンポーネントは、これらの設定の一部を独自に保持しており、その値が openlm_config_generic の値より優先されます。チャートではプレースホルダーが入っているため、identity にも設定してください。対象は、Base64 エンコードしたパスワードを含むデータベース接続文字列、データベースタイプ、3 つの issuer URL です。

identity:
enabled: true
configmap:
vars_list:
ConnectionString: Data Source=<sql-host>;Initial Catalog=openlm_identity;User ID=<sql-user>;Password=<base64-password>;Min Pool Size=0;Max Pool Size=100;Encrypt=True;TrustServerCertificate=True
DbType: SqlServer_SQLServerAuth
IssuerUri: https://openlm.example.com/identity
UI_BASE_HREF_URL: https://openlm.example.com/identity
UI_OAUTH_ISSUER_URL: https://openlm.example.com/identity

例を調整する際は、次の点を確認してください。

  • masterIngress は、コンポーネントごとのパスを持つ 1 つの Ingress オブジェクトで OpenLM Platform を公開し、/api を API ゲートウェイに送ります。Red Hat OpenShift では無効のままにし、代わりに global.useOpenShift: true を設定します。Red Hat OpenShift を参照してください。
  • 公開 URL はすべて https:// で記述します。http:// の URL があると、シングルサインオンが機能しなくなります。
  • ノードアフィニティと toleration については、ノードアフィニティ を参照してください。
  • 例では、運用データベースと identity データベースに SQL Server を使用しています。これは既定の DB_TYPE である SqlServer_SQLServerAuth です。
  • MariaDB または MySQL の場合は、openlm_config_generic の vars_list に DB_TYPE: MariaDB または DB_TYPE: MySQL を追加し、identity の DbType を、プレースホルダーに示されたもう一方の値である MySql に設定します。
PostgreSQL はレポート専用です

PostgreSQL は運用データベースおよび identity データベースのタイプとしては使用できません。PostgreSQL はレポート用データベースでのみサポートされます。

シークレットを作成する の secret は、SQL Server のレポート用データベースを構成します。PostgreSQL のレポート用データベースでは、チャートに別のレポート設定(sparkpgdb コンポーネントと openlm-generic-reporting-pgdb-credentials secret)があります。設定内容は OpenLM にお問い合わせください。

コンポーネントを選択する​

すべてのコンポーネントは既定で無効です。使用するコンポーネントごとに enabled: true で有効にします。

homepageui:
enabled: true

オンプレミスの全コンポーネントセットは次のとおりです。

agentactivitymanager agentactivitymanagerui agentshub agentshubui alertsservice alertsserviceui
alldbupgradeapi allocationservice anonymization anonymizationui auditservice auditserviceui
brokerhub brokerhubconnector brokerhubui cloudbroker cloudbrokerui complianceservice
complianceserviceui denialsaggregation denialservice denialsui disposabletokens donglemonitoring
donglemonitoringui dsconnector dss dssui emailnotification enduserservices featureservice
flexlmcompare homepage homepageui identity identityapi identitydiscovery identityui integrationui
kafkainitpod licenseaccesscontrol licenseaccesscontrolui licenseallocationsui licenseautomationtool
licenseconcurency licensefilecomparatormiddleware licensefilesmanagement licensefilesui
licenseharvester licensemanager licensemanagerui licenseserversui licensesui navigationservice
navigationui notificationgateway notificationui officetimecalculation openlm_config_generic
openlm_logging_config_generic openlm_telemetry_config_generic operationalapi personaldashboard
processmanager processmanagerui productservice productsserviceui projectsserviceapi
projectsserviceui pushnotification reportingdataapi samcatalog samcatalogenrichment samcatalogui
server servicenowconnectoretl servicenowcreds sessioncreator softwareassetmanagement
softwareassetmanagementui sparkmongo sparkmssql subscriptionoptimizer ticketingnotification
uiconfigurationservice uiconfigurationserviceui usageservice usageui useravailibility
usersandgroupsservice usersandgroupsserviceui vlm vlmui

セットから選択する際は、次のルールに従ってください。

  • ライセンスの対象外の製品に属するコンポーネントは除外します。製品ごとのコンポーネントは OpenLM から入手できます。
  • servicenowconnectoretl、servicenowcreds、integrationui は、ServiceNow SAM Pro 連携 でのみ必要です。
  • apigateway、mlprediction、router、catalogenrichment、servicenowalertintegration は、OpenLM から指示がない限り有効にしないでください。

ストレージクラスを設定する​

オンプレミスのセットに含まれる 3 つのコンポーネント(licenseconcurency、officetimecalculation、sparkmongo)は、永続ボリューム要求にデータを保存します。これらの要求の既定値は、harvester ストレージクラスと ebs.csi.aws.com プロビジョナーのアノテーションです。3 つのコンポーネントそれぞれで両方を設定してください。

sparkmongo:
pvc:
storageClassName: <your-storage-class>
annotations:
storageProvisioner: <your-provisioner>

プライベート CA を信頼させる​

証明書がプライベート認証局(CA)から発行されている場合は、各コンポーネントにもその証明書を信頼させる必要があります。クラスター内でプライベート CA を信頼させる の説明に従い、values ファイルに global.deploymentCerts を追加してください。

OpenLM Platform のインストール​

values ファイルを指定してチャートをインストールします。Helm の完了まで 45 分の猶予を設定してください。

helm upgrade --install monohelm openlm_mono-<version>.tgz \
-f mono-values.yaml \
-n openlm \
--timeout 45m

チャートアーカイブの名前は openlm_mono-<version>.tgz です。インストールには約 20 分かかります。その大半は、インストール後とアップグレードのたびに Kafka トピックを作成する kafkainitpod コンポーネントの処理です。2 つのコンポーネントは、起動時に移行とシード処理を実行するため、初回の準備完了までに時間がかかります。identity(最大 15 分)と usersandgroupsservice(最大 60 分)です。処理が終わるまで待ってください。

ノードアフィニティ​

既定では、チャートはメインのワークロードを openlm.com/role=main ラベルの付いたノードにのみ、Spark のレポート用ワークロードを openlm.com/role=spark ラベルの付いたノードにのみスケジュールします。また、これらのワークロードには、同じ値の openlm.com/role taint に対する toleration が付与されます。デプロイパスの環境セットアップに示されているとおり、メインノードとレポート用ノードにこれらのラベルを付けてください。

ノードにこれらのラベルがない場合は、ノードアフィニティと toleration を無効にします。無効にしないと、Pod はノードに割り当てられず Pending のままになります。

global:
affinity:
enabled: false
taints:
enabled: false

この場合、ワークロードは任意のノードで実行されます。

デプロイの確認​

すべての Pod が起動するまで確認します。

kubectl get pods -n openlm -w

Pod がクラッシュしている場合は、次のコマンドを実行します。

# Check pod logs
kubectl logs <pod-name> -n openlm

# Check pod events (image pull failures, resource limits, scheduling issues)
kubectl describe pod <pod-name> -n openlm

設定したドメインで OpenLM Platform のホームページが表示されます。

OpenLM Platform が応答することを確認するには、FQDN に対して次のリクエストを実行します。各行のコメントは、想定されるステータスコードです。

H=https://openlm.example.com
curl -sk -o /dev/null -w '%{http_code}\n' $H/ # 200
curl -sk -o /dev/null -w '%{http_code}\n' $H/identity/.well-known/openid-configuration # 200
curl -sk -o /dev/null -w '%{http_code}\n' $H/api/licensemanager/bff/user # 401
curl -sk -o /dev/null -w '%{http_code}\n' $H/api/agents-hub/announce # 200

3 つ目のリクエストで 401 ではなく 404 が返る場合、identity が正常になる前にサービスが起動し、セキュリティなしで動作しています。identity を修正してから、バックエンドのコンポーネントを再起動してください。

インストール後​

このセクションでは、identity の再起動、レポート用ビューの作成、ライセンスのアップロード、Apache Superset と SMTP の設定を説明します。

identity を 1 回再起動する​

すべての Pod が起動したら、identity を 1 回再起動します。再起動しないと、identity がデータをシードした後に登録されたコンポーネントで、シークレットの検証が失敗し続けます。次のコマンドを実行します。

kubectl -n openlm rollout restart deploy/openlm-identity
kubectl -n openlm rollout status deploy/openlm-identity

レポート用ビューを作成する​

Spark の抽出、変換、ロード(ETL)プロセスはレポート用データベースのテーブルを作成しますが、ビューは作成しません。OpenLM から提供されたレポート用 SQL スクリプトを、番号順にレポート用データベースに対して実行してください。rollback スクリプトは除外します。sqlcmd -b は使用しないでください。いくつかのスクリプトは想定内の警告を出力し、-b を指定するとそれが失敗として扱われます。次のループを実行します。

for f in $(ls 0*_openlm_sqlserver_*.sql | grep -v rollback | sort); do
sqlcmd -S <sql-host> -d openlm_reporting -U <sql-user> -C -i "$f"
done

製品を有効化する前にライセンスをアップロードする​

まず ライセンスファイルのアップロード の説明に従って OpenLM のライセンスファイルをアップロードし、その後で 製品を有効化 してください。ライセンスの登録前に有効化した製品は、約 12 時間「ライセンスなし」と表示されたままになります。

Apache Superset のデプロイ(任意)​

レポート用ダッシュボードとして Apache Superset をデプロイする場合は、次の手順を実行します。

  1. 専用 namespace を作成します。

    kubectl create namespace apache-superset
  2. TLS secret を作成します。

    kubectl create secret tls openlm-lb-cert \
    --key <your-domain>.key \
    --cert <your-domain>.crt \
    -n apache-superset

    <your-domain> は、実際の証明書ファイルの名前に置き換えます。

  3. values.yaml を設定します。

    • lbfqdn に別サブドメインを設定します。例: superset-openlm.yourcompany.com
    • Redis と PostgreSQL の接続を supersetNode.connections に設定します。
    • PostgreSQL を外部公開していない場合は、postgresql.enabled: true で同梱インスタンスを有効にします。
  4. Apache Superset をインストールします。

    helm install superset superset.tgz \
    -f values.yaml \
    -n apache-superset

SMTP 設定​

OpenLM Platform は、アラートと通知のメールを Simple Mail Transfer Protocol(SMTP)サーバー経由で送信します。セルフホスト環境では、SMTP サーバーは Helm の values ではなく、インストール後に OpenLM Platform の UI で設定します。

  1. Navigation メニュー(ヘッダーのグリッドアイコン)で、Platform Administration、Notifications、Email Notifications の順に選択します。
  2. SMTP サーバーの Sender Email、Host、Port を入力します。
  3. サーバーで認証が必要な場合は、Security をオンにして、SMTP Username と SMTP Password を入力します。
  4. 接続を暗号化するには、SSL をオンにします。OpenLM Platform は STARTTLS を使用します(通常はポート 587)。暗黙的 TLS のみを受け付けるサーバー(通常はポート 465)はサポートされていません。
  5. Test Email Recipients にアドレスを追加します。
  6. Send Sample Email を選択します。送信に成功すると「Email was sent, check inbox please.」と表示されます。
  7. Save を選択します。

チケット通知には、Ticketing Notifications ページに専用の送信者アカウントがあります。両方のページについては、通知 を参照してください。

サンプルメールが失敗する理由​

OpenLM Platform はサンプルメールの送信を 20 秒間隔で 3 回試行するため、「Unable to send emails.」が表示されるまで約 2 分かかることがあります。表示されたら、次の手順を実行します。

  1. メール通知の Pod を見つけてログを確認します。SMTP error on attempt で始まる行を探します。

    kubectl get pods -n openlm | grep -i notif
    kubectl logs -n openlm <email-notification-pod>
  2. Pod の内部から接続をテストします。クラスターの外向きのネットワークアクセスは、ワークステーションとは異なる場合があります。

    kubectl exec -it -n openlm <email-notification-pod> -- sh
    nslookup <smtp-host>
    nc -vz <smtp-host> 587
    openssl s_client -starttls smtp -connect <smtp-host>:587 -crlf
  3. ホスト名は解決されるのに接続がタイムアウトする場合は、ファイアウォールまたは外向きのプロキシがクラスターからの SMTP 送信をブロックしています。ネットワークチームに許可を依頼してください。OpenLM Platform 側では解決できません。

  4. 接続できるのにサンプルメールが失敗する場合は、ポート、SSL の設定、資格情報を確認します。

Pod の監視​

すべての Pod が正常であることを確認します。

kubectl get pods -n openlm

再起動ループに入っている Pod があれば、ログとイベントを確認して調査してください。

ドキュメントチームは、大規模言語モデルを使ってこのページを下書きすることがあります。公開前に、テクニカルライターがすべてのページをレビューし、製品と照らし合わせて検証します。最終的な判断は人間が行います。