19.17. GitOps ZTP のトラブルシューティング
前述のように、ArgoCD パイプラインは、Git リポジトリーからハブクラスターに SiteConfig
および PolicyGenTemplate
カスタムリソース (CR) を同期します。このプロセスで、同期後フックはハブクラスターにも適用されるインストールおよびポリシー CR を作成します。このプロセスで発生する可能性のある問題のトラブルシューティングを行うには、以下の手順に従います。
19.17.1. インストール CR の生成の検証
SiteConfig
は、サイト名と一致する名前を持つ namespace のハブクラスターに Installation カスタムリソース (CR) を適用します。ステータスを確認するには、以下のコマンドを入力します。
$ oc get AgentClusterInstall -n <cluster_name>
オブジェクトが返されない場合は、以下の手順を使用して ArgoCD パイプラインフローを SiteConfig
からインストール CR にトラブルシューティングします。
手順
以下のコマンドのいずれかを使用して、
SiteConfig
からハブクラスターへの同期を確認します。$ oc get siteconfig -A
または
$ oc get siteconfig -n clusters-sub
SiteConfig
がない場合、以下のいずれかの状況が発生しました。クラスター アプリケーションは、Git リポジトリーからハブへの CR の同期に失敗しました。以下のコマンドを使用してこれを確認します。
$ oc describe -n openshift-gitops application clusters
Status: Synced
およびRevision:
は、サブスクライブしたリポジトリーにプッシュしたコミットの SHA です。- 同期前のフックが失敗しました。コンテナーイメージのプルに失敗した可能性があります。ArgoCD ダッシュボードで、クラスター アプリケーションで同期前のジョブのステータスを確認します。
post フックのジョブ実行を確認します。
$ oc describe job -n clusters-sub siteconfig-post
-
成功すると、返される出力は
succeeded: 1
となります。 - ジョブが失敗すると、ArgoCD はこれを再試行します。場合によっては、最初のパスが失敗し、2 番目のパスにジョブが渡されることを示すことがあります。
-
成功すると、返される出力は
post フックのジョブでエラーの有無を確認します。
$ oc get pod -n clusters-sub
siteconfig-post-xxxxx
Pod の名前をメモします。$ oc logs -n clusters-sub siteconfig-post-xxxxx
ログでエラーを示す場合は、条件を修正し、修正された
SiteConfig
またはPolicyGenTemplate
を Git リポジトリーにプッシュします。
19.17.2. ポリシー CR の生成の検証
ArgoCD は、ポリシーカスタムリソース (CR) を作成した PolicyGenTemplate
と同じ namespace に生成します。同じトラブルシューティングフローは、共通、グループ、またはサイト ベースであるかに関係なく、PolicyGenTemplate
から生成されたすべてのポリシー CR に適用されます。
ポリシー CR のステータスを確認するには、以下のコマンドを入力します。
$ export NS=<namespace>
$ oc get policy -n $NS
返される出力には、ポリシーラップされた CR の予想されるセットが表示されます。オブジェクトが返されない場合は、以下の手順を使用して ArgoCD パイプラインフローを SiteConfig
からポリシー CR にトラブルシューティングします。
手順
PolicyGenTemplate
のハブクラスターへの同期を確認します。$ oc get policygentemplate -A
または
$ oc get policygentemplate -n $NS
PolicyGenTemplate
が同期されていない場合、以下のいずれかの状況が発生しました。クラスターアプリケーションは、Git リポジトリーからハブへの CR の同期に失敗しました。以下のコマンドを使用してこれを確認します。
$ oc describe -n openshift-gitops application clusters
Status: Synced
およびRevision:
は、サブスクライブしたリポジトリーにプッシュしたコミットの SHA です。- 同期前のフックが失敗しました。コンテナーイメージのプルに失敗した可能性があります。ArgoCD ダッシュボードで、クラスター アプリケーションで同期前のジョブのステータスを確認します。
ポリシーがクラスターの namespace にコピーされていることを確認します。ACM がそのポリシーを
ManagedCluster
に適用すると、ACM はポリシー CR オブジェクトをクラスターの namespace に適用します。$ oc get policy -n <cluster_name>
ACM は、該当する共通、グループ、およびサイトポリシーをすべてここにコピーします。ポリシー名は
<policyNamespace>
および<policyName> です
。クラスター namespace にコピーされないポリシーの配置ルールを確認します。これらのポリシーの
PlacementRule
のmatchSelector
は、ManagedCluster
のラベルと一致する必要があります 。$ oc get placementrule -n $NS
見つからない common、group、または site ポリシーの
PlacementRule
名をメモします。oc get placementrule -n $NS <placmentRuleName> -o yaml
-
status decisions
値にはクラスター名が含まれる必要があります。 仕様の
matchSelector
のkey value
は、マネージドクラスターのラベルと一致する必要があります。ManagedCluster
のラベルを確認します。oc get ManagedCluster $CLUSTER -o jsonpath='{.metadata.labels}' | jq
例
apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: group-test1-policies-placementrules namespace: group-test1-policies spec: clusterSelector: matchExpressions: - key: group-test1 operator: In values: - "" status: decisions: - clusterName: <cluster_name> clusterNamespace: <cluster_name>
-
すべてのポリシーが準拠していることを確認します。
oc get policy -n $CLUSTER
Namespace、OperatorGroup、および Subscription ポリシーが準拠していても、Operator 設定ポリシーが準拠していない場合は、Operator がインストールされていない可能性があります。