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 週間で公開されます。
Automation Suite のメモリ不足が原因で発生するクラスター内レジストリのシーディングの失敗に関する既知の問題と回避策。
説明
クラスター内のレジストリをシーディングするには、大きなイメージ アーカイブをメモリに読み込む必要があります。RAM が限られているノードでは、シーディングプロセスがハングしたり、予期せず終了したりする可能性があります。
解決策
この問題を解決するには、次のスクリプトを使用してクラスター内のレジストリをシードします。
#!/bin/bash
set -euo pipefail
[[ $# -lt 1 ]] && { echo "Usage: $0 <bundle>"; exit 1; }
BUNDLE=$1
OFFLINE_FOLDER="/uipath" # don't add / at the end
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 configure_podman() {
local podman_folder="$1"
local podman_config_path="/etc/containers/storage.conf"
local podman_rootless_path="${podman_folder}/podman_rootless"
local podman_rootfull_path="${podman_folder}/podman_rootfull"
if [[ -n "${podman_folder}" ]]; then
info "Configuring podman to use ${podman_folder}"
mkdir -p "${podman_rootless_path}" || exit 1
mkdir -p "${podman_rootfull_path}" || exit 1
# update the graphroot config line
sed -i "s|^\(graphroot[[:space:]]=\).*|\1\"${podman_rootfull_path}\"|" "${podman_config_path}"
# uncomment and update the rootless path config line
sed -i "s|^#[[:space:]]*\(rootless_storage_path[[:space:]]*=\).*|\1\"${podman_rootless_path}\"|" "${podman_config_path}"
fi
# uncomment the mount program
sed -i "/^#mount_program[[:space:]]*=/s|^#||g" "${podman_config_path}"
}
function get_registry_addresses() {
local namespace="docker-registry"
local lh_registry=1
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 "Failed to get address of registry pod."
else
[[ "${#registry_addresses[@]}" -eq "${server_node_count}" ]] || error "Failed to get address of all registry pods."
fi
echo "${registry_addresses[@]}"
}
function import_sf_images() {
local sf_folder="${1}"
local podman_folder="${2}"
local image_inventory="${sf_folder}/sf-images/image-tags.txt"
local image_tar="${sf_folder}/sf-images/images.tar"
info "Populating Docker Registry"
if [[ -z "${podman_folder}" ]]; then
podman_folder="${sf_folder}"
fi
[[ -f "${image_inventory}" ]] || error "Missing ${image_inventory}"
local all_images_present=1
while read -r image_name; do
podman image exists "localhost:${DOCKER_REGISTRY_NODEPORT}/${image_name}" || all_images_present=0
done <"${image_inventory}"
mkdir -p "${podman_folder}/tmp"
info "Executing podman load with podman_folder=${podman_folder}"
# inline ENV for https://github.com/containers/podman/pull/5412 and https://github.com/containers/podman/issues/5960
export TMPDIR="${podman_folder}/tmp"
if ((all_images_present != 1)); then
info "Loading image tar ${image_tar}"
podman load -i "${image_tar}" || error "Failed to load image"
else
info "All images present. Skipping podman load"
fi
registry_addresses=($(get_registry_addresses))
while read -r image_name; do
for ip in "${registry_addresses[@]}"; do
local try=0
local maxtry=10
local status="notready"
podman tag "localhost:${DOCKER_REGISTRY_NODEPORT}/${image_name}" "${ip}:5000/${image_name}"
podman login "${ip}:5000" --tls-verify=false
while [[ ${status} == "notready" ]] && ((try != maxtry)); do
try=$((try + 1))
info "Pushing image ${image_name}...try ${try}/${maxtry}" && sleep 5
podman push "${ip}:5000/${image_name}" \
--tls-verify=false &&
status="ready"
[[ ${status} == "ready" ]] || sleep 60
done
[[ ${status} == "ready" ]] || error "Failed to push image $image_name"
done
done <"${image_inventory}"
info "Populated Docker Registry"
}
tmp_offline_folder="$(mktemp -d -p "${OFFLINE_FOLDER}" -t offline-bundle.XXXXXXXXXX)"
tar -xzf "${BUNDLE}" -C "${tmp_offline_folder}"
podman_folder="$OFFLINE_FOLDER/lib"
mkdir -p $podman_folder
configure_podman "$podman_folder"
import_sf_images "${tmp_offline_folder}" "$podman_folder"
#!/bin/bash
set -euo pipefail
[[ $# -lt 1 ]] && { echo "Usage: $0 <bundle>"; exit 1; }
BUNDLE=$1
OFFLINE_FOLDER="/uipath" # don't add / at the end
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 configure_podman() {
local podman_folder="$1"
local podman_config_path="/etc/containers/storage.conf"
local podman_rootless_path="${podman_folder}/podman_rootless"
local podman_rootfull_path="${podman_folder}/podman_rootfull"
if [[ -n "${podman_folder}" ]]; then
info "Configuring podman to use ${podman_folder}"
mkdir -p "${podman_rootless_path}" || exit 1
mkdir -p "${podman_rootfull_path}" || exit 1
# update the graphroot config line
sed -i "s|^\(graphroot[[:space:]]=\).*|\1\"${podman_rootfull_path}\"|" "${podman_config_path}"
# uncomment and update the rootless path config line
sed -i "s|^#[[:space:]]*\(rootless_storage_path[[:space:]]*=\).*|\1\"${podman_rootless_path}\"|" "${podman_config_path}"
fi
# uncomment the mount program
sed -i "/^#mount_program[[:space:]]*=/s|^#||g" "${podman_config_path}"
}
function get_registry_addresses() {
local namespace="docker-registry"
local lh_registry=1
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 "Failed to get address of registry pod."
else
[[ "${#registry_addresses[@]}" -eq "${server_node_count}" ]] || error "Failed to get address of all registry pods."
fi
echo "${registry_addresses[@]}"
}
function import_sf_images() {
local sf_folder="${1}"
local podman_folder="${2}"
local image_inventory="${sf_folder}/sf-images/image-tags.txt"
local image_tar="${sf_folder}/sf-images/images.tar"
info "Populating Docker Registry"
if [[ -z "${podman_folder}" ]]; then
podman_folder="${sf_folder}"
fi
[[ -f "${image_inventory}" ]] || error "Missing ${image_inventory}"
local all_images_present=1
while read -r image_name; do
podman image exists "localhost:${DOCKER_REGISTRY_NODEPORT}/${image_name}" || all_images_present=0
done <"${image_inventory}"
mkdir -p "${podman_folder}/tmp"
info "Executing podman load with podman_folder=${podman_folder}"
# inline ENV for https://github.com/containers/podman/pull/5412 and https://github.com/containers/podman/issues/5960
export TMPDIR="${podman_folder}/tmp"
if ((all_images_present != 1)); then
info "Loading image tar ${image_tar}"
podman load -i "${image_tar}" || error "Failed to load image"
else
info "All images present. Skipping podman load"
fi
registry_addresses=($(get_registry_addresses))
while read -r image_name; do
for ip in "${registry_addresses[@]}"; do
local try=0
local maxtry=10
local status="notready"
podman tag "localhost:${DOCKER_REGISTRY_NODEPORT}/${image_name}" "${ip}:5000/${image_name}"
podman login "${ip}:5000" --tls-verify=false
while [[ ${status} == "notready" ]] && ((try != maxtry)); do
try=$((try + 1))
info "Pushing image ${image_name}...try ${try}/${maxtry}" && sleep 5
podman push "${ip}:5000/${image_name}" \
--tls-verify=false &&
status="ready"
[[ ${status} == "ready" ]] || sleep 60
done
[[ ${status} == "ready" ]] || error "Failed to push image $image_name"
done
done <"${image_inventory}"
info "Populated Docker Registry"
}
tmp_offline_folder="$(mktemp -d -p "${OFFLINE_FOLDER}" -t offline-bundle.XXXXXXXXXX)"
tar -xzf "${BUNDLE}" -C "${tmp_offline_folder}"
podman_folder="$OFFLINE_FOLDER/lib"
mkdir -p $podman_folder
configure_podman "$podman_folder"
import_sf_images "${tmp_offline_folder}" "$podman_folder"
スクリプトを実行するには、次のコマンドを使用します。
./script.sh <path-to-bundle.tar.gz>
./script.sh <path-to-bundle.tar.gz>