vantage-operator と vantage-selfhosted のチャートは、同じバージョンを使用する必要があります。このページの例では、両方のチャートにバージョン 0.70.13 を使用しています。参照アーキテクチャ
サポート対象および検証済みのコンポーネントのバージョンについては、Compatibility を参照してください。インフラストラクチャの完全な一覧とサイジングの基準については、Prerequisites を参照してください。
始める前に
次の値とリソースをあらかじめ用意してください。
また、次のものも必要です。
$your_vantage_hostnameの DNS レコード (ingress のエントリ ポイントに名前解決されるもの) 。- そのホスト名に対する有効な TLS 証明書。
- レジストリで認証が必要な場合は、Kubernetes の registry pull シークレット。
- Secret aliases に記載されているすべてのアプリケーション シークレット。
- データベース エイリアスごとに一意の論理データベース名。各サービスの マイグレーター は初回実行時にデータベースを作成します。
- TechCore worker 用のラベルが付いたノード。
クラスターの準備
ArgoCD を設定する
ArgoCD をインストールし、ApplicationSet Progressive Syncs を有効にします。また、移行先の レジストリ から Vantage component のチャートを取得できる OCI リポジトリ接続も ArgoCD に必要です。 ArgoCD private repository documentation に従って、移行先の レジストリ を OCI Helm リポジトリとして登録します。レジストリの認証情報は、ArgoCD のApplication マニフェストに直接記述するのではなく、既存のシークレット管理システムで管理してください。
サービスメッシュを構成する
Vantage では、ワークロード間で mTLS が必要です。サポートされているサービスメッシュをインストールして運用し、Vantage をインストールする前に$install_namespace のメッシュインジェクションを有効にします。
たとえば、Linkerd の場合:
TechCore workerノードの構成
TechCore workerのワークロードは、k8s.abbyy.com/techcore=true ラベルが付いたノードを選択します。TechCore プール内の各ノードにラベルと taint を設定してください。
Pending のままになります。学習ワーカーの分離については Kubernetes ノード要件を、プールごとの容量については サイジングを参照してください。
永続ストレージを Configure
Vantage をインストールする前に、StorageClass を作成または選択します。ストレージ実装は、本番環境で必要な可用性、耐久性、容量、拡張性、バックアップ、復旧の要件を満たしている必要があります。
これを Vantage の values で参照します。
StorageClass の名前は Kubernetes ディストリビューションに依存しません。開発クラスターのローカル ストレージ クラスを、損失やフェールオーバーの特性を評価せずに本番環境へそのままコピーしないでください。
Vantage は、指定したクラス上に独自の PersistentVolumeClaims をプロビジョニングします。どの StorageClass にも、次の 2 つの要件が適用されます。
- プロビジョニングされたボリュームは、非 root ユーザーが書き込み可能でなければなりません。 Vantage のサービスは non-root で実行されます。ボリュームの mount ディレクトリーが root 所有で、コンテナー ユーザーに書き込み権限がない場合 (たとえば、モードが
0755の場合) 、blobstorage サービスは起動時のファイル システム チェックに失敗し、ホストの初期化は中断され、ストレージに依存するすべてのサービスがDegradedになります。 - PVC の
storageClassNameは変更できません。 既存のインストールを別の StorageClass に移行するには、新しいクラス上で operator の PVC を削除して再作成します。
nfs StorageClass が提供されます。ドライバーのノード プラグインには NFS の mount ユーティリティが含まれているため、クラスター ノードに追加の NFS パッケージは不要です。
csi-driver-nfs を使用する場合:
- このドライバーを使用するには、既存の構成済み NFSv3 または NFSv4 サーバーが必要です。Vantage にはドライバーもサーバーも含まれておらず、どちらも自分でインストールして運用する必要があります。
- StorageClass で
mountPermissions: "0777"を設定します。プロビジョナーは各ボリュームのサブディレクトリーを root 所有で作成するため、0755のディレクトリーには Vantage サービス ユーザーは書き込めません。 - NFS サーバーはすべてのノードから到達可能であり、共有を
rw,sync,all_squash,insecure,no_subtree_check,anonuid=65532,anongid=65532でエクスポートしている必要があります。anonuid/anongidを伴うall_squashマッピングにより、CSI ドライバーを含むすべてのクライアントが uid/gid65532として扱われ、Vantage pod のセキュリティ コンテキストと一致します。insecureは、コンテナー化された NFS クライアントが使用する非特権ポートからの接続を許可します。これがないと、サーバーはそれらの接続を黙って拒否し、ストレージへの書き込みは目に見えるエラーなしで失敗します。 - エクスポート ルート ディレクトリーの所有者は
65532:65532、モードは0755である必要があります。実行中のサーバーで/etc/exportsまたは所有権を変更した後は、exportfs -raで再エクスポートします。
データベースを準備する
Vantage は SQL Server と PostgreSQL をサポートしています。provider は必ず以下のとおり正確に設定してください。値では大文字と小文字が区別されます:SqlServer と PostgreSQL です。Postgresql や PostgreSql のような値は、アプリケーションのデータ プロバイダー名と一致しないため、ランタイムで失敗する可能性があります。
すべての Vantage サービスは、それぞれ別個の論理データベースを使用する必要があります。各サービスは独自にマイグレーションを実行するため、複数のサービスを 1 つのデータベースに向けると、マイグレーションの状態が競合します。データベース名と接続文字列を計画するには、Database aliases 配下のデータベース一覧を利用してください。データベースを手動で作成する必要はありません。各サービスのマイグレーターが初回実行時にデータベースを作成します。
PostgreSQL の接続文字列は、先頭・末尾・途中に改行文字を含まない 1 行である必要があります。
Kubernetes Secrets を準備する
Kubernetes secrets プロバイダーは、$install_namespace 内の Kubernetes ネイティブの Secret リソースを読み取ります。Vantage は Vault やその他の外部シークレットストアに直接接続しません。External Secrets Operator、CSI ドライバー、またはその他の同期ツールを使用する場合は、Vantage をインストールする前に、必要な Kubernetes Secrets が作成されるように設定してください。
Kubernetes provider を選択します。
objects を使用して、エイリアスを別のシークレットにマッピングします:
Database__ConnectionStringキーを使用する場合は、サービスごとに個別のSecretを作成し、各データベース エイリアスをvantage.secrets.kubernetes.objectsを通じてマッピングします。シークレット管理システムでは、共通の接続文字列テンプレートからこれらのSecretを生成できますが、生成される各接続文字列では、それぞれ異なるデータベース名を指定する必要があります。
operator は、事前チェック時にシークレット構成を検証します。対応する
vantage-operatorチャートとvantage-selfhostedチャートでは、Vantage リリースの名前空間でのみバインドされる ClusterRole を通じて、operator に Secrets への読み取りアクセスを付与します。operator の名前空間やコントローラーの ServiceAccount をカスタマイズする場合は、Vantage チャート内の対応するoperator値を、そのインストールに合わせてください。カスタムのresourceNames制限には、Kubernetes provider が参照するすべてのSecretを含める必要があります。レジストリアクセスを設定する
レジストリアクセスには、3 つの独立した利用主体があります。
各利用主体が実行される名前空間に、レジストリのシークレットを作成します。values ファイルには、平文のレジストリパスワードを記載しないでください。
OCI 移行では、ソースおよび宛先の認証情報シークレットを参照します。
vantage.serviceAccountName で指定された ServiceAccount の imagePullSecrets に追加します。
コンポーネントの pod が別の ServiceAccount で実行されている場合は、その ServiceAccount にもレジストリのプルアクセスが必要です。名前空間の
default ServiceAccount を変更する前に、pod の spec.serviceAccountName を確認してください。自動スケーリングとメトリクスを設定する
KEDA のサポートは任意ですが、推奨されています。KEDA 2.17.3 を使用してください。KEDA 2.18 以降では、現在の Vantage workload チャートで使用されている scaler field が削除されたため、必要な HPA を作成できません。 一部の VantageScaledObject リソースは、この固定アドレスの Prometheus をクエリします。
- KEDA 2.17.3 をインストールします。
observability名前空間に Prometheus Operator と Prometheus インスタンスをインストールします。- それを管理する Service の名前が
prometheus-operatedで、ポート9090を公開していることを確認します。 - Vantage の
ServiceMonitorを検出できるように Prometheus を設定します。
Vantage リソースで KEDA を有効にし、別個のトップレベル observability スタンザでチャートの ServiceMonitor を有効にします:
observability は最上位のキーです。vantage の下にネストしないでください。トリガー戦略、検証、キャパシティプランニングについては、KEDA を使用したオートスケーリングを参照してください。メッシュ固有のスクレイピング設定については、Prometheus による監視を参照してください。
ingress と TLS を設定する
チャートに組み込まれている ingress は Istio 用です。Traefik または他の ingress コントローラーを使用する場合は、これを無効にしてください:- 信頼できる証明書を使用して、
vantage.dnsRecordの HTTPS を終端すること。 - Vantage UI、API、認証、ヘルプ、SCIM、URL-shortener、ワークスペース、Verification、Try Any Skill の各パスを、それぞれ対応する Service にルーティングすること。
- Vantage で使用される
/api/vN/から/publicapi/vN/への書き換え、および/api/、SCIM、ハートビートの書き換えを適用すること。 - UI のキャッチオールルートよりも前に、より具体的なルートを優先してマッチさせること。
- 元の host とスキームを転送すること。これには、TLS が ingress controller で終端される場合の
X-Forwarded-Proto: httpsも含まれます。
IngressRoute と順序付けされた Middleware リソースで実装します。ルートマニフェストは、バージョン管理される Vantage の構成として扱ってください。別の環境の値をそのままコピーするのではなく、ご利用のリリースに合わせて、hostname、名前空間、証明書用シークレット、生成される Service 名をパラメーター化してください。
ルーティング仕様
$install_namespace 内で生成された Kubernetes Service 名を確認し、以下の順序でこれらのルートを実装します。正規表現ルートと完全一致ルートは、プレフィックスルートおよびキャッチオールルートより優先する必要があります。
チャートに組み込まれている Istio ingress は、クライアントに不要な内部ステータス情報を公開する
/api/status と /api/status/config もブロックします。これらのパスをブロックすることが推奨されますが、Vantage の動作に必須ではありません。使用している ingress コントローラー が直接拒否レスポンスを返せない場合は、一般的な /api ルールの前に、これらのパスを専用の拒否バックエンドにルーティングできます。
HTTPS スキームの転送
TLS が ingress コントローラーで終端され、バックエンド接続が HTTP の場合、Vantage の認証サービスはX-Forwarded-Proto を認識する必要があります。これを行わないと、OIDC の Discovery Document で http:// エンドポイントが通知され、ブラウザーでのサインインが失敗します。vantage.reverseProxy を true に設定して、この構成を有効にしてください。
オペレーターをインストールする
クラスターにオペレーターのインスタンスを1つインストールします。--wait の前にこのオプションをコマンドに追加します:
Vantage をインストールする
上で準備した設定をまとめた values ファイルを作成します。この簡略化した例では、セルフマネージド環境に固有の値のみを示しています。実際の環境に合わせて、完全なシークレットのマッピングと レジストリ の認証情報を追加してください。vantage-selfhosted チャートをインストールします。
インストールを監視する
カスタムリソースがReady になるまで待ちます:
Ready だけで判断しないでください。
Ready を示した後も継続することがあります。
- 生成されたすべての ArgoCD application が
SyncedかつHealthyであること。 - Vantage の pod が実行中で、mesh がインジェクトされていること。
- Prometheus で Vantage の
/metrics-textターゲットがUPと表示されていること。 - KEDA の
ScaledObjectリソースがReadyで、HPA のメトリクス値が<unknown>ではないこと。 - OIDC の Discovery Document とブラウザーのリダイレクトで
https://URL が使用されていること。 https://$your_vantage_hostnameで Vantage にアクセスできること。
次のステップ
シークレット
Kubernetes Secret のエイリアス、認証キーペア、データベース接続文字列。
監視
サービスメッシュ経由で Vantage をスクレイプするように Prometheus を設定します。
トラブルシューティング
operator、データベース、レジストリ、Ingress、オートスケーリングの障害を診断します。
アップグレード
operator と Vantage のチャートをまとめてアップグレードします。
