エラー リファレンス

Config Sync のエラー メッセージは、KNV1234 という形式のエラー ID で構成されます。1234 は一意の番号で、その後に問題の説明と修正方法の提案が表示されます。このトピックでは、これらの各エラー メッセージについて説明します。

KNV1000: InternalError

Config Sync 1.6.1 で InternalError の ID が KNV9998 に変更されました。

KNV1001: ReservedDirectoryNameError

Config Sync 1.3 で非推奨になっています。

KNV1002: DuplicateDirectoryNameError

Config Sync 1.3 で非推奨になっています。

KNV1003: IllegalNamespaceSubdirectoryError

階層型リポジトリ構造を使用する場合、Namespace 構成ファイルが含まれるディレクトリにサブディレクトリを含めることはできません。

Namespace 構成ファイルが含まれていないディレクトリは抽象名前空間ディレクトリであり、それを継承するディレクトリがあるため、サブディレクトリが必要です。名前空間構成を含むディレクトリは名前空間ディレクトリであり、そこから構成を継承することはできないため、サブディレクトリを持つことはできません。

このエラーを修正するには、親ディレクトリから Namespace 構成ファイルを削除するか、サブディレクトリを別の場所に移動します。

この問題は、Namespace が含まれるディレクトリにサブディレクトリがある場合に起こる可能性があります。

namespaces/
└── prod/
    ├── namespace.yaml
    └── us_west_1/
# namespaces/prod/namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: prod

上記のディレクトリ構造と namespace.yaml の内容の場合、次のエラーが発生します。

KNV1003: A Namespace directory MUST NOT have subdirectories. Remove the
         Namespace policy from "prod", or move "us_west_1" to an Abstract
         Namespace:

path: namespaces/prod/us_west_1
name: us_west_1

KNV1004: IllegalSelectorAnnotationError

クラスタ スコープ オブジェクトはアノテーション configmanagement.gke.io/namespace-selector を宣言できません。NamespaceSelector は、名前空間スコープ オブジェクトに対してのみ宣言できます。

エラーを修正するには、metadata.annotations フィールドから configmanagement.gke.io/namespace-selector を削除します。

このエラーは、ClusterRole 構成が次のような場合に発生します。

# cluster/namespace-reader-clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: namespace-reader
  annotations: {
    "configmanagement.gke.io/namespace-selector" : "shipping-dev",
  }
rules:
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "watch"]

この ClusterRole をクラスタに含めようとすると、nomos vet が次のエラーを返します。

KNV1004: Cluster-scoped objects may not be namespace-selected, and so MUST NOT declare the annotation 'configmanagement.gke.io/namespace-selector'. To fix, remove `metadata.annotations.configmanagement.gke.io/namespace-selector` from:
source: cluster/namespace-reader-clusterrole.yaml
metadata.name: namespace-reader
group: rbac.authorization.k8s.io
version: v1
kind: ClusterRole

クラスタ オブジェクトでアノテーション configmanagement.gke.io/cluster-selector を宣言することはできません。エラーを修正するには、metadata.annotations から configmanagement.gke.io/cluster-selector を削除します。

クラスタ オブジェクトが configmanagement.gke.io/cluster-selector を宣言した場合、nomos vet が次のエラーを返します。

KNV1004: Clusters may not be cluster-selected, and so MUST NOT declare the annotation 'configmanagement.gke.io/cluster-selector'. To fix, remove `metadata.annotations.configmanagement.gke.io/cluster-selector` from:

source: clusterregistry/cluster.yaml
metadata.name: default-name
group: clusterregistry.k8s.io
version: v1alpha1
kind: Cluster

KNV1005: IllegalManagementAnnotationError

管理アノテーションの有効な設定は configmanagement.gke.io/managed=disabled のみです。この設定は、構成をチェックインしたまま、Git リポジトリ内のリソースを明示的に管理対象外にするために使用されます。アノテーション configmanagement.gke.io/managed=enabled は必要ありません。詳細については、オブジェクトの管理をご覧ください。

別のアノテーションを設定すると、次のようなエラーが発生します。

KNV1005: Config has invalid management annotation configmanagement.gke.io/managed=invalid. If set, the value must be "disabled".

source: namespaces/foo/role.yaml
metadata.name: default-name
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1006: ObjectParseError

このエラーは、リポジトリ内で宣言されたオブジェクトを解析できなかった場合に発生します。修正するには、kubectl --validate などのツールを使用して YAML 形式を検証します。

例:

KNV1006: The following config could not be parsed as a rbac.authorization.k8s.io/v1, Kind=Role:

source: namespaces/foo/role.yaml
metadata.name: default-name
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1007: IllegalAbstractNamespaceObjectKindError

非構造化リポジトリを使用する場合は、抽象名前空間ディレクトリで構成ファイルを宣言しないでください。非構造化リポジトリの使用の詳細については、非構造化リポジトリの使用をご覧ください。

KNV1007: Config "default-name" illegally declared in an abstract namespace directory. Move this config to a namespace directory:

source: namespaces/foo/bar/role.yaml
metadata.name: default-name
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1009: IllegalMetadataNamespaceDeclarationError

階層型リポジトリ構造を使用する場合に、構成ファイルで名前空間ディレクトリに一致する Namespace が宣言されているか、このフィールドが省略されています。

以下に、エラーをトリガーするロール構成の例を示します。

# namespaces/shipping-prod/pod-reader-role.yaml
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: pod-reader
  namespace: shipping-dev
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "watch", "list"]

上記のような名前空間を構成で宣言すると、次のエラーが発生します。

KNV1009: A config MUST either declare a `namespace` field exactly matching the directory containing the config, "shipping-prod", or leave the field blank:

source: namespaces/shipping-prod/pod-reader-role.yaml
namespace: shipping-dev
metadata.name: pod-reader
group: rbac.authorization.k8s.io
version: v1
kind: Role

階層型リポジトリ構造の詳細については、階層型リポジトリの構造をご覧ください。

KNV1010: IllegalAnnotationDefinitionError

構成で、configmanagement.gke.io で始まるサポートされていないアノテーションを宣言することはできません。

サポートされているアノテーションは次のとおりです。

エラーの例:

KNV1010: Configs MUST NOT declare unsupported annotations starting with
         "configmanagement.gke.io/". The config has invalid annotations:
         "configmanagement.gke.io/invalid", "configmanagement.gke.io/sync-token"

source: namespaces/foo/role.yaml
metadata.name: role
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1011: IllegalLabelDefinition

configmanagement.gke.io/ で始まるキーを持つラベルを構成に含めることはできません。このラベルキー接頭辞は、Config Sync で使用するために予約されています。

このエラーを引き起こす ConfigMap の例を次に示します。

# namespaces/prod/mymap.yaml
kind: ConfigMap
apiVersion: v1
metadata:
  name: my-map
  labels:
    configmanagement.gke.io/bad-label: label-value
data:
  mydata: moredata

上記のようなラベルを構成で宣言すると、次のエラーが発生します。

KNV1011: Configs MUST NOT declare labels starting with "configmanagement.gke.io/". The config has disallowed labels: "configmanagement.gke.io/bad-label"

source: namespaces/prod/mymap.yaml
metadata.name: my-map
group:
version: v1
kind: ConfigMap

KNV1012: NamespaceSelectorMayNotHaveAnnotation

Config Sync 1.3 で非推奨になっています。

KNV1013: ObjectHasUnknownSelector

構成で、存在していない ClusterSelector または NamespaceSelector を参照しています。構成のアノテーションでセレクタを使用するには、そのセレクタが存在している必要があります。

セレクタが削除された場合は、それを参照している構成も削除します。次の例では、リポの clusterregistry/ ディレクトリに unknown-cluster-selector ClusterSelector が存在しないと仮定します。

# namespaces/namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: foo
  annotations:
    configmanagement.gke.io/cluster-selector: unknown-cluster-selector

この場合、次のエラーが発生します。

KNV1013: Config "foo" MUST refer to an existing ClusterSelector, but has
         annotation
         "configmanagement.gke.io/cluster-selector=unknown-cluster-selector",
         which maps to no declared ClusterSelector

NamespaceSelector アノテーションには、参照される NamespaceSelector が構成参照と同じディレクトリまたは親ディレクトリのいずれかで定義されるという追加要件があります。この要件を満たさないと、次のエラーが発生します。

KNV1013: Config "default-name" MUST refer to a NamespaceSelector in its directory or a parent directory. Either remove the annotation "configmanagement.gke.io/namespace-selector=default-ns-selector" from "default-name" or move NamespaceSelector "default-ns-selector" to a parent directory of "default-name".

    source: namespaces/bar/selector.yaml
    metadata.name: default-ns-selector
    group: configmanagement.gke.io
    version: v1
    kind: NamespaceSelector

    source: namespaces/foo/role.yaml
    metadata.name: default-name
    group: rbac.authorization.k8s.io
    version: v1
    kind: Role

KNV1014: InvalidSelectorError

ClusterSelector 構成と NamespaceSelector 構成で正しい構文が使用されているものの、構文エラーが見つかりました。このエラーを修正するには、適切なデータスキーマに従って構成を指定します。

たとえば、以下の無効な ClusterSelector の場合:

kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
  name: selector-1
spec:
  selector:
    someUnknownField:  # This field is not defined for a LabelSelector
      foo: bar

次のエラーが発生します。

KNV1014: ClusterSelector has validation errors that must be corrected: invalid field "someUnknownField"
    source: clusterregistry/cs.yaml
    metadata.name: selector-1
    group: configmanagement.gke.io
    version: v1
    kind: ClusterSelector

特に、ClusterSelector と NamespaceSelector の定義で spec.selector フィールドを定義しなければ、次のエラーが発生します。

   KNV1014: NamespaceSelectors MUST define `spec.selector`

    source: namespaces/ns.yaml
    metadata.name: ns-selector-1
    group: configmanagement.gke.io
    version: v1
    kind: NamespaceSelector

KNV1016: PolicyManagementNotInstalledError

Config Sync 1.3.2 で非推奨になっています。

KNV1017: MissingRepoError

階層型リポジトリ構造を使用する場合、リポジトリの system/ ディレクトリにリポジトリ構成が存在し、リポジトリのセマンティック バージョンなどの必要な情報が含まれている必要があります。

リポジトリ構成が存在しない場合は、次のエラーが発生します。

KNV1017: The system/ directory must declare a Repo Resource.
path: system/

To fix, define at least a minimal Repo config.
# system/repo.yaml
kind: Repo
apiVersion: configmanagement.gke.io/v1
metadata:
  name: repo
spec:
  version: "0.1.0"

階層型リポジトリ構造の詳細については、階層型リポジトリの構造をご覧ください。

KNV1018: IllegalSubdirectoryError

Config Sync 1.3 で非推奨になっています。

KNV1019: IllegalTopLevelNamespaceError

階層型リポジトリ構造を使用する場合、namespaces/ で直接 Namespace を宣言することはできません。

以下は、エラーをトリガーする構成です。

# namespaces/namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: namespaces
source: namespaces/namespace.yaml
metadata.name: namespaces
group:
version: v1
kind: Namespace
   KNV1019: Namespaces MUST be declared in subdirectories of 'namespaces/'. Create a subdirectory for the following Namespace configs:

    source: namespaces/namespace.yaml
    metadata.name: namespaces
    group:
    version: v1
    kind: Namespace

階層型リポジトリ構造の詳細については、階層型リポジトリの構造をご覧ください。

KNV1020: InvalidNamespaceNameError

階層型リポジトリ構造を使用する場合、Namespace 構成ファイルに metadata.name を宣言します。その値は名前空間ディレクトリの名前と一致する必要があります。このエラーを修正するには、Namespace の metadata.name を修正するか、ディレクトリ名を変更します。

以下は、エラーをトリガーする構成です。

# namespaces/prod/namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: dev
KNV1020: A Namespace MUST declare `metadata.name` that matches the name of its
         directory.

expected `metadata.name`: prod

source: namespaces/prod/namespace.yaml
metadata.name: dev
group:
version: v1
kind: Namespace

階層型リポジトリ構造の詳細については、階層型リポジトリの構造をご覧ください。

KNV1021: UnknownObjectError

KNV1021: No CustomResourceDefinition is defined for the resource in the cluster.
         Resource types that are not native Kubernetes objects must have a
         CustomResourceDefinition.

source: namespaces/foo/role.yaml
metadata.name: role
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1024: IllegalKindInSystemError

KNV1024: Configs of this Kind may not be declared in the `system/` directory of
         the repo:

source: namespaces/foo/role.yaml
metadata.name: role
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1027: UnsupportedRepoSpecVersion

Repo の構成の spec.version フィールドは、リポジトリのセマンティック バージョンを表します。このエラーは、サポートされていないバージョンが使用されていることを示します。

リポジトリの形式がサポートされているバージョンと互換性がある場合は、spec.version フィールドを更新します。

アップグレードする必要がある場合は、リリースノートの指示に従ってください。

# system/repo.yaml
kind: Repo
apiVersion: configmanagement.gke.io/v1
metadata:
  name: repo
spec:
  version: "0.0.0"

上記の場合、次のエラーが発生します。

KNV1027: Unsupported Repo spec.version: "0.0.0". Must use version "main"

source: system/repo.yaml
name: repo
group: configmanagement.gke.io
version: v1
kind: Repo

KNV1028: InvalidDirectoryNameError

KNV1028: Directory names have fewer than 64 characters, consist of lower case
         alphanumeric characters or '-', and must start and end with an
         alphanumeric character. Rename or remove directory:

path: namespaces/a.b`c
name: a.b`c

KNV1029: MetadataNameCollisionError

KNV1029: Configs of the same Kind MUST have unique names in the same Namespace
         and their parent abstract namespaces:

source: namespaces/foo/r1.yaml
metadata.name: role
group: rbac.authorization.k8s.io
version: v1
kind: Role

source: namespaces/foo/r2.yaml
metadata.name: role
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1030: MultipleSingletonsError

KNV1030: Multiple Namespace resources cannot exist in the same directory. To fix, remove the duplicate config(s) such that no more than 1 remains:

source: namespaces/foo/namespace.yaml
metadata.name: foo
group:
version: v1
kind: Namespace

source: namespaces/foo/namespace.yaml
metadata.name: foo
group:
version: v1
kind: Namespace

KNV1031: MissingObjectNameError

すべての構成で metadata.name を宣言する必要があります。修正するには、問題のある構成に metadata.name フィールドを追加します。

KNV1031: A config must declare metadata.name:

source: namespaces/foo/role.yaml
metadata.name:
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1032: IllegalHierarchicalKindErrorCode

KNV1032: The type Repo.configmanagement.gke.io is not allowed if `sourceFormat` is set to `unstructured`. To fix, remove the problematic config, or convert your repo to use `sourceFormat: hierarchy`.

source: system/repo.yaml
metadata.name: repo
group: configmanagement.gke.io
version: v1
kind: Repo

KNV1033: IllegalSystemResourcePlacementError

一部の Kind は、system/ ディレクトリ内でのみ宣言できます。以下は、system/ ディレクトリにのみ存在することが可能な Kind のリストです。 - HierarchyConfig - Repo

KNV1033: A config of the below Kind MUST NOT be declared outside system/:

source: namespaces/foo/repo.yaml
metadata.name: repo
group: configmanagement.gke.io
version: v1
kind: Repo

KNV1034: IllegalNamespaceError

config-management-system 名前空間やその中のリソースを宣言することは禁止されています。修正するには、config-management-system 名前空間とその名前空間内の構成を削除します。

KNV1034: Configs must not be declared in the "config-management-system" namespace

source: namespaces/config-management-system/role.yaml
namespace: namespaces/config-management-system
metadata.name: default-name
group: rbac.authorization.k8s.io
version: v1
kind: Role
KNV1034: The "config-management-system" namespace must not be declared

source: namespaces/config-management-system/namespace.yaml
metadata.name: config-management-system
group:
version: v1
kind: Namespace

KNV1036: InvalidMetadataNameError

指定された metadata.name は無効な形式です。有効な metadata.name は次の条件を満たしている必要があります。 - 254 文字未満。 - 小文字の英数字、「-」、「.」で構成されている。 - 先頭と末尾には英数字を指定する。

この問題を修正するには、上記の条件を満たすように metadata.name を変更します。

KNV1036: Configs MUST define a metadata.name that is shorter than 254
        characters, consists of lower case alphanumeric characters, '-' or '.',
         and must start and end with an alphanumeric character. Rename or remove
         the config:

source: namespaces/foo/role.yaml
metadata.name: a`b.c
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1037: IllegalKindInClusterregistryError

Config Sync 1.3 で非推奨になっています。

KNV1038: IllegalKindInNamespacesError

KNV1038: Configs of the below Kind may not be declared in `namespaces/`:

source: cluster/cr.yaml
metadata.name: role
group: rbac.authorization.k8s.io
version: v1
kind: ClusterRole

KNV1039: IllegalKindInClusterError

名前空間スコープ オブジェクトを namespaces/ 外で宣言することや、クラスタ スコープ オブジェクトを cluster/ 外で宣言することは禁止されています。この問題を修正するには、問題のある構成ファイルを正しいディレクトリに移動します。

クラスタ スコープ オブジェクトの詳細については、クラスタ スコープ オブジェクトをご覧ください。

名前空間スコープ オブジェクトの詳細については、名前空間スコープ オブジェクトをご覧ください。

KNV1039: Namespace-scoped configs of the below Kind must not be declared in
         cluster/:

source: namespaces/foo/role.yaml
metadata.name: role
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1040: UnknownResourceInHierarchyConfigError

Config Sync 1.3 で非推奨になっています。

KNV1041: UnsupportedResourceInHierarchyConfigError

KNV1041: This Resource Kind MUST NOT be declared in a HierarchyConfig:

source: system/hc.yaml
group: configmanagement.gke.io
kind: Repo

KNV1042: IllegalHierarchyModeError

HierarchyConfig で HierarchyMode に対する不正な値が検出されました。HierarchyMode には「none」または「inherit」を指定する必要があります。

HierarchyConfigs の詳細については、ある特定のオブジェクト タイプについて継承を無効にするをご覧ください。

KNV1042: HierarchyMode invalid is not a valid value for the APIResource Role.rbac.authorization.k8s.io. Allowed values are [none,inherit].

source: system/hc.yaml
metadata.name: default-name
group: configmanagement.gke.io
version: v1
kind: HierarchyConfig

KNV1043: UnsupportedObjectError

KNV1043: Config Sync cannot configure this object. To fix, remove this
         config from the repo.

source: namespaces/foo/role.yaml
metadata.name: role
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1044: UnsyncableResourcesErrorCode

KNV1044: An Abstract Namespace directory with configs MUST have at least one
Namespace subdirectory. To fix, do one of the following: add a Namespace
directory below "bar", add a Namespace config to "bar", or remove the configs in
"bar":

path: namespaces/foo/bar/

KNV1045: IllegalFieldsInConfigError

KNV1045: Configs with "metadata.ownerReference" specified are not allowed. To
fix, either remove the config or remove the "metadata.ownerReference" field in
the config:

source: namespaces/foo/replicaset.yaml
metadata.name: replicaSet
group: apps
version: v1
kind: ReplicaSet

KNV1046: ClusterScopedResourceInHierarchyConfigError

KNV1046: This HierarchyConfig references the APIResource "ClusterSelector.configmanagement.gke.io" which has cluster scope. Cluster scoped objects are not permitted in HierarchyConfig.

source: system/hc.yaml
metadata.name: hierarchyconfig
group: configmanagement.gke.io
version: v1
kind: HierarchyConfig

KNV1047: UnsupportedCRDRemovalError

KNV1047: Removing a CRD and leaving the corresponding Custom Resources in the
repo is disallowed. To fix, remove the CRD along with the Custom Resources.

source: cluster/crd.yaml
metadata.name: customResourceDefinition
group: apiextensions.k8s.io
version: v1beta1
kind: CustomResourceDefinition

KNV1048: InvalidCRDNameError

KNV1048: The CustomResourceDefinition has an invalid name. To fix, change the
name to `spec.names.plural+"."+spec.group`.

source: cluster/crd.yaml
metadata.name: customResourceDefinition
group: apiextensions.k8s.io
version: v1beta1
kind: CustomResourceDefinition

KNV1050: DeprecatedGroupKindError

KNV1050: The config is using a deprecated Group and Kind. To fix, set the Group and Kind to "Deployment.apps"

source: namespaces/deployment.yaml
metadata.name: default-name
group: extensions
version: v1beta1
kind: Deployment

KNV1052: IllegalNamespaceOnClusterScopedResourceError

KNV1052: cluster-scoped resources MUST NOT declare metadata.namespace

namespace: foo
metadata.name: default-name
group: rbac.authorization.k8s.io
version: v1
kind: ClusterRole

KNV1053: MissingNamespaceOnNamespacedResourceError

KNV1053: namespace-scoped resources MUST either declare either metadata.namespace or metadata.annotations.configmanagement.gke.io/namespace-selector

metadata.name: default-name
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1054: InvalidAnnotationValueError

このエラーは、構成ファイルのアノテーションに無効な値が含まれている場合に発生します。

エラーの例:

KNV1054: Values in metadata.annotations MUST be strings. To fix, add quotes around the values. Non-string values for:

metadata.annotations.foo
metadata.annotations.bar

metadata.name: default-name
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1055: InvalidNamespaceError

このエラーは、metadata.namespace の値が有効な Kubernetes 名前空間名ではないことを示します。

エラーの例:

KNV1055: metadata.namespace MUST be valid Kubernetes Namespace names. Rename "FOO" so that it:

1. has a length of 63 characters or fewer;
2. consists only of lowercase letters (a-z), digits (0-9), and hyphen '-'; and
3. begins and ends with a lowercase letter or digit.

namespace: FOO
metadata.name: repo
group: configmanagement.gke.io
version: v1
kind: Repo

KNV1056: ManagedResourceInUnmanagedNamespace

このエラーは、非マネージド名前空間でリソースが宣言されていることを示します。このエラーを修正するには、configmanagement.gke.io/managed: disabled アノテーションを削除するか、宣言されたリソースにアノテーションを追加します。

エラーの例:

KNV1056: Managed resources must not be declared in unmanaged Namespaces. Namespace "foo" is declared unmanaged but contains managed resources. Either remove the managed: disabled annotation from Namespace "foo" or declare its resources as unmanaged by adding configmanagement.gke.io/managed:disabled annotation.

metadata.name: default-name
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1057: IllegalDepthLabel

このエラーは、リソースに無効なラベルがあることを示します。修正するには、末尾が .tree.hnc.x-k8s.io/depth のラベルを削除します。

エラーの例:

KNV1057: Configs MUST NOT declare labels ending with ".tree.hnc.x-k8s.io/depth". The config has disallowed labels: "label.tree.hnc.x-k8s.io/depth"

metadata.name: default-name
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV1058: BadScopeError

Namespace リポジトリでは、リポに適用される Namespace で名前空間スコープのリソースのみを宣言できます。たとえば、shipping Namespace リポのリポジトリは、shipping 名前空間のリソースのみを管理できます。

metadata.namespace の値は省略可能です。デフォルトでは、Config Sync は Namespace リポジトリ内のすべてのリソースがその Namespace に属していると想定します。

たとえば、shipping Namespace リポ内の構成ファイルで metadata.namespace: billing が宣言されている場合、nomos コマンドは次のエラーを出力します。

KNV1058: Resources in the "shipping" repo must either omit metadata.namespace or declare metadata.namespace="shipping"

namespace: billing
metadata.name: default-name
group: rbac.authorization.k8s.io
version: v1
kind: Role

KNV 1059: MultipleKptfilesError

Namespace リポジトリで宣言できる Kptfile リソースは 1 つだけです。

たとえば、Namespace リポジトリで 2 つの Kptfile を宣言すると、nomos コマンドは次のエラーを出力します。

KNV1059: Namespace Repos may contain at most one Kptfile

metadata.name: package-a
group: kpt.dev
version: v1alpha1
kind: Kptfile

metadata.name: package-b
group: kpt.dev
version: v1alpha1
kind: Kptfile

For more information, see https://g.co/cloud/acm-errors#knv1059

KNV 1060: ManagementConflictError

2 つのリポジトリを使用する場合、ルート リポジトリと Namespace リポジトリの両方で同じオブジェクト(一致するグループ、種類、名前、Namespace)が宣言されると、競合が発生する可能性があります。

この競合が発生した場合、Config Sync はルート リポジトリのバージョンの構成を同期し、ルート リポジトリが優先されるため、RootSync オブジェクトは問題を報告しません。次の例に示すように、RepoSync オブジェクトはステータスでエラー KNV 1060 を報告します。

KNV1060: The "shipping" reconciler cannot manage resources declared in the Root repository. Remove the declaration for this resource from either the Namespace repository, or the Root repository.

metadata.name: default-name
group: rbac.authorization.k8s.io
version: v1
kind: Role

ルート リポジトリは常に優先されるため、競合を解決するには、ルート リポジトリを Namespace リポジトリと一致するように更新するか、競合するオブジェクトを Namespace リポジトリから削除してください。

KNV 1061: InvalidRepoSyncError

Config Sync が Namespace リポから構成を同期するには、RepoSync オブジェクトを適切に構成する必要があります。InvalidRepoSyncError によって、RepoSync が正しく構成されていないことが報告され、修正方法を説明するメッセージが表示されます。

たとえば、shipping リポジトリに repo-sync という名前の RepoSync が必要で、RepoSync が invalid の場合、nomos コマンドは次のエラーを出力します。

KNV1061: RepoSyncs must be named "repo-sync", but the RepoSync for Namespace "shipping" is named "invalid"

metadata.name: invalid
group: configsync.gke.io
version: v1alpha1
kind: RepoSync

KNV1062: InvalidKptfileError

このエラーは、Kptfile に有効なインベントリ フィールドが含まれていない場合に発生します。Kptfile には、ID と Namespace の両方を指定した空ではないインベントリ フィールドが必要です。これを修正するには、Kptfile で .inventory.identifier.inventory.namespace の値を指定する必要があります。

エラーの例:

KNV1062: Invalid inventory invalid name

metadata.name: default-name
group: kpt.dev
version: v1alpha1
kind: Kptfile

KNV1063: KptfileExistError

このエラーは、ルート リポジトリで Kptfile が見つかった場合に発生します。kptfile は、名前空間にスコープされたリポジトリでのみサポートされています。

このエラーを修正するには、ルート リポジトリから Kptfile を削除します。

エラーの例:

KNV1063: Found Kptfile(s) in the Root Repo. Kptfile(s) are only supported in Namespace Repos. To fix, remove the Kptfile(s) from the Root Repo.

namespace: namespace
metadata.name: default-name
group: kpt.dev
version: v1alpha1
kind: Kptfile

For more information, see https://g.co/cloud/acm-errors#knv1063

KNV1064: InvalidAPIResourcesError

このエラーは、リポジトリ内の api-resources.txt ファイルが解析できなかったことを示します。

エラーの例:

KNV1064: invalid NAMESPACED column value "other" in line:
rbac      other     Role

Re-run "kubectl api-resources > api-resources.txt" in the root policy directory

path: /api-resources.txt

For more information, see https://g.co/cloud/acm-errors#knv1064

KNV1064: unable to find APIGROUP column. Re-run "kubectl api-resources > api-resources.txt" in the root policy directory

path: /api-resources.txt

For more information, see https://g.co/cloud/acm-errors#knv1064

KNV1064: unable to read cached API resources: missing file permissions

path: /api-resources.txt

For more information, see https://g.co/cloud/acm-errors#knv1064

KNV1065: MalformedCRDError

このエラーは、CustomResourceDefinition が不正な形式である場合に発生します。このエラーを修正するには、エラー メッセージで指定されたフィールドを確認し、その値の形式が正しいことを確認してください。

エラーの例:

KNV1065: malformed CustomResourceDefinition: spec.names.shortNames accessor error: foo is of the type string, expected []interface{}.

path: namespaces/foo/crd.yaml

For more information, see https://g.co/cloud/acm-errors#knv1065

KNV1066: ClusterSelectorAnnotationConflictError

構成オブジェクトにより宣言されるクラスタセレクタ アノテーションは、1 つだけである必要があります。このエラーは、従来のアノテーション(configmanagement.gke.io/cluster-selector)とインライン アノテーション(configsync.gke.io/cluster-name-selector)の両方が存在する場合に発生します。

このエラーを修正するには、metadata.annotations フィールドからアノテーションの 1 つを削除します。

たとえば、Namespace の構成ファイルで両方のアノテーションが宣言される場合、nomos コマンドは次のエラーを出力します。

KNV1066: Config "my-namespace" MUST declare ONLY ONE cluster-selector annotation, but has both inline annotation "configsync.gke.io/cluster-name-selector" and legacy annotation "configmanagement.gke.io/cluster-selector". To fix, remove one of the annotations from:

metadata.name: my-namespace
group:
version: v1
kind: Namespace

For more information, see https://g.co/cloud/acm-errors#knv1066

KNV1067: EncodeDeclaredFieldError

このエラーは、リコンサイラが、宣言されたフィールドをサーバー側の適用と互換性のある形式にエンコードできない場合に発生します。古いスキーマが原因である可能性があります。このエラーを修正するには、エラー メッセージで指定されたフィールドを確認し、それがリソースの種類のスキーマと一致することを確認します。

エラーの例:

KNV1067: failed to encode declared fields: .spec.version not defined

metadata.name: my-namespace
group:
version: v1
kind: Namespace

For more information, see https://g.co/cloud/acm-errors#knv1067

KNV1068: ActionableRenderingError

このエラーは、レンダリング プロセスでユーザーが対処できる問題が発生していること示します。

たとえば、Git リポジトリには Kustomize 構成が含まれているが、Git 同期ディレクトリに kustomization.yaml ファイルが存在しない場合などです。

KNV1068: Kustomization config file is missing from the sync directory 'foo/bar'. To fix, either add kustomization.yaml in the sync directory to trigger the rendering process, or remove kustomizaiton.yaml from all sub directories to skip rendering.

For more information, see https://g.co/cloud/acm-errors#knv1068

エラーが kustomize build の失敗に起因する場合は、Git リポジトリの Kustomize 構成を更新する必要があります。nomos hydratenomos vet をそれぞれ使用して、更新された構成ファイルをローカルでプレビューして検証できます。更新された構成ファイルが正しくレンダリングされたら、新しい commit を push して KNV1068 エラーを修正できます。詳細については、リポ内のすべての構成ファイルの結果を表示するリポ内のエラーをチェックするをご覧ください。

kustomize build エラーの例:

KNV1068: Error in the hydration-controller container: unable to render the source configs in /repo/source/3b724d1a17314c344fa24512239cb3b22b9d90ec: failed to run kustomize build ...

For more information, see https://g.co/cloud/acm-errors#knv1068

KNV2001: pathError

このエラーは、ファイル システム リソースにアクセスする OS レベルのシステムコールが失敗したときに発生します。

KNV2002: apiServerError

このエラーは、API サーバーへのアクセス リクエストが失敗したときに発生します。

KNV2003: osError

このエラーは、OS レベルの一般的なシステムコールが失敗したときに発生します。

KNV2004: SourceError

このエラーは、Config Sync がリポジトリから読み取ることができないことを示します。原因としては次のいずれかが考えられます。

  • 正しく構成されていない ConfigManagement オブジェクト

    policyDir の値の誤りなど、間違いを確認します。policyDir の値はエラーに含まれます。Git リポジトリと照合して、値を確認します。

  • 無効な Git 認証情報

    ログで、Could not read from remote repository. Ensure you have the correct access rights and the repository exists.Invalid username or password. Authentication failed for ... などのエラーがある git-sync コンテナを確認します。

    Git 認証情報と git-creds Secret が正しく構成されていることを確認します。

  • 無効な Git リポジトリ URL

    ログで、Repository not found. などのエラーがある git-sync プロセスを確認します。

    正しい URL 形式を使用していることを確認してください。たとえば、SSH 鍵ペアを使用して Git リポジトリへの認証を行っている場合は、Config Sync を構成するときに Git リポジトリに入力する URL が SSH プロトコルを使用していることを確認してください。

  • 無効な Git ブランチ

    ログで、Remote branch BRANCH_NAME not found in upstream originwarning: Could not find remote branch BRANCH_NAME to clone. などのエラーがある git-sync コンテナを確認します。指定しない場合、デフォルトのブランチは master に設定されます。

  • クラスタ内から Git リポジトリにアクセスできません。

    git-sync コンテナのログから、リポジトリに到達できないことを示すエラーがスローされます。例: ssh: connect to host source.developers.google.com port 2022: Network is unreachable問題を解決するには、クラスタのファイアウォールまたはネットワーク構成を調整します。

エラー メッセージにエラーの原因の詳細が表示されない場合がありますが、git-sync コンテナのログを出力するコマンドが提供されます。このログに、より詳細な情報が含まれている場合があります。

複数のリポジトリから同期している場合:

kubectl logs -n config-management-system -l app=reconciler -c git-sync

複数のリポジトリからの同期を無効にしている場合:

kubectl logs -n config-management-system -l app=git-importer -c git-sync

KNV2005: ResourceFightWarning

このエラーは、Config Sync がリソースに対して別のコントローラと競合していることを示します。このような競合により、大量のリソースを消費し、パフォーマンスが低下する可能性があります。競合はリソース競合とも呼ばれます。

競合を検出するには、次のコマンドを実行して Config Sync git-importer ログを確認します。

kubectl logs --namespace config-management-system deployment/git-importer CONTAINER_NAME

CONTAINER_NAME は、importerfs- watcher、または git-sync に置き換えます。git-importer は、これら 3 つのコンポーネントで構成されているため、いずれかを使用して git-importer ログを確認できます。git-sync は、リモートの Git リポジトリのクローンを作成します。importer は、リポジトリ階層をフラット化し、API サーバーを使用して調整します。その際、エラーを確認します。fs- watcher は、リポジトリに対するファイル システムの変更を記録するモードでインポータ コンテナを実行します。

結果に KNV2005 が表示されている場合は、リソースの競合が発生しています。

リソースの競合の詳細を確認するには、次のコマンドを実行してリソースの YAML ファイルへの更新を確認します。

 kubectl get resource --watch -o yaml

resource は、競合しているリソースの種類に置き換えます。ログの結果に基づいて追加するリソースを確認できます。

このコマンドは、更新が API サーバーに適用された後のリソースの状態のストリームを返します。ファイル比較ツールを使用して、出力を比較できます。

一部のリソースは他のコントローラに属している必要があります(たとえば、CRD をインストールまたは管理する Operator など)。こうした他のコントローラは、Config Sync に固有のメタデータを自動的に削除します。Kubernetes クラスタ内の別のコンポーネントによって Config Sync メタデータが削除された場合は、リソースの管理を停止します。これを行う方法については、管理対象オブジェクトの管理を停止するをご覧ください。

KNV2006: Config Management Errors

誤って削除されないように、Config Sync では、1 回の commit ですべての Namespace やクラスタ スコープのリソースを削除することはできません。管理下のすべてのリソースセットを削除するには、次の 2 つの手順を行う必要があります。

  1. 最初の commit で 1 つの名前空間またはクラスタ スコープのリソースを除くすべてを削除し、Config Sync でこれらの変更を同期できるようにします。
  2. 2 回目の commit で最後のリソースを削除します。

KNV2008: APIServerConflictError

API サーバーのリソースが変更または削除されるときに、Config Sync がこのリソースを変更しようとすると、この種のエラーが発生します。このタイプのエラーが起動時のみ発生する場合、または発生する頻度が低い場合、このエラーは無視してかまいません。

これらのエラーが一時的なものではない場合(数分以上続く場合)、重大な問題が発生している可能性があります。その場合、nomos statusリソースの競合を報告します。

エラーの例:

KNV2008: tried to create resource that already exists: already exists

metadata.name: default-name
group: rbac.authorization.k8s.io
version: v1
kind: Role

For more information, see https://g.co/cloud/acm-errors#knv2008

KNV2008: tried to update resource which does not exist: does not exist

metadata.name: default-name
group: rbac.authorization.k8s.io
version: v1
kind: Role

For more information, see https://g.co/cloud/acm-errors#knv2008

KNV2008: tried to update with stale version of resource: old version

metadata.name: default-name
group: rbac.authorization.k8s.io
version: v1
kind: Role

For more information, see https://g.co/cloud/acm-errors#knv2008

KNV2009: ApplyError

このエラーは、Config Sync が一部の構成ファイルをクラスタに同期できなかったことを示す一般的なエラーです。エラーの例:

KNV2009: no matches for kind "Anvil" in group "acme.com".

アドミッション Webhook リクエストの I/O タイムアウト

リコンサイラが構成ファイルをクラスタに適用するときに、次のエラーが発生することがあります。

KNV2009: Internal error occurred: failed calling webhook "v1.admission-webhook.configsync.gke.io": Post https://admission-webhook.config-management-system.svc:8676/admission-webhook?timeout=3s: dial tcp 10.1.1.186:8676: i/o timeout

このエラーは、ファイアウォールによってコントロール プレーン ネットワークへのアドミッション Webhook ポート 8676 がブロックされていることが原因で発生することがあります。この問題を解決するには、ポート 8676 を許可するファイアウォール ルールを追加します。これは、Config Sync アドミッション Webhook がドリフト防止に使用するポートです。

アドミッション Webhook 接続の拒否

リコンサイラが構成ファイルをクラスタに適用するときに、次のエラーが発生することがあります。

KNV2009: Internal error occurred: failed calling webhook "v1.admission-webhook.configsync.gke.io": Post "https://admission-webhook.config-management-system.svc:8676/admission-webhook?timeout=3s": dial tcp 10.92.2.14:8676: connect: connection refused

このエラーは、アドミッション Webhook の準備がまだできていないことを意味します。これは、Config Sync のブートストラップ時に発生する一時的なエラーです。

この問題が繰り返し発生する場合は、アドミッション Webhook Deployment を調べて、Pod がスケジュール可能で正常な状態かどうかを確認します。

kubectl describe deploy admission-webhook -n config-management-system

kubectl get pods -n config-management-system -l app=admission-webhook

KNV2010: resourceError

このエラーは、ある特定のリソースまたはリソースのセットに問題があることを示す一般的なエラーです。エラーの原因となった具体的なリソースがメッセージに含まれています。

KNV2010: Resources were improperly formatted.

Affected resources:
source: system/hc.yaml
group: configmanagement.gke.io
kind: Repo

KNV2011: MissingResourceError

このエラーは、続行するために特定のリソースが必要であるのに、そのリソースが見つからなかったことを示しています。たとえば、Config Management Operator があるリソースを更新しようとしていて、更新の計算中にそのリソースが削除された場合がこれに該当します。

KNV2012: MultipleSingletonsError

このエラーは、ある APIResource が 1 つだけ許可されているコンテキストで、その APIResource のインスタンスが複数見つかったことを示します。たとえば、1 つのクラスタに存在できるリポリソースは 1 つだけです。

KNV2013: InsufficientPermissionError

このエラーは、名前空間のリコンサイラにリソースを管理する十分な権限がない場合に発生します。修正するには、リコンサイラに十分な権限があることを確認してください。

エラーの例:

KNV2013: could not create resources: Insufficient permission. To fix, make sure the reconciler has sufficient permissions.: deployments.apps is forbidden: User 'Bob' cannot create resources

For more information, see https://g.co/cloud/acm-errors#knv2013

KNV2014: InvalidWebhookWarning

この警告は、Config Sync Webhook の構成が不正に変更された場合に発生します。不正な Webhook の構成は無視されます。

警告の例:

KNV2014: invalid webhook

KNV2015: InternalRenderingError

このエラーは、レンダリング プロセスで内部問題が発生した場合に表示されます。たとえば、ファイル システムにアクセスできない場合などです。Pod が正常でないことを示している可能性があります。次のコマンドを実行して、リコンサイラ Pod を再起動できます。

# restart a root reconciler
kubectl delete pod -n config-management-system -l configsync.gke.io/reconciler=root-reconciler

# restart a namespace reconciler
kubectl delete pod -n config-management-system -l configsync.gke.io/reconciler=ns-reconciler-<NAMESPACE>

再起動後もエラーが解決しない場合は、バグレポートを作成します。

KNV9997: RenderingInProgress

KNV9997 は、レンダリング ステータスがリコンサイラで使用できないことを示します。このエラーは、RootSync/RepoSync API または nomos status では表示されず、リコンサイラ ログにのみ表示されます。これは一時的なエラーであり、レンダリング ステータスが利用可能になると自動的に解決されます。

ログの例:

2021-10-04T15:50:46.166961451Z E1004 15:50:46.166756       1 state.go:69] Invalidating reconciler checkpoint: 1 error(s)
2021-10-04T15:50:46.167032152Z [1] KNV9997: rendering in progress for commit 90c1d9e9633a988ee3c3fc4dd145e62af30e9d1f  For more information, see https://g.co/cloud/acm-errors#knv9997
2021-10-04T15:50:48.125422752Z I1004 15:50:48.125223       1 run.go:73] The last reconciliation failed

KNV9998: InternalError

KNV9998 は、nomos コマンド自体に問題があることを示しています。実行した正確なコマンドと発生したメッセージを記載したバグレポートを提出してください。

エラーの例:

KNV9998: we made a mistake: internal error

For more information, see https://g.co/cloud/acm-errors#knv9998

KNV9999: UndocumentedError

エラー メッセージが文書化されていないエラーが発生しました。発生したエラーに関するドキュメントはまだ作成されていません。

次のステップ