Referência de erros

As mensagens de erro do Config Sync consistem em um ID de erro no formato KNV1234, em que 1234 é um número único, seguido por uma descrição do problema e uma sugestão de como corrigi-lo. Este tópico documenta cada uma dessas mensagens de erro.

KNV1000: InternalError

O ID de InternalError foi alterado para KNV9998 com o Config Sync 1.6.1.

KNV1001: ReservedDirectoryNameError

Obsoleto no Config Sync 1.3.

KNV1002: DuplicateDirectoryNameError

Obsoleto no Config Sync 1.3.

KNV1003: IllegalNamespaceSubdirectoryError

Ao usar uma estrutura hierárquica de repo, um diretório que contém uma configuração de namespace não pode conter nenhum subdiretório.

Um diretório sem uma configuração de namespace é um diretório de namespace abstrato, tem diretórios herdados dele e, consequentemente, precisa de subdiretórios. Um diretório contendo uma configuração de namespace é um diretório de namespace e não pode ser herdado. Por isso, não pode ter nenhum subdiretório.

Para fazer a correção, remova a configuração de namespace do diretório pai ou mova o subdiretório para outro local.

Isso poderá acontecer se um diretório contendo um namespace tiver um subdiretório.

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

Essa estrutura de diretório e o conteúdo de namespace.yaml geram esse erro:

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

Um objeto com escopo de cluster não pode declarar a anotação configmanagement.gke.io/namespace-selector. Os NamespaceSelectors só podem ser declarados para objetos com escopo de namespace.

Para corrigir o erro, remova configmanagement.gke.io/namespace-selector do campo metadata.annotations.

A seguinte configuração do ClusterRole produz este erro:

# 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"]

Ao tentar incluir isso no cluster, nomos vet retornará o erro a seguir:

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

Um objeto de cluster não pode declarar a anotação configmanagement.gke.io/cluster-selector. Para corrigir o erro, remova configmanagement.gke.io/cluster-selector de metadata.annotations.

Se um objeto de cluster declarar configmanagement.gke.io/cluster-selector, nomos vet retornará o seguinte erro:

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

A única configuração válida para a anotação de gerenciamento é configmanagement.gke.io/managed=disabled. Essa configuração é usada para cancelar explicitamente o gerenciamento de um recurso no repositório do Git, deixando a configuração registrada. A anotação configmanagement.gke.io/managed=enabled não é necessária. Para mais informações, consulte Como gerenciar objetos.

Definir uma anotação diferente resulta em um erro como este:

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

Esse erro ocorre quando não é possível analisar um objeto declarado no repositório. Para corrigir, valide o formato yaml com uma ferramenta como kubectl --validate.

Exemplo:

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

Ao usar um repo não estruturado, os configs não podem ser declarados em um diretório de namespaces abstratos. Para mais informações sobre como usar repositórios não estruturados, consulte Como usar um repositório não estruturado.

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

Ao usar a estrutura hierárquica do repo, as configurações declaram namespaces que correspondem ao diretório do namespace que os contém ou omitem o campo.

Veja a seguir um exemplo de configuração de papel que aciona o erro:

# 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"]

Se você declarar um config com esse namespace, este erro ocorrerá:

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

Para mais informações sobre a estrutura hierárquica do repositório, consulte Estrutura do repositório hierárquico.

KNV1010: IllegalAnnotationDefinitionError

As configurações não podem declarar anotações incompatíveis de configmanagement.gke.io.

As anotações compatíveis são:

Exemplo de erros:

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

As configurações não podem ter rótulos com chaves que começam com configmanagement.gke.io/. Este prefixo de chave de rótulo está reservado para ser usado pelo Config Sync.

Veja a seguir um exemplo de um ConfigMap que aciona esse erro:

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

Se você declarar um config com esse rótulo, este erro ocorrerá:

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

Obsoleto no Config Sync 1.3.

KNV1013: ObjectHasUnknownSelector

A configuração refere-se a um ClusterSelector ou NamespaceSelector que não existe. Antes de usar um seletor em uma anotação para uma configuração, o seletor precisa existir.

Se o seletor for removido, remova também todas as configurações que se referem a ele. Neste exemplo, suponha que não exista o ClusterSelector unknown-cluster-selector no diretório clusterregistry/ do repo.

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

Isso causa este erro:

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

As anotações NamespaceSelector têm outro requisito: que o NamespaceSelector mencionado seja definido no mesmo diretório ou no diretório pai da referência de configuração. Caso contrário, ocorrerá este erro:

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

As configurações de ClusterSelector e NamespaceSelector usam a sintaxe correta, mas foi encontrado um erro de sintaxe. Para fazer a correção, especifique a configuração de acordo com o esquema de dados adequado:

Por exemplo, este ClusterSelector inválido:

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

Causa o seguinte erro:

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

Especificamente, as definições de ClusterSelector e NamespaceSelector definem o campo spec.selector. Se isso não for feito, ocorrerá o seguinte erro:

   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

Obsoleto no Config Sync 1.3.2

KNV1017: MissingRepoError

Ao usar a estrutura hierárquica do repo, uma configuração de repo precisa existir no diretório system/ do repo e incluir as informações necessárias, como a versão semântica do repo.

Se um config do repo não existir, ocorrerá o seguinte erro:

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"

Para mais informações sobre a estrutura hierárquica do repositório, consulte Estrutura do repositório hierárquico.

KNV1018: IllegalSubdirectoryError

Obsoleto no Config Sync 1.3.

KNV1019: IllegalTopLevelNamespaceError

Ao usar a estrutura hierárquica do repo, os namespaces não podem ser declarados diretamente em namespaces.

Veja a seguir um config que aciona o erro:

# 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

Para mais informações sobre a estrutura hierárquica do repositório, consulte Estrutura do repositório hierárquico.

KNV1020: InvalidNamespaceNameError

Ao usar a estrutura hierárquica do repo, uma configuração de namespace declara metadata.name, e o valor dela precisa corresponder ao nome do diretório do namespace. Para fazer a correção, ajuste o metadata.name do namespace ou o diretório dele.

Veja a seguir um config que aciona o erro:

# 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

Para mais informações sobre a estrutura hierárquica do repositório, consulte Estrutura do repositório hierárquico.

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

O campo spec.version na configuração do repo representa a versão semântica dele. Esse erro indica que você está usando uma versão sem suporte.

Se o formato do repo for compatível com a versão compatível, atualize o campo spec.version.

Se precisar fazer upgrade, siga as instruções nas notas de lançamento.

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

Isso produz este erro:

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

Todas as configurações precisam declarar metadata.name. Para corrigir, adicione o campo metadata.name às configurações problemáticas.

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

Alguns tipos só podem ser declarados dentro do diretório system/. Veja a seguir uma lista de tipos que podem existir exclusivamente no diretório system/: HierarquiaConfig, 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

É proibido declarar o namespace config-management-system ou os recursos dele. Para fazer a correção, remova o namespace config-management-system e todas as configurações dele.

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

O metadata.name fornecido é de formato inválido. Um metadata.name válido precisa: - Ter menos de 254 caracteres; - Ter caracteres alfanuméricos minúsculos, '-' ou '.'; - Começar e terminar com um caractere alfanumérico.

Para corrigir, altere o metadata.name para atender às condições anteriores.

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

Obsoleto no 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

É proibido declarar um objeto com escopo de namespace fora dos namespaces, ou um objeto com escopo de cluster fora do cluster. Para corrigir, realoque os configs problemáticos para que eles estejam em um diretório jurídico.

Para mais informações sobre objetos com escopo de cluster, consulte Objetos com escopo de cluster.

Para mais informações sobre objetos com escopo de namespace, consulte Objetos com escopo de namespace.

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

Obsoleto no 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

Um valor ilegal para HierarchyMode foi detectado em uma HierarchyConfig. HierarchyMode precisa ser nenhum ou herdar.

Para ler mais sobre HierarchyConfigs, consulte Como desativar a herança para um tipo de objeto.

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

Esse erro ocorre quando os configs contêm um valor inválido para uma anotação.

Exemplo de erros:

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

Esse erro indica que o valor de metadata.namespace não é um nome de namespace válido do Kubernetes.

Exemplo de erros:

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

Esse erro indica que um recurso é declarado em um namespace não gerenciado. Para corrigi-lo, remova a anotação configmanagement.gke.io/managed: disabled ou adicione a anotação ao recurso declarado.

Exemplo de erros:

KNV1056: Managed resources must not be declared in unmanaged Namespaces. Namespace "foo" is 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

Esse erro indica que um recurso tem um rótulo ilegal. Para corrigi-lo, remova os rótulos que terminam com .tree.hnc.x-k8s.io/depth.

Exemplo de erros:

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

Um repositório de namespaces só pode declarar recursos com escopo de namespace no namespace a que o repositório se aplica. Por exemplo, o repositório do namespaces shipping só pode gerenciar recursos no namespace shipping.

O valor de metadata.namespace é opcional. Por padrão, o Config Sync considera que todos os recursos em um repositório de namespace pertencem a esse namespace.

Por exemplo, se um config no repositório de namespaces shipping declarar metadata.namespace: billing, o comando nomos exibirá o seguinte erro.

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

Um repositório de namespaces pode declarar no máximo um recurso Kptfile.

Por exemplo, se um repositório de namespaces declarar dois Kptfiles, o comando nomos apresentará o seguinte erro:

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

Quando você trabalha com dois repositórios, pode haver conflitos quando o mesmo objeto (grupos, tipos, nomes e namespaces correspondentes) é declarado tanto no repositório raiz quanto no repositório de namespaces.

Se esse conflito ocorrer, o Config Sync sincronizará a versão do repositório raiz do config e o objeto RootSync não informará problemas desde que o repositório raiz tenha precedência. O objeto RepoSync informa o erro KNV 1060 no status, conforme mostrado no exemplo a seguir:

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

Como o repositório raiz sempre tem precedência, é possível resolver o conflito atualizando o repositório raiz para corresponder ao repositório de namespace ou excluindo o objeto conflitante no repositório de namespace.

KNV 1061: InvalidRepoSyncError

Os objetos do RepoSync precisam ser configurados corretamente para que o Config Sync sincronize a configuração dos repositórios de namespace. Um InvalidRepoSyncError informa que um RepoSync está configurado incorretamente, com uma mensagem informando explicitamente como corrigi-lo.

Por exemplo, se o repositório shipping precisa ter um RepoSync chamado repo-sync, mas o RepoSync é denominado invalid, o comando nomos apresenta o seguinte erro.

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

Esse erro ocorre quando o Kptfile não tem um campo de inventário válido. Um Kptfile precisa ter um campo de inventário não vazio com o identificador e o namespace especificados. Para corrigi-lo, é necessário especificar os valores de .inventory.identifier e .inventory.namespace no Kptfile.

Exemplo de erros:

KNV1062: Invalid inventory invalid name

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

KNV1063: KptfileExistError

Esse erro ocorre quando os Kptfiles são encontrados no repositório raiz. Os arquivos Kptfiles são compatíveis apenas com repositórios com escopo de namespace.

Para corrigir, remova os Kptfiles do repositório Root.

Exemplo de erros:

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

Esse erro indica que não foi possível analisar o arquivo api-resources.txt em um repositório.

Exemplo de erros:

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

Esse erro ocorre quando CustomResourceDefinition é inválido. Para corrigir, verifique o campo especificado pela mensagem de erro e verifique se o valor está formatado corretamente.

Exemplo de erros:

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

Um objeto de configuração PRECISA declarar SOMENTE uma anotação de seletor de cluster. Esse erro ocorre quando a anotação legada (configmanagement.gke.io/cluster-selector) e a anotação in-line (configsync.gke.io/cluster-name-selector) existem.

Para corrigir, remova uma das anotações do campo metadata.annotations.

Por exemplo, se uma configuração de namespace declarar as duas anotações, o comando nomos emitirá o seguinte erro:

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

Esse erro ocorre quando o reconciliador não codifica os campos declarados em um formato compatível com a aplicação do servidor. Pode ser causado por um esquema desatualizado. Para corrigir, verifique o campo especificado pela mensagem de erro e certifique-se de que ele corresponde ao esquema do tipo de recurso.

Exemplo de erros:

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

Esse erro indica que o processo de renderização encontra um problema que pode ser resolvido pelo usuário.

Um exemplo é que o repositório Git contém configurações do Kustomize, mas nenhum arquivo kustomization.yaml existe no diretório de sincronização do Git:

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

Se o erro for causado por falhas de kustomize build, atualize as configurações do Kustomize no repositório Git. É possível visualizar e validar as configurações atualizadas localmente usando nomos hydrate e nomos vet, respectivamente. Se os configs atualizados forem renderizados, você poderá enviar uma nova confirmação para corrigir o erro KNV1068. Para mais detalhes, consulte Como visualizar o resultado de todas as configurações no repo e Como verificar erros no repo.

Exemplo de erro 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

Esse erro ocorre quando uma chamada de sistema no nível do sistema operacional acessando um recurso de sistema de arquivos falha.

KNV2002: apiServerError

Isso ocorre quando uma solicitação acessando o servidor da API falha.

KNV2003: osError

Isso ocorre quando uma chamada de sistema genérica no nível do sistema operacional falha.

KNV2004: SourceError

Esse erro indica que o Config Sync não pode ler do repositório. Geralmente é causado por um dos seguintes motivos:

  • Objeto ConfigManagement configurado incorretamente

    Verifique se há erros, como um valor incorreto para policyDir. O valor de policyDir está incluído no erro. Por isso, verifique o valor em relação ao seu repositório do Git.

  • Credenciais do Git inválidas

    Verifique se há um erro nos registros do contêiner git-sync, como Could not read from remote repository. Ensure you have the correct access rights and the repository exists. ou Invalid username or password. Authentication failed for ....

    Verifique se as credenciais do Git e o secret de git-creds foram configurados corretamente.

  • URL do repositório Git inválido

    Verifique os registros do contêiner git-sync para um erro como Repository not found.

    Verifique se você está usando o formato de URL correto. Por exemplo, se você estiver usando um par de chaves SSH para autenticar o repositório Git, verifique se o URL que você inseriu para o repositório Git quando você configurar o Config Sync usa o protocolo SSH.

  • Ramificação do Git inválida

    Verifique os registros do contêiner git-sync para um erro como Remote branch BRANCH_NAME not found in upstream origin.

É possível que a mensagem de erro não inclua todos os detalhes do que causou o erro, mas ela fornece um comando que imprime os registros do contêiner git-sync que podem ter mais informações.

Se você estiver usando vários repositórios:

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

Se você não estiver usando vários repositórios:

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

KNV2005: ResourceFightWarning

Esse erro indica que o Config Sync está competindo com outro controlador por um recurso. Esses conflitos consomem uma grande quantidade de recursos e podem prejudicar seu desempenho. Os conflitos também são conhecidos como contenção de recursos.

Para detectar conflitos, verifique os registros git-importer do Config Sync executando o seguinte comando:

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

Substitua CONTAINER_NAME por importer, fs- watcher ou git-sync. Como git-importer consiste nesses três componentes, é possível usar qualquer um deles para verificar os registros git-importer. git-sync clona o repositório Git remoto. importer nivela a hierarquia do repositório e a concilia com o servidor da API, verificando se há erros. fs- watcher executa o contêiner do importador em um modo que registra as alterações do sistema de arquivos para o repositório.

Se você vir KNV2005 nos resultados, isso significa que há uma disputa de recursos.

Para encontrar mais informações sobre conflitos de recursos, veja as atualizações do arquivo YAML do recurso executando o seguinte comando:

 kubectl get resource --watch -o yaml

Substitua resource pelo tipo de recurso que está sendo disputado. É possível ver qual recurso adicionar com base nos resultados do registro.

Esse comando retorna um fluxo do estado do recurso depois que as atualizações são aplicadas ao servidor da API. É possível usar uma ferramenta de comparação de arquivos para comparar a saída.

Alguns recursos devem pertencer a outros controladores (por exemplo, alguns operadores instalam ou mantêm CRDs). Esses outros controladores removem automaticamente todos os metadados específicos do Config Sync. Se outro componente no cluster do Kubernetes remover metadados do Config Sync, pare de gerenciar o recurso. Para informações sobre como fazer isso, consulte Como parar de gerenciar um objeto gerenciado.

KNV2006: erros de gerenciamento de config

Para evitar a exclusão acidental, o Config Sync não permite a remoção de todos os namespaces ou recursos com escopo de cluster em uma única confirmação. Se você quiser excluir o conjunto completo de recursos em gerenciamento, serão necessárias duas etapas:

  1. Remova apenas um namespace ou recurso com escopo de cluster em uma primeira confirmação e permita que o Config Sync sincronize essas alterações.
  2. Remova o recurso final em uma segunda confirmação.

KNV2008: APIServerConflictError

Esse tipo de erro ocorre quando um recurso no servidor de API é modificado ou excluído enquanto o Config Sync também está tentando modificá-lo. Se esse tipo de erro só aparecer na inicialização ou com pouca frequência, ignore-os.

Se esses erros não forem temporários (persistirem por vários minutos), isso pode indicar um problema sério, o que nomos status reportará conflitos de recursos.

Exemplo de erros:

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

Esse é um erro genérico indicando que o Config Sync falhou ao sincronizar algumas configurações com o cluster. Exemplo de erros:

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

Tempo limite de solicitação de webhook de admissão

Se você receber o seguinte erro quando o regulador tentar aplicar uma configuração ao cluster:

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

Esse erro pode ser causado por a porta do webhook de admissão 8676 ser bloqueada pelo firewall para a rede do plano de controle. Para resolver esse problema, adicione uma regra de firewall para autorizar a porta 8676, que o webhook de admissão do Config Sync usa para a prevenção de deslocamento.

Para mais detalhes, consulte Como sincronizar de vários repositórios.

Conexão do webhook de entrada recusada

Você pode receber o seguinte erro quando o reconciliador tenta aplicar uma configuração ao cluster:

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

Isso significa que o webhook de admissão ainda não está pronto. É um erro temporário que você talvez você veja ao inicializar o Config Sync.

Se o problema persistir, consulte a implantação do webhook de admissão para ver se os pods podem ser programados e estão íntegros.

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

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

Para mais detalhes, consulte Como sincronizar de vários repositórios.

KNV2010: resourceError

Esse é um erro genérico que indica um problema com um recurso ou conjunto de recursos. A mensagem inclui os recursos específicos que causaram o erro.

KNV2010: Resources were improperly formatted.

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

KNV2011: MissingResourceError

Isso indica que um recurso específico é necessário para continuar, mas ele não foi encontrado. Por exemplo, o Config Management Operator tentou atualizar um recurso, mas ele foi excluído durante o cálculo da atualização.

KNV2012: MultipleSingletonsError

Esse erro informa que mais de uma instância de um APIResource foi encontrada em um contexto em que exatamente um APIResource é permitido. Por exemplo, apenas um recurso de repo pode existir em um cluster.

KNV2013: InsufficientPermissionError

Esse erro ocorre quando um reconciliador de namespace tem permissões insuficientes para gerenciar recursos. Para corrigir, certifique-se de que o acumulador tenha permissões suficientes.

Exemplo de erros:

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

Esse aviso ocorre quando a configuração do webhook do Config Sync é modificada ilegalmente. As configurações de webhook ilegais são ignoradas.

Exemplo de aviso:

KNV2014: invalid webhook

KNV2015: InternalRenderingError

Esse erro indica que o processo de renderização encontra um problema interno. Um exemplo não consegue acessar o sistema de arquivos. Isso pode indicar que o pod não está íntegro. Reinicie o pod do reconciliador executando o seguinte comando:

# 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>

Se o erro persistir após a reinicialização, crie um relatório de bug.

KNV9997: RenderingInProgress

KNV9997 indica que o status da renderização não está disponível para o reconciliador. O erro não é exposto na API RootSync/RepoSync ou nomos status e só é mostrado no registro do reconciliador. É um erro temporário e será resolvido automaticamente quando o status da renderização estiver disponível.

Exemplos de registros:

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 indica um problema com o próprio comando nomos. Envie um relatório do bug com o comando exato que você executou e a mensagem que recebeu.

Exemplo de erros:

KNV9998: we made a mistake: internal error

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

KNV9999: UndocumentedError

Você encontrou um erro sem uma mensagem de erro documentada. Ainda não escrevemos documentação específica para o erro encontrado.

A seguir