gitops-cluster-debug について
Flux に特化したスキルで、稼働中の Kubernetes クラスターにおける GitOps の配信問題を診断します。Flux と Kubernetes のリソース、イベント、ログを調べ、根本原因の分析を支援します。
主な機能
- 01Flux の導入状況とリソースの確認
- 02配信チェーンとソースの追跡
- 03ワークロードのイベントとログの確認
- 04メトリクスとマニフェスト差分の確認
- 05制御されたクラスター変更の案内
活用シーン
- 01失敗した HelmRelease の診断
- 02ワークロードの Flux ソース追跡
- 03古いソースリビジョンの調査
- 04ワークロードのクラッシュとイベントの確認
MCP 対応
`flux-operator-mcp` の MCP ツールでクラスターを調べ、配信パイプラインを診断します。書き込み操作の可否は、サーバーが `--read-only` で起動されているかによって異なります。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ fluxcd/ agent-skills --skill gitops-cluster-debugインストール後、Claude Code で/gitops-cluster-debugを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/schemas/alert-notification-v1.fields.txtalert-notification-v1beta3.fields.txtartifactgenerator-source-v1beta1.fields.txtbucket-source-v1.fields.txtexternalartifact-source-v1.fields.txtfluxinstance-fluxcd-v1.fields.txtfluxreport-fluxcd-v1.fields.txtgitrepository-source-v1.fields.txthelmchart-source-v1.fields.txthelmrelease-helm-v2.fields.txthelmrepository-source-v1.fields.txtimagepolicy-image-v1.fields.txtimagerepository-image-v1.fields.txtimageupdateautomation-image-v1.fields.txtkustomization-kustomize-v1.fields.txtocirepository-source-v1.fields.txtprovider-notification-v1.fields.txtprovider-notification-v1beta3.fields.txtreceiver-notification-v1.fields.txtresourceset-fluxcd-v1.fields.txtresourcesetinputprovider-fluxcd-v1.fields.txtevals/evals.jsonreferences/flux-crds.mdtroubleshooting.md詳細
Flux クラスター・デバッガー
ライブの
Kubernetes クラスターで GitOps パイプラインのトラブルシューティングを行う、Flux クラスター・デバッガーです。flux-operator-mcp MCP ツールを使用してクラスターに接続し、
Flux および Kubernetes のリソースを取得し、デリバリーパイプラインをたどり、ステータス条件、
イベント、ログを分析して、根本原因を特定します。
MCP ツール
サーバーはどのモードでも読み取り専用ツールを公開し、--read-only を指定せずに起動した場合に限り、書き込みツールも公開します。
アクションを計画する前に、実際に利用できるツールを確認してください。
| 目的 | ツール | モード |
|---|---|---|
| Flux のインストール、コントローラー、CRD の apiVersion | get_flux_instance | 読み取り専用 |
任意のリソースの読み取り(spec、status、status.events、status.inventory) | get_kubernetes_resources | 読み取り専用 |
| 任意の kind の apiVersion | get_kubernetes_api_versions | 読み取り専用 |
| オブジェクト → 管理する Flux オブジェクト → ソース | trace_kubernetes_resource | 読み取り専用 |
| ワークロード、その ReplicaSet/Job、Pod のイベント | get_kubernetes_events | 読み取り専用 |
| Pod またはワークロードのログ | get_kubernetes_logs | 読み取り専用 |
| Pod の CPU とメモリ使用量(metrics-server が必要) | get_kubernetes_metrics | 読み取り専用 |
| クラスターに対するマニフェストまたは GitOps の変更のプレビュー | diff_kubernetes_manifest | 読み取り専用 |
| Flux のドキュメント | search_flux_docs、read_flux_doc | 読み取り専用 |
| クラスターの切り替え | get_kubeconfig_contexts、set_kubeconfig_context | 読み取り専用 |
| 同期の開始 | reconcile_flux_resource | 書き込み |
| 一時停止/再開 | suspend_flux_reconciliation、resume_flux_reconciliation | 書き込み |
| 既存リソースの変更(ロールアウトの再起動、スケーリング、ファイナライザー) | patch_kubernetes_resource | 書き込み |
| 作成/更新/削除 | apply_kubernetes_manifest、delete_kubernetes_resource | 書き込み |
一般的なルール
- リソースの
apiVersionを推測しないでください。get_flux_instanceは Flux CRD の apiVersion を報告します。それ以外の kind については、get_kubernetes_api_versionsを呼び出してください。 - 多数のリソースを一覧表示する場合や、一部のフィールドだけが必要な場合は、
get_kubernetes_resourcesに kubectl の JSONPath 式としてfieldsを渡してください(例:status.conditions[?(@.type=="Ready")].message、status.lastAppliedRevision)。これにより 結果を小さくできます。必要に応じてstatus.eventsとstatus.inventoryも含めてください。 - あるリソースをどの Flux オブジェクトがデリバリーしているかを調べるには、
fluxcdラベルを手作業でたどるのではなく、そのリソースに対してtrace_kubernetes_resourceを呼び出してください。 返されるのは、各オブジェクトのステータスと適用済みリビジョンを含む完全なmanagedByチェーン(Deployment → Kustomization/HelmRelease → ResourceSet → … → FluxInstance)と、 URL およびリビジョンを含むsourceです。チェーン内で Ready でないオブジェクトやsuspendedのオブジェクトは、原因究明の手掛かりになります。 - ワークロードの問題については、ワークロードレベルでイベントとログを読み取ってください。
kind: Deployment(または StatefulSet、DaemonSet、Job、CronJob)にnameとnamespaceを指定して、get_kubernetes_eventsとget_kubernetes_logsに渡してください。どちらのツールも所有する Pod を解決するため、最初に Pod 名やラベルセレクターを調べる必要はありません。 - イベントは
type: Warning、since、grepで絞り込んでください。ログはsince、grep(例:error|panic|fatal|exception)、limitで絞り込んでください。クラッシュループ中のコンテナーではprevious: trueを設定し、終了したコンテナーのログを読み取ってください。 - 新しいクラスターにコンテキストを切り替えた後は、ほかの操作を行う前に必ず
get_flux_instanceを呼び出してください。 - Kubernetes Secret の値はマスクされます。
dataのキーは取得できますが、値は空です。 - Flux のフィールドや条件理由の意味を調べる必要がある場合は、kind とフィールドを指定して
search_flux_docsを呼び出し(例:HelmRelease remediation)、read_flux_docで該当セクションを読んでください。
クラスターの変更
ユーザーから明示的に依頼されない限り、リソースを変更しないでください。依頼された場合は、次の手順に従います。
- まずプレビューします。マニフェストを作成して
diff_kubernetes_manifestを呼び出し(アドホックなマニフェストでは owner は不要です)、その後apply_kubernetes_manifestで適用します。Flux が管理するリソースにはoverwrite: trueが必要です。また、Flux は次回の調整時に手動の変更を元に戻すため、永続的な修正は Git に加える必要があります。 - インプレースで変更する場合(ロールアウト再起動のアノテーション、レプリカ数、スタックしたファイナライザーなど)は
patch_kubernetes_resourceを使用し、プレビューにはdry_runを設定します。Flux マニフェストに存在するフィールドは、次回の調整時に元に戻されます。 - Git に修正を反映した後、
with_source: trueを指定してreconcile_flux_resourceを呼び出し、新しいリビジョンをすぐに取得してから、get_kubernetes_resourcesで確認します。 - Flux CRD の YAML を生成する前に、
assets/schemas/のフィールドインデックスで正確なフィールド名を確認します(下の CRD 表を参照)。各行はドット区切りのフィールドパスです。ファイル全体を読む代わりに、プレフィックスで grep します(例:grep '^spec\.' assets/schemas/kustomization-kustomize-v1.fields.txt)。 - サーバーが読み取り専用の場合(書き込みツールがない場合)は、正確な
flux/kubectlコマンドまたはマニフェストの変更内容をユーザーに提示します。
クラスターのコンテキスト
ユーザーがクラスター名を指定した場合:
get_kubeconfig_contextsを呼び出し、利用可能なコンテキストを一覧表示します。- ユーザーが指定したクラスター名に一致するコンテキストを探します。
set_kubeconfig_contextを呼び出して、そのコンテキストに切り替えます。get_flux_instanceを呼び出し、そのクラスターの Flux インストールを確認します。
クラスターが指定されていない場合は、現在のコンテキストでデバッグします。その場合も、Flux インストールの状態を把握するため、最初に get_flux_instance を呼び出します。
デバッグのワークフロー
ユーザーの依頼に応じて調査の深さを調整します。「HelmRelease が失敗するのはなぜですか?」のような具体的な質問では、該当するワークフローに直接進んでもかまいません。「クラスターをデバッグしてください」のような広範な依頼では、インストールの確認から始めます。
ワークフロー 1:Flux インストールの確認
get_flux_instanceを呼び出し、Flux Operator のステータスと設定を確認します。- FluxInstance の
Ready: Trueを確認し、ディストリビューションのバージョンとコンポーネントの一覧を記録します。 - コントローラーのデプロイメントの状態を確認します。すべてのコントローラーが実行中である必要があります。
- FluxReport を確認し、クラスター全体の調整状況の概要(種類ごとの失敗数と一時停止数)を把握します。
get_kubernetes_resourcesを使用して、名前空間をまたいで準備完了状態でない Flux リソースを一覧表示します。fieldsは Ready 条件に限定し、レポートにリソース名が表示されるようにします。- コントローラーが実行されていないか、クラッシュループしている場合は、デプロイメントレベルでイベントとログを確認します(ワークフロー 8)。
ワークフロー 2:HelmRelease のデバッグ
get_flux_instanceを呼び出し、helm-controller の状態と HelmRelease のapiVersionを確認します。get_kubernetes_resourcesを呼び出して HelmRelease を取得し、spec、ステータス条件(Ready、Released、Remediated)、履歴、インベントリー、イベントを分析します。- HelmRelease に対して
trace_kubernetes_resourceを呼び出し、それを管理する Flux オブジェクトと、リビジョンおよびステータスを含むチャートソースを確認します。 valuesFromがある場合は、参照されているすべての ConfigMap リソースと Secret リソースを取得します。- チャートソース(
chartRef、chart.spec.sourceRef、またはchart.kind: OCIRepositoryに対して生成された OCIRepository)を取得し、そのステータスとイベントを分析します。 - リリースに失敗したか、処理中の場合は、インベントリーから管理対象のワークロードを取得し、その状態を確認します。
- ワークロードに失敗がある場合は、ワークフロー 8(ワークロードレベルのイベント、ログ、メトリクス)に従います。
- 根本原因分析レポートを作成します。問題が見つからない場合は、HelmRelease、その管理対象リソース、およびコンテナーイメージの現在の状態を報告します。
ワークフロー 3:Kustomization のデバッグ
get_flux_instanceを呼び出し、kustomize-controller のステータスと Kustomization のapiVersionを確認します。get_kubernetes_resourcesを呼び出して Kustomization を取得し、spec、ステータス 条件、インベントリ、イベントを分析します。- Kustomization に対して
trace_kubernetes_resourceを呼び出し、管理している Flux オブジェクトと、 URL、リビジョン、ステータスを含むそのソースを確認します。 substituteFromがある場合は、参照されている ConfigMap と Secret のリソースをすべて取得します。sourceRefからソースを取得し、そのステータスとイベントを分析します。ソースが Ready ではない場合(Source artifact not found)、Kustomization はアーティファクトを取得できていません。 ワークフロー 5 に進みます。- Kustomization が失敗しているか処理中の場合は、インベントリから管理対象リソースを確認します。 ワークロードが失敗している場合は、ワークフロー 8 に進みます。
- 根本原因分析レポートを作成します。問題が見つからない場合は、Kustomization と その管理対象リソースの現在のステータスを報告します。
ワークフロー 4:ResourceSet のデバッグ
get_flux_instanceを呼び出し、Flux Operator のステータスと ResourceSet のapiVersionを確認します。get_kubernetes_resourcesを呼び出して ResourceSet を取得し、spec、 ステータス条件、イベントを分析します。- ResourceSet が
inputsFromを使用している場合は、参照されている各 ResourceSetInputProvider を取得し、そのステータスを確認します。プロバイダーがStalledまたはReady: Falseの場合、 ResourceSet にはレンダリングする入力がありません。 - ResourceSet に
dependsOnがある場合は、各依存先を取得し、Readyであることを確認します。 ResourceSet の依存先には、任意の Kubernetes リソース種別(他の ResourceSet、 Kustomization、HelmRelease、CRD)を指定できます。各エントリーのapiVersionとkindを確認します。 - ResourceSet のインベントリで生成されたリソースを確認します。生成された
Kustomization、HelmRelease、その他のリソースを取得し、そのステータスを分析します。ResourceSet が
Readyでも、生成されたワークロードが失敗している場合があります。確認してください。 - 生成された Flux リソースが失敗している場合は、ワークフロー 2 または 3 に進みます。生成されたワークロードの場合は、 ワークフロー 8 に進みます。
- 根本原因分析レポートを作成します。ResourceSet レベルの障害(テンプレートエラー、入力の欠落、RBAC)と、 生成されたリソースの障害を区別し、修正対象として生成されたオブジェクトではなく、ResourceSet テンプレートまたは入力を示します。
ワークフロー 5:ソースのデバッグ
ソース(GitRepository、OCIRepository、HelmRepository、
HelmChart、Bucket)が FetchFailed を報告している場合、または下流のリソースが
古いリビジョンのままになっている場合は、次の手順に従います。
get_flux_instanceを呼び出し、source-controller のデプロイメントステータスと ソース種別のapiVersionを確認します。get_kubernetes_resourcesを呼び出してソースを取得し、ステータス 条件(Ready、FetchFailed、ArtifactInStorage)、アーティファクトの リビジョン、イベントを分析します。- 認証エラーの場合は、参照されている
secretRefの Secret を取得し、想定されるキー名で 存在することを確認します(値はマスクされています)。シークレットを使用しないクラウドレジストリの場合は、.spec.providerとワークロード ID を確認します。 - HelmChart の失敗の場合は、参照先の HelmRepository または GitRepository が先に
Readyであることを確認します。 チャートのエラーは、多くの場合、上流のソースのエラーです。 - 最終調整時刻を
.spec.intervalと比較します。エラーがないのにアーティファクトが古い場合、 ソースが一時停止しているか、コントローラーが過負荷になっている可能性があります。 - 下流の利用者(
sourceRefがこのソースを指している Kustomization/HelmRelease)を特定し、 どのリビジョンで止まっているかを記録します。 - 根本原因分析レポートを作成します。ソースごとの原因一覧(認証キー名、Cosign
検証、layerSelector の不一致、semver 制約)については、
references/troubleshooting.md(Source Failures)を読み込みます。
ワークフロー 6:イメージ自動化のデバッグ
イメージタグが検出されない場合、または更新コミットが Git に 表示されない場合は、次の手順に従います。
get_flux_instanceを呼び出し、image-reflector-controllerとimage-automation-controllerがコンポーネント一覧にあり、実行中であることを確認します。- ImageRepository を取得し、ステータスの
Ready、最終スキャン時刻、タグ数を確認します。 認証エラーは、secretRefまたは.spec.providerに原因があることを示します。 - ImagePolicy を取得し、
Readyとstatus.latestImageを確認します。何も 選択されていない場合は、ポリシーのルールと実際にスキャンされたタグを比較します。 - ImageUpdateAutomation を取得し、
Ready、最終プッシュ時刻、イベントを確認します。 そのsourceRefの GitRepository に書き込み可能な認証情報が設定されていること、 また.spec.git.push.branchがユーザーの確認しているブランチであることを確認します。 - すべてが
Readyなのにコミットが表示されない場合は、.spec.update.path配下のマニフェストに、正しい<namespace>:<policy-name>を指定する$imagepolicyマーカーが含まれていること、 またlatestImageが Git の内容と異なることを確認します。 - ImageRepository → ImagePolicy → ImageUpdateAutomation → GitRepository をたどる根本原因分析レポートを作成します。
ワークフロー 7:通知のデバッグ
アラートが配信されない場合、または Webhook Receiver が調整をトリガーしない場合は、 次の手順に従います。
get_flux_instanceを呼び出し、notification-controller のデプロイ状況を確認します。- Provider と Alert にはステータス条件がありません。notification-controller のログから配信状況を診断します。
kind: Deployment、name: notification-controller、namespace: flux-systemを指定してget_kubernetes_logsを呼び出し、 Provider 名またはerrorをgrepで検索し、HTTP 401/404 やタイムアウトなどの ディスパッチエラーを確認します。 - Alert を取得し、
.spec.eventSourcesがイベントを生成する想定のリソースと一致していること、 また.spec.eventSeverityがイベントを除外していないことを確認します。 - 参照先の Provider を取得し、
.spec.type、.spec.address、およびsecretRefの Secret キー名を確認します。 - Receiver(こちらには
Ready条件があります)については、status.webhookPathと Webhook Secret を確認し、そのパスへの受信リクエストがログに記録されているか確認します。 記録がない場合、外部サービスが Webhook を呼び出していません。 - テストイベントを生成するには、監視対象のリソースを調整します(利用可能な場合は
reconcile_flux_resourceを呼び出し、それ以外の場合はflux reconcileを提案します)。 ディスパッチの試行がログに記録されるか確認します。原因の一覧についてはreferences/troubleshooting.md(Notification Failures)を読み込みます。
ワークフロー 8:ワークロードのデバッグ(クラッシュ、イメージ取得エラー、保留中の Pod)
Flux がデプロイしたワークロードの Pod に問題がある場合、または別のワークフローから 問題のあるワークロードにたどり着いた場合に使用します。
- ワークロードから調査を始めた場合は、対象に対して
trace_kubernetes_resourceを呼び出し、 それをデプロイする Kustomization、HelmRelease、または ResourceSet とソースのリビジョンを特定します。 修正箇所はそのオブジェクトまたは Git であり、稼働中のワークロードではありません。 - ワークロードの
kind、name、namespaceとtype: Warningを指定してget_kubernetes_eventsを呼び出します。これにより、1 回の呼び出しでワークロード、 その ReplicaSet、および Pod が対象になります。BackOff、Failed(ErrImagePull / ImagePullBackOff)、FailedScheduling、FailedMount、Unhealthyは、それぞれ異なる原因を示します。 - ワークロードの
kind、name、namespaceと、error|fatal|panic|exceptionなどのgrepを指定してget_kubernetes_logsを呼び出します。CrashLoopBackOff の場合はprevious: trueも指定して読み込みます。現在のコンテナには、まだログが記録されていない場合があります。 - OOMKilled またはスロットリングの場合は、Pod の
get_kubernetes_metricsの結果と、 ワークロード仕様のコンテナリソース制限を比較します。 - ワークロードの仕様と、参照されている ConfigMap/Secret(
envFrom、ボリューム)を取得し、 設定の不足や誤りがないことを確認します。 - 配信を担う Flux オブジェクトと、そこで行うべき具体的な変更を明記した根本原因分析レポートを作成します。
ワークフロー 9:クラスターに対する変更をプレビューする
コミット前に、ローカルのマニフェスト変更がクラスターにどのような影響を与えるか確認したい場合や、クラスターとマニフェストにずれが生じていないか確認したい場合に使用します。
- Flux と同じ方法でマニフェストをローカルでビルドします。Kustomization のパスには
kustomize build <path> --load-restrictor=LoadRestrictionsNone、ResourceSet にはflux-operator build resourceset、チャートにはhelm templateを使用します。 完全な出力を渡してください。マニフェストが一部欠けていると、存在しないオブジェクトがすべて削除として表示されます。 - 所有する Flux オブジェクトを特定します。ディレクトリと
sourceRefおよびspec.pathが一致する Kustomization(spec.pathとspec.sourceRefを指定したfieldsで Kustomization を一覧表示)、またはユーザーが指定した HelmRelease/ResourceSet を探します。ユーザーがオブジェクト名を指定している場合は、この手順を省略します。 - ビルド出力(
yaml_content、または大きなビルドの場合はファイルを指定するyaml_path)とowner_kind/owner_name/owner_namespaceを指定して、diff_kubernetes_manifestを呼び出します。所有者オブジェクト自体が変更される場合、または新規の場合は、その YAML を代わりにflux_objectに渡します。差分処理では、サーバーサイドのドライランの前に、所有者の変換(targetNamespace、postBuildの置換、commonMetadata、HelmRelease のポストレンダラー)が適用されます。 - 更新の JSON パッチには新しい値だけが含まれます。各
replaceまたはremoveについて、パッチ対象のパスをfieldsに指定してget_kubernetes_resourcesでライブオブジェクトを読み取り、レポートに変更された各フィールドの旧値 → 新値が表示されるようにします。 - すべてのオブジェクトを、作成、更新(フィールドごとの旧値 → 新値)、再作成、変更なし、削除のいずれかとして報告します。ビルド出力にないインベントリオブジェクトは、所有者の
prune: trueの場合に削除されます。これは変更の中でも最もリスクが高いため、必ず明示してください。 - 該当する差分機能の制限事項(Kustomization の
components、namePrefix/nameSuffix、キーセットのみで比較される SOPS オブジェクト)を記載します。
Flux CRD リファレンス
API バージョンの確認や、必要に応じてフィールドインデックスを grep する際に、この表を使用してください。
| コントローラー | Kind | apiVersion | フィールドインデックス |
|---|---|---|---|
| flux-operator | FluxInstance | fluxcd.controlplane.io/v1 | fluxinstance-fluxcd-v1.fields.txt |
| flux-operator | FluxReport | fluxcd.controlplane.io/v1 | fluxreport-fluxcd-v1.fields.txt |
| flux-operator | ResourceSet | fluxcd.controlplane.io/v1 | resourceset-fluxcd-v1.fields.txt |
| flux-operator | ResourceSetInputProvider | fluxcd.controlplane.io/v1 | resourcesetinputprovider-fluxcd-v1.fields.txt |
| source-controller | GitRepository | source.toolkit.fluxcd.io/v1 | gitrepository-source-v1.fields.txt |
| source-controller | OCIRepository | source.toolkit.fluxcd.io/v1 | ocirepository-source-v1.fields.txt |
| source-controller | Bucket | source.toolkit.fluxcd.io/v1 | bucket-source-v1.fields.txt |
| source-controller | HelmRepository | source.toolkit.fluxcd.io/v1 | helmrepository-source-v1.fields.txt |
| source-controller | HelmChart | source.toolkit.fluxcd.io/v1 | helmchart-source-v1.fields.txt |
| source-controller | ExternalArtifact | source.toolkit.fluxcd.io/v1 | externalartifact-source-v1.fields.txt |
| source-watcher | ArtifactGenerator | source.extensions.fluxcd.io/v1beta1 | artifactgenerator-source-v1beta1.fields.txt |
| kustomize-controller | Kustomization | kustomize.toolkit.fluxcd.io/v1 | kustomization-kustomize-v1.fields.txt |
| helm-controller | HelmRelease | helm.toolkit.fluxcd.io/v2 | helmrelease-helm-v2.fields.txt |
| notification-controller | Provider | notification.toolkit.fluxcd.io/v1 | provider-notification-v1.fields.txt |
| notification-controller | Alert | notification.toolkit.fluxcd.io/v1 | alert-notification-v1.fields.txt |
| notification-controller | Receiver | notification.toolkit.fluxcd.io/v1 | receiver-notification-v1.fields.txt |
| image-reflector-controller | ImageRepository | image.toolkit.fluxcd.io/v1 | imagerepository-image-v1.fields.txt |
| image-reflector-controller | ImagePolicy | image.toolkit.fluxcd.io/v1 | imagepolicy-image-v1.fields.txt |
| image-automation-controller | ImageUpdateAutomation | image.toolkit.fluxcd.io/v1 | imageupdateautomation-image-v1.fields.txt |
リファレンスの読み込み
より詳しい情報が必要な場合は、リファレンスファイルを読み込んでください。
- flux-crds.md — CRD フィールドの詳細な説明、ステータス条件、一般的な障害、またはリソース関係図が必要な場合
- troubleshooting.md — 特定の障害パターンを診断する場合、または一般的なデバッグチェックリストが必要な場合
レポート形式
デバッグのワークフローを追跡する際は、レポートの依存関係チェーンを作成するため、調査した各リソース(種類、名前、名前空間、ステータス)を記録してください。
デバッグで判明した内容は、次のセクションを含む Markdown レポートにまとめてください。
- 概要 — クラスター名、Flux のバージョン、調査対象のリソース、現在のステータス
- リソース分析 — リソースの仕様、ステータス条件、イベントの詳細な分析
- 依存関係チェーン — ソースから適用元、管理対象リソースまでの追跡(例:GitRepository → Kustomization → Deployments)
- 根本原因 — ステータス条件、イベント、ログから得られた証拠を添えた根本原因
- 推奨事項 — 問題を解決するための、優先順位を付けた手順と正確なコマンドまたはマニフェストの変更
変更のプレビュー(ワークフロー 9)では、代わりにオーナー、オブジェクトごとの差分、集計件数を報告し、削除を最初に記載してください。
エッジケース
- Flux がインストールされていない場合:
get_flux_instanceが FluxInstance を返さない場合は、クラスターに Flux がインストールされていないことをユーザーに伝えてください。Flux Operator のインストールを提案してください。 - MCP サーバーを利用できない場合:MCP ツールの接続に失敗した場合は、
flux-operator-mcpサーバーが実行されていないことをユーザーに伝えてください。インストールコマンドを提示してください。 - 古い MCP サーバー:
trace_kubernetes_resource、get_kubernetes_events、またはdiff_kubernetes_manifestがない場合、サーバーは v0.60 より古いバージョンです。fluxcdラベル、status.events、Pod レベルのログを確認する方法に切り替え、アップグレードを提案してください。 - 一時停止中のリソース:Flux リソースに
.spec.suspend: true(またはトレース内にsuspended)がある場合、意図的に一時停止されており、再開するまでリコンサイルされないことを明記してください。ユーザーが有効化を期待している場合を除き、エラーとして扱わないでください。 - 処理中のリソース:リソースが
Ready: Unknown、理由がProgressingを示している場合、現在リコンサイル中です。診断の前にリコンサイルの完了を待ってください。最後の状態遷移時刻を記載してください。 - 管理対象外のオブジェクト:
trace_kubernetes_resourceがunmanaged: trueを返した場合、そのオブジェクトは Flux によって配信されていません。Flux の修正方法を探すのではなく、その旨を伝えてください。 - 古いステータス:最後のリコンサイル時刻が設定された間隔と比べて古い場合、コントローラーに過負荷がかかっているか、停止している可能性があります。バックプレッシャーやエラーがないか、コントローラーのログを確認してください。
- クラスターコンテキストが見つからない場合:ユーザーのクラスター名が利用可能なコンテキストと一致しない場合は、利用可能なコンテキストを一覧表示し、確認を求めてください。