Automation Suite
2022.4
偽
- 概要
- 要件
- インストール
- インストール後
- クラスターの管理
- 製品を管理する
- ArgoCD でクラスターを管理する
- ObjectStore を永続ボリュームから RAW ディスクに移行する
- 手動: Ceph データ プールをレプリケートされたものからイレージャーコーディングされたプールに移行する
- 自動: Ceph データ プールをレプリケートされたものからイレージャーコーディングされたプールに移行する
- 監視とアラート機能
- 移行とアップグレード
- 製品固有の設定
- ベストプラクティスとメンテナンス
- トラブルシューティング
- インストール時にサービスをトラブルシューティングする方法
- クラスターをアンインストールする方法
- オフライン成果物をクリーンアップしてディスク領域を改善する方法
- Redis データをクリアする方法
- Istio ログを有効化する方法
- ログを手動でクリーンアップする方法
- sf-logs バンドルに保存されている古いログをクリーンアップする方法
- AI Center のストリーミング ログを無効化する方法
- 失敗した Automation Suite インストールをデバッグする方法
- アップグレード後に古いインストーラーからイメージを削除する方法
- Longhorn スナップショットを自動的にクリーンアップする方法
- NIC チェックサムオフロードを無効にする方法
- RHEL 8.4 OS でオフライン インストールを実行できない
- バンドルのダウンロード中のエラー
- バイナリがないため、オフライン インストールが失敗する
- オフライン インストールでの証明書の問題
- Longhorn のセットアップ中に最初のインストールが失敗する
- SQL 接続文字列の検証エラー
- selinux iscsid モジュールの前提条件の確認が失敗する
- Azure ディスクが SSD としてマークされない
- 証明書の更新後のエラー
- OS のアップグレード後に Automation Suite が動作しない
- Automation Suite で Backlog_wait_time を 1 に設定する必要がある
- ワークロードの準備ができていないためボリュームをマウントできない
- インストールおよびアップグレード中に RKE2 が失敗する
- 管理ポータルのタイムアウト期間を設定する
- 基になるディレクトリ接続を更新する
- 移行後にログインできない
- Kinit: Cannot Find KDC for Realm <AD Domain> While Getting Initial Credentials
- kinit: Keytab contains no suitable keys for *** while getting initial credentials
- GSSAPI operation failed with error: An invalid status code was supplied (Client's credentials have been revoked).
- Alarm received for failed kerberos-tgt-update job
- SSPI Provider: Server not found in Kerberos database
- Login Failed for User <ADDOMAIN><aduser>.Reason: The Account Is Disabled.
- ArgoCD へのログインに失敗した
- サンドボックス イメージを取得できない
- ポッドが ArgoCD UI に表示されない
- Redis プローブの障害
- RKE2 サーバーの起動に失敗する
- UiPath 名前空間でシークレットが見つからない
- 初期インストール後、ArgoCD アプリが Progressing ステートになる
- MongoDB ポッドが CrashLoopBackOff になるか、削除後に PVC プロビジョニングの保留中になる
- Unexpected inconsistency; run fsck manually
- クラスターの復元後に MongoDB またはビジネス アプリケーションの機能が低下する
- self-heal-operator および sf-k8-utils リポジトリが見つからない
- クラスターの復元またはロールバック後にサービスが異常になる
- RabbitMQ ポッドが CrashLoopBackOff でスタックする
- Prometheus が CrashloopBackoff ステートでメモリ不足 (OOM) エラーを伴う
- 監視ダッシュボードに Ceph-rook メトリックが表示されない
- Automation Suite 診断ツールを使用する
- Automation Suite サポート バンドル ツールを使用する
- ログを確認する
手動: Ceph データ プールをレプリケートされたものからイレージャーコーディングされたプールに移行する
Automation Suite インストール ガイド
最終更新日 2024年4月24日
手動: Ceph データ プールをレプリケートされたものからイレージャーコーディングされたプールに移行する
Ceph オブジェクトを格納できるストレージ領域があるファイル システム パスを選択する必要があります。たとえば、
server0
の Kubernetes ノードの /ceph-data
パスを使用するとします。
重要: このホスト パスを使用するように Ceph ツールを調整し、以降のコマンドはすべて同じマシン (この場合は
server0
) 上で実行する必要があります。
export ROOK_CEPH_EXPORT_PATH="/ceph-data"
export ROOK_CEPH_EXPORT_PATH="/ceph-data"
Ceph クラスター内のオブジェクトが使用するストレージ領域を表示するには、次のコマンドを実行します。
ceph_objects_bytes=$(kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph status --format json | jq -r '.pgmap.data_bytes')
numfmt --to=iec-i $ceph_objects_bytes
ceph_objects_bytes=$(kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph status --format json | jq -r '.pgmap.data_bytes')
numfmt --to=iec-i $ceph_objects_bytes
手順 1 で選択したパスを使用するように Ceph ツールを準備するには、次の手順を実行します。
-
rook-ceph-object-store
に対して自己回復を無効化します。kubectl -n argocd patch application rook-ceph-operator --type=json -p '[{"op":"replace","path":"/spec/syncPolicy/automated/selfHeal","value":false}]' kubectl -n argocd patch application rook-ceph-object-store --type=json -p '[{"op":"replace","path":"/spec/syncPolicy/automated/selfHeal","value":false}]' kubectl -n argocd patch application fabric-installer --type=json -p '[{"op":"replace","path":"/spec/syncPolicy/automated/selfHeal","value":false}]'
kubectl -n argocd patch application rook-ceph-operator --type=json -p '[{"op":"replace","path":"/spec/syncPolicy/automated/selfHeal","value":false}]' kubectl -n argocd patch application rook-ceph-object-store --type=json -p '[{"op":"replace","path":"/spec/syncPolicy/automated/selfHeal","value":false}]' kubectl -n argocd patch application fabric-installer --type=json -p '[{"op":"replace","path":"/spec/syncPolicy/automated/selfHeal","value":false}]' -
Ceph ツールのデプロイを編集して、
${ROOK_CEPH_EXPORT_PATH}
を Kubernetes ノード (server0) にマウントします。kubectl -n rook-ceph patch deploy rook-ceph-tools --type='json' -p='[{"op": "add", "path":"/spec/template/spec/nodeName", "value": "server0"},{"op": "add", "path":"/spec/template/spec/volumes/2", "value": {"name":"ceph-export", "hostPath": {"path": "'${ROOK_CEPH_EXPORT_PATH}'", "type":"Directory"} }}, {"op":"add", "path": "/spec/template/spec/containers/0/volumeMounts/2", "value": {"name": "ceph-export", "mountPath": "'${ROOK_CEPH_EXPORT_PATH}'"}},{"op": "remove", "path": "/spec/template/spec/containers/0/resources/limits"}]' kubectl -n rook-ceph rollout status deploy rook-ceph-tools
kubectl -n rook-ceph patch deploy rook-ceph-tools --type='json' -p='[{"op": "add", "path":"/spec/template/spec/nodeName", "value": "server0"},{"op": "add", "path":"/spec/template/spec/volumes/2", "value": {"name":"ceph-export", "hostPath": {"path": "'${ROOK_CEPH_EXPORT_PATH}'", "type":"Directory"} }}, {"op":"add", "path": "/spec/template/spec/containers/0/volumeMounts/2", "value": {"name": "ceph-export", "mountPath": "'${ROOK_CEPH_EXPORT_PATH}'"}},{"op": "remove", "path": "/spec/template/spec/containers/0/resources/limits"}]' kubectl -n rook-ceph rollout status deploy rook-ceph-tools -
ツール ポッドに
${ROOK_CEPH_EXPORT_PATH}
内での書き込みを許可します。chmod 777 ${ROOK_CEPH_EXPORT_PATH}
chmod 777 ${ROOK_CEPH_EXPORT_PATH}
-
rook-ceph
名前空間を除く他のすべての名前空間からrook-ceph
名前空間にアクセスするトラフィックをブロックします。kubectl apply -f - <<EOF kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: namespace: rook-ceph name: block-rook-ceph-from-other-ns spec: podSelector: matchLabels: ingress: - from: - podSelector: {} EOF
kubectl apply -f - <<EOF kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: namespace: rook-ceph name: block-rook-ceph-from-other-ns spec: podSelector: matchLabels: ingress: - from: - podSelector: {} EOF -
RGW のデプロイを再実行し、他の名前空間から既に確立されている接続を閉じます。
for rgw_deploy in $(kubectl -n rook-ceph get deploy -l app=rook-ceph-rgw -o name);do kubectl -n rook-ceph rollout restart "${rgw_deploy}" kubectl -n rook-ceph rollout status "${rgw_deploy}" done
for rgw_deploy in $(kubectl -n rook-ceph get deploy -l app=rook-ceph-rgw -o name);do kubectl -n rook-ceph rollout restart "${rgw_deploy}" kubectl -n rook-ceph rollout status "${rgw_deploy}" done
クラスター オブジェクト数を表示するには、次のコマンドを実行します。
BEFORE_MIGRATION_DATA_POOL_OBJECT_COUNT=$(kubectl -n rook-ceph exec deploy/rook-ceph-tools -- rados df --format json | jq -r --arg poolName "rook-ceph.rgw.buckets.data" '.pools[] | select(.name==$poolName).num_objects')
echo "BEFORE_MIGRATION_DATA_POOL_OBJECT_COUNT=${BEFORE_MIGRATION_DATA_POOL_OBJECT_COUNT}"
BEFORE_MIGRATION_DATA_POOL_OBJECT_COUNT=$(kubectl -n rook-ceph exec deploy/rook-ceph-tools -- rados df --format json | jq -r --arg poolName "rook-ceph.rgw.buckets.data" '.pools[] | select(.name==$poolName).num_objects')
echo "BEFORE_MIGRATION_DATA_POOL_OBJECT_COUNT=${BEFORE_MIGRATION_DATA_POOL_OBJECT_COUNT}"
移行後にオブジェクト数を再チェックして、データが失われていないことを確認することをお勧めします。
Ceph データ プールをエクスポートするには、次のコマンドを実行します。
nohup kubectl -n rook-ceph exec deploy/rook-ceph-tools -- rados -p 'rook-ceph.rgw.buckets.data' export --workers 5 ${ROOK_CEPH_EXPORT_PATH}/ceph-data-pool >> /tmp/ceph-data-pool-export.log 2>&1 &
wait $!
if [[ $? -eq 0 && -f ${ROOK_CEPH_EXPORT_PATH}/ceph-data-pool ]]; then
echo "Export ran successfully"
else
echo "Error while running export"
fi
nohup kubectl -n rook-ceph exec deploy/rook-ceph-tools -- rados -p 'rook-ceph.rgw.buckets.data' export --workers 5 ${ROOK_CEPH_EXPORT_PATH}/ceph-data-pool >> /tmp/ceph-data-pool-export.log 2>&1 &
wait $!
if [[ $? -eq 0 && -f ${ROOK_CEPH_EXPORT_PATH}/ceph-data-pool ]]; then
echo "Export ran successfully"
else
echo "Error while running export"
fi
rook-ceph
Operator をスケール ダウンするには、次のコマンドを実行します。
kubectl -n rook-ceph scale --replicas=0 deployment/rook-ceph-operator
kubectl -n rook-ceph scale --replicas=0 deployment/rook-ceph-operator
イレージャーコーディングされたプールを再作成するには、次のコマンドを実行します。
kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph osd pool rm rook-ceph.rgw.buckets.data rook-ceph.rgw.buckets.data --yes-i-really-really-mean-it --yes-i-really-really-mean-it-not-faking
kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph osd crush rule rm rook-ceph.rgw.buckets.data
kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph osd erasure-code-profile set rook-ceph_ecprofile k=2 m=1 crush-failure-domain=host
kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph osd pool create rook-ceph.rgw.buckets.data erasure rook-ceph_ecprofile
kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph osd pool set rook-ceph.rgw.buckets.data compression_mode none
kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph osd pool application enable rook-ceph.rgw.buckets.data rook-ceph-rgw --yes-i-really-mean-it
kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph osd pool rm rook-ceph.rgw.buckets.data rook-ceph.rgw.buckets.data --yes-i-really-really-mean-it --yes-i-really-really-mean-it-not-faking
kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph osd crush rule rm rook-ceph.rgw.buckets.data
kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph osd erasure-code-profile set rook-ceph_ecprofile k=2 m=1 crush-failure-domain=host
kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph osd pool create rook-ceph.rgw.buckets.data erasure rook-ceph_ecprofile
kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph osd pool set rook-ceph.rgw.buckets.data compression_mode none
kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph osd pool application enable rook-ceph.rgw.buckets.data rook-ceph-rgw --yes-i-really-mean-it
データをデータ プールにインポートするには、次のコマンドを実行します。
nohup kubectl -n rook-ceph exec deploy/rook-ceph-tools -- rados -p 'rook-ceph.rgw.buckets.data' import --workers 5 ${ROOK_CEPH_EXPORT_PATH}/ceph-data-pool >> /tmp/ceph-data-pool-import.log 2>&1 &
wait $!
if [[ $? -eq 0 ]]; then
echo "Import ran successfully"
else
echo "Error while running import"
fi
nohup kubectl -n rook-ceph exec deploy/rook-ceph-tools -- rados -p 'rook-ceph.rgw.buckets.data' import --workers 5 ${ROOK_CEPH_EXPORT_PATH}/ceph-data-pool >> /tmp/ceph-data-pool-import.log 2>&1 &
wait $!
if [[ $? -eq 0 ]]; then
echo "Import ran successfully"
else
echo "Error while running import"
fi
読み込まれたデータを確認するには、次のコマンドを実行します。
try=120
return_code=1
for index in $(seq 0 "${try}"); do
AFTER_MIGRATION_DATA_POOL_OBJECT_COUNT=$(kubectl -n rook-ceph exec deploy/rook-ceph-tools -- rados df --format json | jq -r --arg poolName "rook-ceph.rgw.buckets.data" '.pools[] | select(.name==$poolName).num_objects')
if [[ $AFTER_MIGRATION_DATA_POOL_OBJECT_COUNT -eq $BEFORE_MIGRATION_DATA_POOL_OBJECT_COUNT ]]; then
return_code=0
break
fi
[[ $index -eq $try ]] || sleep 5
done
if [[ $return_code -eq 0 ]]; then
echo "Found equal object count(${BEFORE_MIGRATION_DATA_POOL_OBJECT_COUNT})"
else
echo "Found difference in object count for pool before(${BEFORE_MIGRATION_DATA_POOL_OBJECT_COUNT}) and after(${AFTER_MIGRATION_DATA_POOL_OBJECT_COUNT})"
echo "Please raise a support ticket with uipath to complete the migration"
fi
try=120
return_code=1
for index in $(seq 0 "${try}"); do
AFTER_MIGRATION_DATA_POOL_OBJECT_COUNT=$(kubectl -n rook-ceph exec deploy/rook-ceph-tools -- rados df --format json | jq -r --arg poolName "rook-ceph.rgw.buckets.data" '.pools[] | select(.name==$poolName).num_objects')
if [[ $AFTER_MIGRATION_DATA_POOL_OBJECT_COUNT -eq $BEFORE_MIGRATION_DATA_POOL_OBJECT_COUNT ]]; then
return_code=0
break
fi
[[ $index -eq $try ]] || sleep 5
done
if [[ $return_code -eq 0 ]]; then
echo "Found equal object count(${BEFORE_MIGRATION_DATA_POOL_OBJECT_COUNT})"
else
echo "Found difference in object count for pool before(${BEFORE_MIGRATION_DATA_POOL_OBJECT_COUNT}) and after(${AFTER_MIGRATION_DATA_POOL_OBJECT_COUNT})"
echo "Please raise a support ticket with uipath to complete the migration"
fi
一時的な変更を元に戻すには、次のコマンドを実行します。
kubectl -n argocd patch application rook-ceph-operator --type=json -p '[{"op":"replace","path":"/spec/syncPolicy/automated/selfHeal","value":true}]'
kubectl -n argocd patch application rook-ceph-object-store --type=json -p '[{"op":"replace","path":"/spec/syncPolicy/automated/selfHeal","value":true}]'
kubectl -n argocd patch application fabric-installer --type=json -p '[{"op":"replace","path":"/spec/syncPolicy/automated/selfHeal","value":true}]'
kubectl -n rook-ceph scale --replicas=1 deployment/rook-ceph-operator
kubectl -n rook-ceph patch deploy rook-ceph-tools --type='json' -p='[{"op": "remove", "path":"/spec/template/spec/nodeName"},{"op": "remove", "path":"/spec/template/spec/volumes/2"}, {"op":"remove", "path": "/spec/template/spec/containers/0/volumeMounts/2"},{"op": "add", "path": "/spec/template/spec/containers/0/resources/limits", "value": {"memory": "256Mi"}}]'
kubectl -n rook-ceph delete NetworkPolicy block-rook-ceph-from-other-ns
kubectl -n argocd patch application rook-ceph-operator --type=json -p '[{"op":"replace","path":"/spec/syncPolicy/automated/selfHeal","value":true}]'
kubectl -n argocd patch application rook-ceph-object-store --type=json -p '[{"op":"replace","path":"/spec/syncPolicy/automated/selfHeal","value":true}]'
kubectl -n argocd patch application fabric-installer --type=json -p '[{"op":"replace","path":"/spec/syncPolicy/automated/selfHeal","value":true}]'
kubectl -n rook-ceph scale --replicas=1 deployment/rook-ceph-operator
kubectl -n rook-ceph patch deploy rook-ceph-tools --type='json' -p='[{"op": "remove", "path":"/spec/template/spec/nodeName"},{"op": "remove", "path":"/spec/template/spec/volumes/2"}, {"op":"remove", "path": "/spec/template/spec/containers/0/volumeMounts/2"},{"op": "add", "path": "/spec/template/spec/containers/0/resources/limits", "value": {"memory": "256Mi"}}]'
kubectl -n rook-ceph delete NetworkPolicy block-rook-ceph-from-other-ns
ここで、設定と実際のステートの同期を確実に維持する必要があります。そのためには、次のコマンドを実行して、ArgoCD 構成を更新します。
kubectl -n argocd get application fabric-installer -o json | jq 'if ([.spec.source.helm.parameters[].name] | index ("global.rook.dataPoolType")) == null then .spec.source.helm.parameters += [{"name": "global.rook.dataPoolType" , "value": "erasure-coded"}] else (.spec.source.helm.parameters[] | select(.name == "global.rook.dataPoolType").value) |= "erasure-coded" end' | kubectl apply -f -
kubectl -n argocd get application fabric-installer -o json | jq 'if ([.spec.source.helm.parameters[].name] | index ("global.rook.dataPoolType")) == null then .spec.source.helm.parameters += [{"name": "global.rook.dataPoolType" , "value": "erasure-coded"}] else (.spec.source.helm.parameters[] | select(.name == "global.rook.dataPoolType").value) |= "erasure-coded" end' | kubectl apply -f -
- 手順 1: Ceph オブジェクトのパスを選択する
- ステップ 2: パスを使用するように Ceph ツールを準備する
- 手順 3: 他の名前空間から
rook-ceph
名前空間へのアクセスをブロックする - 手順 4: クラスター オブジェクト数を表示する
- 手順 5: Ceph データ プールをエクスポートする
- 手順 6:
rook-ceph
Operator をスケール ダウンする - 手順 7: イレージャーコーディングされたプールを再作成する
- 手順 8: データをデータ プールにインポートする
- 手順 9: 読み込まれたデータを検証する
- 手順 10: 一時的な変更を元に戻す
- 手順 11: ArgoCD 構成を更新する