Config Sync の既知の問題

このページでは、サポートされている Config Sync のバージョンの既知の問題について説明します。

ここに記載されている問題の多くはすでに修正されています。修正済みバージョンは、修正が導入されたバージョンを表します。この修正を適用するには、記載されているバージョン以降にアップグレードしてください。

Google Developer Program に参加している場合は、このページを保存して、このページに関連するリリースノートが公開されたときに通知を受け取ることができるようにしてください。詳細については、保存したページをご覧ください。

既知の問題をプロダクト バージョンまたは問題のカテゴリでフィルタするには、次のプルダウン メニューからフィルタを選択します。

Config Sync のバージョンを選択:

問題のカテゴリを選択:

既知の問題をフィルタすることもできます。

カテゴリ 特定されたバージョン 修正済みのバージョン 問題と回避策
指標 1.5.0 1.21.0

修正済み: 削除されたパッケージについて報告された指標

RootSync オブジェクトまたは RepoSync オブジェクトを削除したものの同じ名前の ResourceGroup オブジェクトを削除しない場合、Config Sync はその ResourceGroup オブジェクトの次の指標を引き続き報告します。

  • rg_reconcile_duration_seconds
  • resource_group_total
  • resource_count
  • ready_resource_count
  • resource_ns_count
  • cluster_scoped_resource_count
  • crd_count
  • kcc_resource_count
  • pipeline_error_observed
ResourceGroup オブジェクトは、RootSync オブジェクトまたは RepoSync オブジェクトの削除前に削除の伝播が有効になっている場合にのみ自動的に削除されます。

回避策:

ResourceGroup オブジェクトを削除します。

kubectl delete resourcegroup RESOURCE_GROUP_NAME -n config-management-system

RESOURCE_GROUP_NAME は、削除する必要がある ResourceGroup オブジェクトの名前に置き換えます。ResourceGroup の命名の詳細については、ResourceGroup コントローラと ResourceGroup オブジェクトをご覧ください。

コンポーネントの状態 1.15.0

Reconciler のスケジュールが設定できない

Config Sync Reconciler には、RootSync または RepoSync の構成に応じて、さまざまな量のリソースが必要です。特定の構成では、他の構成よりも多くのリソースが必要になります。

Reconciler がスケジューリングできない場合は、ノードで使用可能な量を超えるリソースをリクエストしている可能性があります。

Standard モードの GKE クラスタを使用している場合、Reconciler リソース リクエストは非常に低く設定されます。この設定は、スロットリングやパフォーマンス低下につながる場合でもあっても、スケジューリングを可能にすることを目的として選択されています。これにより、Config Sync は小規模なクラスタや小規模なノードでも機能します。ただし、GKE Autopilot クラスタでは、同期中の使用状況をより現実的に表すように、Reconciler リクエストが高い値に設定されます。

回避策:

GKE Autopilot または GKE Standard でノード自動プロビジョニングを有効にすると、リソースのリクエスト数を確認して適切なサイズのノードを作成し、スケジューリングを行うことができます。ただし、ノードまたはノード インスタンス サイズを手動で構成する場合は、Reconciler Pod のリソース要件に合わせて、それらの設定の調整が必要になる可能性があります。

指標 1.15.0

エクスポートに失敗しました。権限が却下されました

デフォルトでは、Reconciler マネージャーがアプリケーションのデフォルト認証情報を検出すると、Otel コレクタは Prometheus、Cloud Monitoring、Monarch に指標をエクスポートするように構成されます。

回避策:

Cloud Monitoring を構成していないか、Cloud Monitoring と Cloud Monarch を無効にしていない場合は、otel-collector がエラーをログに記録します。

指標 1.15.0

カスタム構成で otel-collector がクラッシュする

デフォルトの ConfigMap のいずれか(otel-collector または otel-collector-google-cloud)を変更または削除しようとすると、otel-collector でエラーやクラッシュが発生し、必要な ConfigMap を読み込めない場合があります。

回避策:

指標のエクスポート構成をカスタマイズするには、config-management-monitoring 名前空間 に otel-collector-custom という名前の ConfigMap を作成します。

修復

Config Sync が自身と競合している

Config Sync が自身とコントローラの競合状態になっているように見えることがあります。この問題は、Git リポジトリ内のリソースのオプション フィールドにデフォルト値を設定した場合に発生します。たとえば、RoleBinding のサブジェクトに対して apiGroup: "" を設定すると、apiGroup フィールドがオプションになり、空の文字列がデフォルト値になるため、これがトリガーされます。文字列、ブール値、整数のフィールドのデフォルト値は、それぞれ ""false0 です。

回避策:

リソース宣言からフィールドを削除します。

修復

Config Sync が Config Connector リソースと競合している

Config Sync と Config Connector が StorageBucket などのリソースに対して競合状態になっているように見える場合があります。この問題は、信頼できる情報源のリソース spec.lifecycleRule.condition.withState のオプション フィールドの値を設定していない場合に発生します。

回避策:

この問題を回避するには、リソース宣言に withState=ANY フィールドを追加します。または、cnrm.cloud.google.com/state-into-spec: absent アノテーションを使用してリソースを破棄して再取得します。

信頼できる情報源 1.17.3 1.18.3

修正済み: GitHub での Git SSH 認証エラー

git-sync v4.2.1 には、SSH 使用時にリポジトリ URL からユーザー名が削除されるバグがあり、GitHub に接続するときに認証が失敗します。この場合、ユーザーは git である必要があります。

git のエラー メッセージは次のとおりです。git-sync@github.com: Permission denied (publickey).\r\nfatal: Could not read from remote repository.

回避策:

別の認証方法を使用してください。

信頼できる情報源 1.15.0 1.18.0

修正済み: Cloud Source Repositories の認証情報が定期的に無効になる

Cloud Source Repositories の認証トークンが期限切れになると、Config Sync が定期的にエラーになることがあります。この問題は、トークンの更新が期限切れになるまで待ってからトークンを更新すると発生します。

バージョン 1.18.0 以降では、トークンの有効期限が切れてから 5 分以内に最初のリクエストが行われると、トークンが更新されます。これにより、認証情報が実際に無効でない限り、無効な認証情報エラーを防ぐことができます。

信頼できる情報源 1.13.0 1.20.1

修正済み: OCI ソースのアクセス トークンを生成できない

Config Sync が信頼できる情報源として OCI を使用し、Workload Identity Federation for GKE で認証するよう構成されている場合、Config Sync がコンテナ レジストリで認証を試みた際に一時的な KNV2004 エラーが発生することがあります。

この問題は、oauth2 ライブラリがトークンの有効期限が切れた後にのみ認証トークンを更新することにより発生します。

エラー メッセージに、"oauth2/google: unable to generate access token" または "ID Token issued at (xxx) is stale to sign-in." というテキストが含まれる場合があります。

回避策:

Config Sync が信頼できる情報源からのフェッチを次に試行する際に、エラーは自動的に解決します。

Config Sync で複数回エラーが発生すると、再試行の頻度が低下します。Config Sync を強制的に再試行するには、Reconciler Pod を削除します。このアクションにより、Config Sync は Reconciler Pod を再作成し、信頼できる情報源からすぐにフェッチします。

    kubectl delete pod -n config-management-system RECONCILER_NAME
    
RECONCILER_NAME は、RootSync オブジェクトまたは RepoSync オブジェクトの Reconciler 名に置き換えます。
信頼できる情報源 1.19.0 1.20.0

修正済み: Git ロックファイルが残っている

git-sync コンテナから次のようなエラーが返された場合は、前の git 呼び出しが失敗し、コンテナにロックファイルが残っている可能性があります。

    KNV2004: error in the git-sync container: ... fatal: Unable to create '/repo/source/.git/shallow.lock': File exists. ...
    

回避策:

この問題を回避するには、影響を受ける Reconciler Pod を再起動して、新しいエフェメラル ボリュームを Pod に割り当てます。

    kubectl delete pod -n config-management-system RECONCILER_NAME
    
RECONCILER_NAME は、RootSync オブジェクトまたは RepoSync オブジェクトの Reconciler 名に置き換えます。
同期 1.7.0 1.21.0

修正済み: ミューテーションを無視するアノテーションが適用されない

Config Sync 適用ツールのバグにより、client.lifecycle.config.k8s.io/mutation アノテーションが存在する場合でも、宣言された構成の変更が適用されます。これにより、クラスタ内のオブジェクトの状態が上書きされる可能性があります。

回避策:

configmanagement.gke.io/managed: disabled アノテーションを追加すれば、管理対象オブジェクトの管理を停止できます。ただし、管理を無効にすると、オブジェクトがクラスタから削除された場合に Config Sync がオブジェクトを再作成できなくなります。また、今後は信頼できる情報源で更新が適用されなくなります。

同期 1.5.0 1.20.1

修正: API 検出エラーにより、マネージド オブジェクトが Not Found と誤ってマークされる

API Service バックエンドが正常でない場合、API 検出でエラーが発生する可能性があります。ResourceGroup コントローラの起動中、更新後、またはスケジュール変更後にこの問題が発生すると、リソース キャッシュの初期化に失敗し、すべてのマネージド オブジェクトが ResourceGroup ステータスで Not Found として報告されます。

この問題は、metrics-server の状態が正常ではない場合によく発生します。

回避策:

metrics-server が正常な状態に戻ったら、resource-group-controller Pod を再起動します。

    kubectl delete pod -n resource-group-system RESOURCE_GROUP_CONTROLLER_NAME
    
RESOURCE_GROUP_CONTROLLER_NAME は、ResourceGroup Controller の名前に置き換えます。これは、そのパッケージの RootSync 名または RepoSync 名と同じです。
同期 1.15.0

監査ログ内の多数の無効な PATCH リクエスト

Config Sync 修復ツールは、ドライランを使用してドリフトを検出します。これにより、PATCH が永続化されていない場合でも、監査ログでドライランと通常のリクエストを区別しないため、監査ログに PATCH リクエストが表示される場合があります。

回避策:

監査ログではドライランと非ドライランのリクエストが区別されないため、PATCH リクエストを無視できます。
非公開レジストリ 1.19.0

Config Sync が reconciler Deployment に非公開レジストリを使用しない場合

非公開レジストリが構成されている場合、Config Sync はすべての Deployment のイメージを置き換える必要があります。ただし、Config Sync は、Reconciler Deployment のイメージのイメージ レジストリに代わるものではありません。

回避策:

この問題を回避するには、containerd でイメージ レジストリ ミラーを構成します。

同期 1.17.0 1.18.3

修正済み: Config Sync Reconciler がクラッシュループする

Config Sync バージョン 1.17.0 以降では、一部の Kubernetes プロバイダで、Reconciler が REST 構成を作成できないという問題が発生することがあります。

この問題は Reconciler ログに次の例のように表示されます。

Error creating rest config: failed to build rest config: reading local kubeconfig: loading REST config from "/.kube/config": stat /.kube/config: no such file or directory
同期 1.7.0 1.21.0

修正済み: 更新されたインベントリをクラスタに書き込めませんでした

Config Sync が ResourceGroup オブジェクトのステータスの更新に失敗すると、Reconciler ログに次のようなエラーが断続的に書き込まれる場合があります。

    KNV2009: task failed (action: "Inventory", name: "inventory-set-0"): failed to write updated inventory to cluster: Operation cannot be fulfilled on resourcegroups.kpt.dev "root-sync": the object has been modified; please apply your changes to the latest version and try again
    

このエラーは、Reconciler と ResourceGroup Controller 間の競合状態が原因で発生します。Reconciler が ResourceGroup 仕様を更新する前に ResourceGroup Controller が ResourceGroup のステータスを更新すると、KNV2009 エラーが発生することがあります。

回避策:

この問題の回避策はありません。エラーは自然に解決されます。

Terraform Terraform version 5.41.0

Terraform を使用して Config Sync をインストールまたはアップグレードできない

Terraform バージョン 5.41.0 では、リソース google_gke_hub_feature_membership に新しいフィールド config_sync.enabled が導入されました。このフィールドのデフォルト値は false であるため、このフィールドが true に明示的に設定されていない場合、Terraform バージョン 5.41.0 以降を使用すると、Config Sync のインストールまたはアップグレードが失敗します。この問題が発生すると、git spec not included in configmanagement spec というエラー メッセージが表示されることもあります。

回避策:

  • google_gke_hub_feature_membership リソースを使用する場合は、config_sync.enabled を手動で true に設定します。
  • acm サブモジュールを使用している場合は、別の方法に切り替えて Config Sync をインストールすることをおすすめします。切り替えられない場合は、v33.0.0 にアップグレードしてください。

Google Cloud コンソール

Google Cloud コンソールの Config Sync ダッシュボードにデータがない旨のエラーが表示される

Google Cloud コンソールのダッシュボードに、Config Sync クラスタに関する「データがない」や「クラスタ認証情報が無効」といった内容のエラーが表示されることがあります。この問題は、GDC(VMware)クラスタまたは GDC(ベアメタル)クラスタにログインしていない場合に発生することがあります。

回避策:

Google Cloud GDC(VMware)または GDC(Bare Metal)クラスタのコンソールにこういったエラーが表示された場合は、GKE Identity Service または Connect Gateway を使用してクラスタにログインしていることを確認します。

同期 1.21.0

修正済み: Config Sync が放棄されたリソースの更新を妨げる

バージョン 1.21.0 より前では、RootSync オブジェクトや RepoSync オブジェクトを削除しても、Config Sync がこれらのリソース オブジェクトを追跡するために使用していたラベルとアノテーションが残ってしまう場合があります。

そのようなラベルやアノテーションにより、RootSync や RepoSync オブジェクトが削除された後に、次の副作用を引き起こす可能性があります。

  • 他の RepoSync オブジェクトが、以前に管理されていたオブジェクトの所有権を引き継ぐことができなくなります。
  • ドリフト防止が有効になっている場合、Config Sync が放棄されたリソースへの変更を拒否することがあります。

nomos コマンドライン ツール 1.17.0

nomos CLI は oidc 認証プラグインをサポートしていません

nomos コマンドライン ツールを使用すると、no Auth Provider found for name "oidc" などのエラーが表示されることがあります。この問題は、oidc 認証プラグインを使用している場合に発生することがあります。

回避策:

回避策はありません。oidc 認証プラグインは、今後のリリースで再度追加される予定です。

トップへ戻る

次のステップ

  • このドキュメントに問題のソリューションが見当たらない場合は、サポートを受けるで、次のトピックに関するアドバイスなど、詳細なヘルプをご覧ください。

    • Cloud カスタマーケアに問い合わせて、サポートケースを登録する。
    • StackOverflow で質問して、コミュニティからサポートを受ける。kpt または Kustomize を使用する場合は、kpt タグまたは kustomize タグを使用して類似の問題を検索します。
    • GitHub の公開バグトラッカーを使用して、バグの報告や機能リクエストを行う。