automation-suite
2.2510
true
Linux の Automation Suite のインストール ガイド
- 概要
- 要件
- デプロイ テンプレート
- 手動: インストールを準備する
- 手動: インストールを準備する
- 手順 2: オフライン インストール用に OCI 準拠レジストリを設定する
- 手順 3: 外部 ObjectStore を構成する
- 手順 4: High Availability Add-on を構成する
- 手順 5: SQL データベースを構成する
- 手順 7: DNS を構成する
- 手順 8: ディスクを構成する
- 手順 9: カーネルと OS レベルの設定を構成する
- 手順 10: ノード ポートを構成する
- 手順 11: その他の設定を適用する
- 手順 12: 必要な RPM パッケージを検証してインストールする
- 手順 13: cluster_config.json を生成する
- Cluster_config.json のサンプル
- 全般的な構成
- プロファイル構成
- 証明書の設定
- データベースの構成
- 外部 ObjectStore の構成
- 署名済み URL の構成
- ArgoCD の構成
- Kerberos 認証の構成
- 外部の OCI 準拠レジストリの設定
- Disaster Recovery - アクティブ/パッシブおよびアクティブ/アクティブの構成
- High Availability Add-on の構成
- Orchestrator 固有の設定
- Insights 固有の構成
- Process Mining 固有の構成
- Document Understanding 固有の構成
- Automation Suite ロボット固有の構成
- 監視の構成
- 任意: プロキシ サーバーを構成する
- 任意: マルチノードの HA 対応の運用クラスターにおけるゾーン障害に対する復元設定を有効化する
- 任意: カスタムの Resolv.con を渡す
- 任意: フォールト トレランスを向上させる
- GPU がサポートされた専用のエージェント ノードを追加する
- Automation Suite ロボット専用のエージェント ノードを追加する
- 手順 15: オフライン インストール用に一時的な Docker レジストリを設定する
- 手順 16: インストールの前提条件を検証する
- uipathc を実行する
- 手動: インストールを実行する
- インストール後
- クラスターの管理
- 監視とアラート機能
- 移行とアップグレード
- 製品固有の設定
- ベスト プラクティスとメンテナンス
- トラブルシューティング
- インストール時にサービスをトラブルシューティングする方法
- NFS バックアップ ディレクトリの権限を減らす方法
- クラスターをアンインストールする方法
- オフライン成果物をクリーンアップしてディスク領域を改善する方法
- Redis データをクリアする方法
- Istio ログを有効化する方法
- ログを手動でクリーンアップする方法
- sf-logs バケットに保存されている古いログをクリーンアップする方法
- AI Center のストリーミング ログを無効化する方法
- 失敗した Automation Suite インストールをデバッグする方法
- アップグレード後に古いインストーラーからイメージを削除する方法
- TX チェックサム オフロードを無効化する方法
- ArgoCD のログ レベルを手動で Info に設定する方法
- AI Center のストレージを拡張する方法
- 外部レジストリーのエンコードされたpull_secret_valueを生成する方法
- TLS 1.2 で弱い暗号に対処する方法
- TLSのバージョンを確認する方法
- 証明書の操作方法
- Ceph のバックアップとデータの復元をスケジュールする方法
- クラスター内の ObjectStore (Ceph) を使用して DU の使用状況データを収集する方法
- エアギャップ環境に RKE2 SELinux をインストールする方法
- NFS サーバー上の古い差分バックアップをクリーンアップする方法
- FIPS が有効化されたクラスターに Insights をデプロイする方法
- cgroup v2 への移行方法
- 仮想マシンの再起動後に Kerberos 認証を回復する方法
- ローカルの Docker イメージをクラスター内のレジストリにプッシュする方法
- バックアップからバケットを除外する方法
- バンドルのダウンロード中のエラー
- バイナリがないため、オフライン インストールが失敗する
- オフライン インストールでの証明書の問題
- SQL 接続文字列の検証エラー
- Azure ディスクが SSD としてマークされない
- 証明書の更新後のエラー
- TLS 証明書の検証エラー
- ウイルス対策が原因でインストールの問題が発生する
- OS のアップグレード後に Automation Suite が動作しない
- Automation Suite で backlog_wait_time を 0 に設定する必要がある
- RHEL 8.9 でレジストリの一時インストールが失敗する
- オフライン インストール中に uipath 名前空間のデプロイで頻繁に発生する再起動の問題
- DNS 設定が CoreDNS によって受け入れられない
- メモリ不足によりクラスター内レジストリのシーディングが失敗する
- Document Understanding モダン プロジェクトが有効化されていて、AI Center が無効化されている場合、前提条件の確認に失敗します
- Ceph の異常によりアップグレードが失敗する
- 領域の問題のために rke2 が開始しない
- Orchestrator データベース内のクラシック オブジェクトが原因でアップグレードが失敗する
- Ceph クラスターがサイドバイサイド アップグレード後に機能低下ステートで検出される
- Apps のサービス アップグレードの失敗
- インプレース アップグレードのタイムアウト
- オフライン環境でアップグレードが失敗する
- アップグレード後に snapshot-controller-crds ポッドが CrashLoopBackOff ステートになる
- Insights の PVC サイズが上書きされたためにアップグレードが失敗する
- 大文字のホスト名が原因でアップグレードが失敗する
- 管理ポータルのタイムアウト期間を設定する
- 移行後に認証が機能しない
- Kinit: Cannot find KDC for realm <AD Domain> while getting initial credentials
- kinit: Keytab contains no suitable keys for *** while getting initial credentials
- 無効なステータス コードが原因で GSSAPI 操作が失敗した
- Alarm received for failed kerberos-tgt-update job
- SSPI Provider: Server not found in Kerberos database
- アカウントが無効なため AD ユーザーのログインに失敗した
- ArgoCD へのログインに失敗した
- 基になるディレクトリ接続を更新する
- サンドボックス イメージを取得できない
- ポッドが ArgoCD UI に表示されない
- Redis プローブの障害
- RKE2 サーバーの起動に失敗する
- UiPath 名前空間でシークレットが見つからない
- 初回インストール後に ArgoCD が進行中ステートになる
- ArgoCD リポジトリ サーバー ポッドが CrashLoopBackOff になる
- 手動による ArgoCD ネットワーク ポリシーの軽減策 (GHSA-47m3-95c7-g2g8)
- Ceph-rook のメトリックが監視ダッシュボードに表示されない
- 診断ヘルスチェック中に報告されたエラーの不一致
- uipathctl で作成されたワークロードのリソース要求と制限を設定する
- アップストリームに正常な問題はありません
- Redis の起動がウイルス対策によってブロックされる
- TLS 証明書の検証が有効化されていると、AI Center と Document Understanding ポッドの起動に失敗する
- Fluentd では、IPv6 環境ではログはエクスポートされません
- デスクトップ版の Studio では Integration Service のコネクタとアクティビティを読み込めない
- Process Mining で高可用性を実行する
- Kerberos を使用してログインすると、Process Mining を取り込むことができなかった
- pyodbc 形式の接続文字列を使用して AutomationSuite_ProcessMining_Warehouse データベースに接続できない
- Airflow のインストールが「sqlalchemy.exc.ArgumentError: Could not parse rfc1738 URL from string ''」で失敗する
- SQL Server ポート 1433 を使用する IP テーブル ルールを追加する方法
- CData Sync を実行しているサーバーの Automation Suite の証明書が信頼されない
- 診断ツールを実行する
- Automation Suite サポート バンドルを使用する
- ログを確認する
重要 :
このコンテンツの一部は機械翻訳によって処理されており、完全な翻訳を保証するものではありません。
新しいコンテンツの翻訳は、およそ 1 ~ 2 週間で公開されます。
提供された bash スクリプトを使用して、ローカルで利用可能な Docker イメージを Automation Suite 高可用性 (HA) クラスター内レジストリ内のすべてのレジストリ ポッドにプッシュします。
このスクリプトを使用して、ローカルで利用可能な Docker イメージを、Automation Suite 高可用性 (HA) クラスター内レジストリ内のすべてのレジストリ ポッドにプッシュします。
注:
クラスター内のレジストリには、HA 環境に複数のレプリカがあります。registry.FQDN 経由で Docker イメージをプッシュしても機能しません。Docker イメージをすべてのレジストリ ポッドにプッシュするには、代わりに次のスクリプトを使用します。
前提条件
プッシュする Docker イメージが、ローカルの Podman ストアの localhost:30071の下に存在している必要があります。
手順
-
次のスクリプトをファイルに保存します (例:
push-to-registry.sh#!/bin/bash # Image must already be present in the local Podman store under localhost:30071 # run command as ./script.sh localhost:30071/myimage:1.0.0 set -euo pipefail [[ $# -lt 1 ]] && { echo "Usage: $0 <image-name>"; exit 1; } IMAGE=$1 DOCKER_REGISTRY_NODEPORT=30071 function error() { echo -e "\e[0;31m[ERROR][$(date +'%Y-%m-%dT%H:%M:%S%z')]:\e[0m $*" >&2 exit 1 } function info() { echo "[INFO] [$(date +'%Y-%m-%dT%H:%M:%S%z')]: $*" } function warn() { echo -e "\e[0;33m[WARN] [$(date +'%Y-%m-%dT%H:%M:%S%z')]:\e[0m $*" >&2 } function get_registry_addresses() { local namespace="docker-registry" local lh_registry local server_node_count lh_registry=$(kubectl get deployment -n "${namespace}" docker-registry --ignore-not-found --no-headers | wc -l) server_node_count=$(kubectl get nodes -l "node-role.kubernetes.io/master=true" --no-headers | wc -l) IFS=" " read -r -a registry_addresses <<< \ "$(kubectl get pods -n "${namespace}" -o jsonpath="{.items[*].status.podIP}" -l app=docker-registry)" if [[ "${lh_registry}" -eq 1 ]]; then [[ "${#registry_addresses[@]}" -eq 1 ]] || error "Expected 1 registry pod; found ${#registry_addresses[@]}." else [[ "${#registry_addresses[@]}" -eq "${server_node_count}" ]] || \ error "Expected ${server_node_count} registry pods; found ${#registry_addresses[@]}." fi echo "${registry_addresses[@]}" } podman image exists "localhost:${DOCKER_REGISTRY_NODEPORT}/${IMAGE}" \ || error "Image not found locally: localhost:${DOCKER_REGISTRY_NODEPORT}/${IMAGE}" IFS=" " read -r -a registry_addresses <<< "$(get_registry_addresses)" info "Found ${#registry_addresses[@]} registry pod(s)" for ip in "${registry_addresses[@]}"; do local_ref="localhost:${DOCKER_REGISTRY_NODEPORT}/${IMAGE}" remote_ref="${ip}:5000/${IMAGE}" local try=0 local max_tries=10 local pushed=false info "Tagging ${local_ref} → ${remote_ref}" podman tag "${local_ref}" "${remote_ref}" podman login "${ip}:5000" --tls-verify=false while [[ "${pushed}" == false ]] && (( try < max_tries )); do try=$(( try + 1 )) info "Pushing ${IMAGE} → ${ip}:5000 (attempt ${try}/${max_tries})" if podman push "${remote_ref}" --tls-verify=false; then pushed=true else warn "Push failed — retrying in 60s" sleep 60 fi done [[ "${pushed}" == true ]] || error "Failed to push ${IMAGE} to ${ip}:5000 after ${max_tries} attempts" done info "Done — ${IMAGE} pushed to all registry pods"#!/bin/bash # Image must already be present in the local Podman store under localhost:30071 # run command as ./script.sh localhost:30071/myimage:1.0.0 set -euo pipefail [[ $# -lt 1 ]] && { echo "Usage: $0 <image-name>"; exit 1; } IMAGE=$1 DOCKER_REGISTRY_NODEPORT=30071 function error() { echo -e "\e[0;31m[ERROR][$(date +'%Y-%m-%dT%H:%M:%S%z')]:\e[0m $*" >&2 exit 1 } function info() { echo "[INFO] [$(date +'%Y-%m-%dT%H:%M:%S%z')]: $*" } function warn() { echo -e "\e[0;33m[WARN] [$(date +'%Y-%m-%dT%H:%M:%S%z')]:\e[0m $*" >&2 } function get_registry_addresses() { local namespace="docker-registry" local lh_registry local server_node_count lh_registry=$(kubectl get deployment -n "${namespace}" docker-registry --ignore-not-found --no-headers | wc -l) server_node_count=$(kubectl get nodes -l "node-role.kubernetes.io/master=true" --no-headers | wc -l) IFS=" " read -r -a registry_addresses <<< \ "$(kubectl get pods -n "${namespace}" -o jsonpath="{.items[*].status.podIP}" -l app=docker-registry)" if [[ "${lh_registry}" -eq 1 ]]; then [[ "${#registry_addresses[@]}" -eq 1 ]] || error "Expected 1 registry pod; found ${#registry_addresses[@]}." else [[ "${#registry_addresses[@]}" -eq "${server_node_count}" ]] || \ error "Expected ${server_node_count} registry pods; found ${#registry_addresses[@]}." fi echo "${registry_addresses[@]}" } podman image exists "localhost:${DOCKER_REGISTRY_NODEPORT}/${IMAGE}" \ || error "Image not found locally: localhost:${DOCKER_REGISTRY_NODEPORT}/${IMAGE}" IFS=" " read -r -a registry_addresses <<< "$(get_registry_addresses)" info "Found ${#registry_addresses[@]} registry pod(s)" for ip in "${registry_addresses[@]}"; do local_ref="localhost:${DOCKER_REGISTRY_NODEPORT}/${IMAGE}" remote_ref="${ip}:5000/${IMAGE}" local try=0 local max_tries=10 local pushed=false info "Tagging ${local_ref} → ${remote_ref}" podman tag "${local_ref}" "${remote_ref}" podman login "${ip}:5000" --tls-verify=false while [[ "${pushed}" == false ]] && (( try < max_tries )); do try=$(( try + 1 )) info "Pushing ${IMAGE} → ${ip}:5000 (attempt ${try}/${max_tries})" if podman push "${remote_ref}" --tls-verify=false; then pushed=true else warn "Push failed — retrying in 60s" sleep 60 fi done [[ "${pushed}" == true ]] || error "Failed to push ${IMAGE} to ${ip}:5000 after ${max_tries} attempts" done info "Done — ${IMAGE} pushed to all registry pods" -
スクリプトを実行可能にします。
chmod +x push-to-registry.shchmod +x push-to-registry.sh -
イメージ名を引数として渡してスクリプトを実行します。
./push-to-registry.sh localhost:30071/<image-name>:<tag>./push-to-registry.sh localhost:30071/<image-name>:<tag>
結果の
スクリプトが正常に完了すると、次のようなメッセージが出力されます。
[INFO] [2024-01-01T00:00:00+0000]: Done — localhost:30071/myimage:1.0.0 pushed to all registry pods
[INFO] [2024-01-01T00:00:00+0000]: Done — localhost:30071/myimage:1.0.0 pushed to all registry pods