Referencia de errores

Los mensajes de error del Sincronizador de configuración constan de un ID de error con el formato KNV1234, en el que 1234 es un número único seguido de una descripción del problema y una sugerencia para solucionarlo. En este tema, se documentan todos esos mensajes de error.

KNV1000: InternalError

El ID de InternalError cambió a KNV9998 con el Sincronizador de configuración 1.6.1.

KNV1001: ReservedDirectoryNameError

Obsoleto a partir del Sincronizador de configuración 1.3.

KNV1002: DuplicateDirectoryNameError

Obsoleto a partir del Sincronizador de configuración 1.3.

KNV1003: IllegalNamespaceSubdirectoryError

Cuando se usa una estructura de repositorio jerárquica, un directorio que contiene un archivo de configuración de espacio de nombres no debe contener ningún subdirectorio.

Un directorio sin un archivo de configuración de espacio de nombres es un directorio de espacio de nombres abstracto y tiene directorios herederos, por lo que debe tener subdirectorios. Un directorio que contiene un archivo de configuración de espacio de nombres es un directorio de espacio de nombres, del que no se puede heredar, por lo que no debe tener ningún subdirectorio.

Para solucionarlo, quita el archivo de configuración del espacio de nombres del directorio superior o mueve el subdirectorio a otro lugar.

Este problema puede ocurrir si un directorio que contiene un espacio de nombres tiene un subdirectorio.

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

La estructura del directorio y el contenido de namespace.yaml producen este error:

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

Un objeto con permisos de clúster no debe declarar la anotación configmanagement.gke.io/namespace-selector. Los espacios de nombres solo se pueden declarar para los objetos con permisos de espacio de nombres.

Para corregir el error, quita configmanagement.gke.io/namespace-selector del campo metadata.annotations.

El siguiente archivo de configuración de ClusterRole produce este error:

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

Si intentas incluir esto en el clúster, nomos vet muestra el siguiente error:

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

Un objeto de clúster no debe declarar la anotación configmanagement.gke.io/cluster-selector. Para corregir el error, quita configmanagement.gke.io/cluster-selector de metadata.annotations.

Si un objeto de clúster declara configmanagement.gke.io/cluster-selector, nomos vet muestra el siguiente error:

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

La única configuración válida para la anotación de administración es configmanagement.gke.io/managed=disabled. Esta configuración se usa para dejar de administrar de forma explícita un recurso en el repositorio de Git y dejar el archivo de configuración registrado. La anotación configmanagement.gke.io/managed=enabled no es necesaria. Para obtener más información, consulta Administra objetos.

Si configuras una anotación diferente, se produce un error como el siguiente:

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

Este error ocurre cuando no se pudo analizar un objeto en el repositorio. Para corregirlo, valida tu formato yaml con una herramienta como kubectl --validate.

Ejemplo:

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

Cuando se usa un repositorio no estructurado, los archivos de configuración no se deben declarar en un directorio de espacio de nombres abstracto. Para obtener más información sobre el uso de repositorios no estructurados, consulta Usa un repositorio no estructurado.

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

Cuando usas la estructura de repositorio jerárquica, los parámetros de configuración declaran espacios de nombres que coinciden con el directorio del espacio de nombres que las contiene, o bien, omiten el campo.

El siguiente es un ejemplo de una configuración de función que activa el error:

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

Si declaras una configuración con ese espacio de nombres, se produce este error:

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 obtener más información sobre la estructura de repositorio jerárquica, consulta Estructura del repositorio jerárquico.

KNV1010: IllegalAnnotationDefinitionError

Los archivos de configuración no deben declarar anotaciones incompatibles que comiencen con configmanagement.gke.io.

Las anotaciones compatibles son las siguientes:

Ejemplo de error:

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

Las configuraciones no deben tener etiquetas con claves que comiencen con configmanagement.gke.io/. Este prefijo de clave de etiqueta está reservado para que lo use el Sincronizador de configuración.

El siguiente es un ejemplo de un ConfigMap que activa este error:

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

Si declaras una configuración con una etiqueta de este tipo, ocurrirá lo siguiente:

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 a partir del Sincronizador de configuración 1.3.

KNV1013: ObjectHasUnknownSelector

La configuración hace referencia a un ClusterSelector o NamespaceSelector que no existe. Antes de que puedas usar un selector en una anotación para una configuración, el selector debe existir.

Si se quita el selector, también debes quitar cualquier configuración que haga referencia a él. En este ejemplo, supongamos que no hay un ClusterSelector-unknown-cluster-selector en el directorio clusterregistry/ del repositorio.

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

Eso genera el siguiente error:

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

Las anotaciones de espacio de nombres tienen el requisito adicional de que el NamespaceSelector referenciado se defina en el mismo directorio o en un directorio superior de la referencia de configuración. De lo contrario, se producirá el siguiente error:

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

Los archivos de configuración ClusterSelector y NamespaceSelector usan la sintaxis correcta, pero se encontró un error de sintaxis. Para solucionarlo, asegúrate de especificar el archivo de configuración según el esquema de datos adecuado:

Por ejemplo, este es un ClusterSelector no vá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

Provoca el siguiente error:

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

En particular, las definiciones ClusterSelector y NamespaceSelector definen el campo spec.selector. De lo contrario, se producirá el siguiente error:

   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 en el Sincronizador de configuración 1.3.2.

KNV1017: MissingRepoError

Cuando se usa la estructura de repositorio jerárquica, debe existir una configuración de repositorio en el directorio system/ del repositorio y debe incluir la información requerida, como la versión semántica del repositorio.

Si no existe una configuración de repositorio, se produce el siguiente error:

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 obtener más información sobre la estructura de repositorio jerárquica, consulta Estructura del repositorio jerárquico.

KNV1018: IllegalSubdirectoryError

Obsoleto a partir del Sincronizador de configuración 1.3.

KNV1019: IllegalTopLevelNamespaceError

Cuando se usa la estructura de repositorio jerárquica, los espacios de nombres no deben declararse directamente en namespaces/.

La siguiente es una configuración que activa el error:

# 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 obtener más información sobre la estructura de repositorio jerárquica, consulta Estructura del repositorio jerárquico.

KNV1020: InvalidNamespaceNameError

Cuando usas la estructura de repositorio jerárquica, un archivo de configuración de espacio de nombres declara metadata.name, y su valor debe coincidir con el nombre del directorio del espacio de nombres. Para solucionarlo, corrige el metadata.name del espacio de nombres o el directorio.

La siguiente es una configuración que activa el error:

# 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 obtener más información sobre la estructura de repositorio jerárquica, consulta Estructura del repositorio jerá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

El campo spec.version en la configuración del repositorio representa la versión semántica del repositorio. Este error indica que estás usando una versión no compatible.

Si el formato del repositorio es compatible con la versión admitida, actualiza el campo spec.version.

Si necesitas realizar una actualización, sigue las instrucciones de las notas de la versión.

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

Eso produce el siguiente error:

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 las configuraciones deben declarar metadata.name. Para solucionarlo, agrega el campo metadata.name a los archivos de configuración problemáticos.

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

Algunos tipos solo se pueden declarar dentro del directorio system/. La siguiente es una lista de los similares que pueden existir exclusivamente en el directorio system/: -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

Está prohibido declarar el espacio de nombres config-management-system o los recursos dentro de él. Para solucionarlo, quita el espacio de nombres config-management-system y cualquier archivo de configuración en él.

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

El metadata.name proporcionado tiene un formato no válido. Un metadata.name válido debe cumplir con estos requisitos: - Tener menos de 254 caracteres. - Constar de caracteres alfanuméricos en minúscula, “-” o ".". - Comenzar y terminar con un carácter alfanumérico.

Para solucionarlo, cambia el metadata.name a fin de cumplir con las condiciones 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 a partir del Sincronizador de configuración 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

Está prohibido declarar un objeto con permisos de espacio de nombres fuera de namespaces/ o un objeto con permisos de clúster fuera de cluster/. Para solucionar este problema, reubica los archivos de configuración problemáticos de modo que estén en un directorio legal.

Para obtener más información sobre los objetos con permiso de clúster, consulta Objetos con permiso de clúster.

Para obtener más información sobre los objetos con permiso de espacio de nombres, consulta Objetos con permiso de espacio de nombres.

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 a partir del Sincronizador de configuración 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

Se detectó un valor no válido para HierarchyMode en una HierarchyConfig. HierarchMode debe ser “none” o “inherit”.

Si deseas obtener más información sobre HierarchyConfigs, consulta Inhabilita la herencia para un 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

Este error ocurre cuando los archivos de configuración contienen un valor no válido para una anotación.

Ejemplo de error:

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

Este error indica que el valor de metadata.namespace no es un nombre de espacio de nombres de Kubernetes válido.

Ejemplo de error:

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

Este error indica que un recurso se declaró en un espacio de nombres no administrado. Para arreglarlo, quita la anotación configmanagement.gke.io/managed: disabled o agrega la anotación al recurso declarado.

Ejemplo de error:

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

Este error indica que un recurso tiene una etiqueta ilegal. Para arreglarlo, quita las etiquetas que terminan con .tree.hnc.x-k8s.io/depth.

Ejemplo de error:

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

Un repositorio de espacio de nombres solo puede declarar recursos con alcance de espacio de nombres en el espacio de nombres al que se aplica el repositorio. Por ejemplo, el repositorio del repositorio de espacio de nombres shipping solo puede administrar recursos en el espacio de nombres shipping.

El valor de metadata.namespace es opcional. De manera predeterminada, Config Sync supone que todos los recursos de un repositorio de espacio de nombres pertenecen a ese espacio de nombres.

Por ejemplo, si una configuración en el repositorio de espacio de nombres shipping declaró metadata.namespace: billing, el comando nomos muestra el siguiente error.

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

Un repositorio de espacio de nombres puede declarar como máximo un recurso Kptfile.

Por ejemplo, si un repositorio de espacio de nombres declaró dos Kptfiles, el comando nomos muestra el siguiente error:

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

Cuando trabajas con dos repositorios, pueden surgir conflictos cuando el mismo recurso (grupos, tipos, nombres y espacios de nombres que coinciden) se declara en el repositorio raíz y en el de espacios de nombres.

Si ocurre este conflicto, el Sincronizador de configuración sincroniza la versión del repositorio raíz de la configuración y el objeto RootSync no informa ningún problema, ya que el repositorio raíz tiene prioridad. El objeto RepoSync informa el error KNV 1060 en su estado, como se muestra en el siguiente ejemplo:

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 el repositorio raíz siempre tiene prioridad, puedes resolver el conflicto si actualizas el repositorio raíz para que coincida con el repositorio de espacios de nombres, o si borras el objeto en conflicto en el repositorio de espacios de nombres.

KNV 1061: InvalidRepoSyncError

Los objetos RepoSync deben configurarse de forma correcta para que el Sincronizador de configuración sincronice la configuración de los repositorios de espacios de nombres. Un InvalidRepoSyncError informa que un RepoSync está configurado de forma incorrecta y tiene un mensaje que indica de forma explícita cómo solucionarlo.

Por ejemplo, si el repositorio shipping debe tener un RepoSync llamado repo-sync, pero el RepoSync se llama invalid, el comando nomos muestra el siguiente error.

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

Este error se produce cuando el archivo Kptfile no tiene un campo de inventario válido. Un Kptfile debe tener un campo de inventario que no esté vacío y que tenga un identificador y un espacio de nombres especificados. A fin de solucionar el problema, debes especificar los valores de .inventory.identifier y .inventory.namespace en el archivo Kptfile.

Errores de ejemplo:

KNV1062: Invalid inventory invalid name

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

KNV1063: KptfileExistError

Este error ocurre cuando se encuentran Kptfiles en el repositorio raíz. Los archivos Kptfiles solo son compatibles con repositorios con permiso de espacio de nombres.

Para solucionarlo, quita los Kptfiles del repositorio raíz.

Errores de ejemplo:

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

Este error indica que no se pudo analizar el archivo api-resources.txt en un repositorio.

Errores de ejemplo:

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

Este error se produce cuando el CustomResourceDefinition tiene un formato incorrecto. Para solucionarlo, comprueba el campo especificado en el mensaje de error y asegúrate de que su valor tenga el formato correcto.

Errores de ejemplo:

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

Un objeto de configuración DEBE declarar SOLO UNA anotación del selector de clústeres. Este error se produce cuando existen la anotación heredada (configmanagement.gke.io/cluster-selector) y la anotación intercalada (configsync.gke.io/cluster-name-selector).

Para solucionarlo, quita una de las anotaciones del campo metadata.annotations.

Por ejemplo, si una configuración de espacio de nombres declaró ambas anotaciones, el comando nomos muestra el siguiente error:

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

Este error se produce cuando el conciliador no puede codificar los campos declarados en un formato compatible con la aplicación del servidor. Puede deberse a un esquema desactualizado. Para solucionarlo, comprueba el campo especificado por el mensaje de error y asegúrate de que coincida con el esquema del tipo de recurso.

Errores de ejemplo:

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

Este error indica que, durante el proceso de renderización, se produce un problema que el usuario puede aplicar.

Un ejemplo es que el repositorio de Git contiene los parámetros de configuración Kustomize, pero no existe un archivo kustomization.yaml en el directorio de sincronización de 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

Si el error se debe a fallas en kustomize build, debes actualizar los parámetros de configuración de Kustomize en tu repositorio de Git. Puedes obtener una vista previa y validar los archivos de configuración actualizados de manera local mediante nomos hydrate y nomos vet, de manera respectiva. Si los archivos de configuración actualizados se renderizan de forma correcta, puedes enviar una confirmación nueva para corregir el error KNV1068. Para obtener más detalles, consulta Visualiza el resultado de todos los archivos de configuración en el repositorio y Verifica si hay errores en el repositorio.

Ejemplo de error 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

Este error ocurre cuando falla una llamada del sistema a nivel del SO que accede a un recurso del sistema de archivos.

KNV2002: apiServerError

Este error ocurre cuando falla una solicitud de acceso al servidor de la API.

KNV2003: osError

Este error ocurre cuando falla una llamada genérica del sistema a nivel del SO.

KNV2004: SourceError

Este error indica que Config Sync no puede leer del repositorio. Por lo general, se produce por uno de los siguientes errores.

Objeto ConfigManagement configurado incorrectamente

Comprueba si hay errores, como un valor incorrecto para policyDir. El valor de policyDir se incluye en el error. Verifica el valor en tu repositorio de Git.

Las credenciales de Git no son válidas.

Revisa los registros del contenedor git-sync en busca de un error, como Could not read from remote repository. Ensure you have the correct access rights and the repository exists. o Invalid username or password. Authentication failed for ....

Verifica que las credenciales de Git y el Secret git-creds estén configurados de forma correcta.

La URL del repositorio de Git no es válida

Revisa los registros del contenedor git-sync para ver si hay un error como Repository not found..

Verifica que estés usando el formato de URL correcto. Por ejemplo, si usas un par de claves SSH a fin de autenticar en el repositorio de Git, asegúrate de que la URL que ingreses para tu repositorio Git cuando configures el Sincronizador de configuración mediante el protocolo SSH.

La rama de Git no es válida

Revisa los registros del contenedor git-sync para ver si hay un error como Remote branch BRANCH_NAME not found in upstream origin o warning: Could not find remote branch BRANCH_NAME to clone.. Ten en cuenta que la rama predeterminada se establece en master si no se especifica.

No se puede acceder al repositorio de Git desde el clúster

El contenedor git-sync muestra un error en sus registros que indica que no puede acceder al repositorio. Por ejemplo, ssh: connect to host source.developers.google.com port 2022: Network is unreachable Para solucionar el problema, ajusta el firewall o la configuración de red del clúster.

Vinculación de política de IAM faltante con Workload Identity

Cuando usas Workload Identity para autenticarte en Cloud Source Repositories, debes crear una vinculación de política de IAM para vincular la cuenta de servicio de Google a tu cuenta de servicio de Kubernetes. Si falta la vinculación de política de IAM, recibirás el siguiente error:

KNV2004: unable to sync repo Error in the git-sync container: ERROR: failed to call ASKPASS callback URL: auth URL returned status 500, body: "failed to get token from credentials: oauth2/google: status code 403: {\n \"error\": {\n \"code\": 403,\n \"message\": \"The caller does not have permission\",\n \"status\": \"PERMISSION_DENIED\"\n }\n}\n"

Para solucionar el problema, crea la siguiente vinculación de política de IAM:

gcloud iam service-accounts add-iam-policy-binding \
   --role roles/iam.workloadIdentityUser \
   --member "serviceAccount:PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
   GSA_NAME@PROJECT_ID.iam.gserviceaccount.com

Reemplaza lo siguiente:

  • PROJECT_ID: si usas Workload Identity de GKE, agrega el ID del proyecto de tu organización.

    Si usas Workload Identity de la flota, puedes usar dos ID de proyectos diferentes. En serviceAccount:PROJECT_ID, agrega el ID del proyecto de la flota a la que está registrado tu clúster. En GSA_NAME@PROJECT_ID, agrega un ID del proyecto a cualquier proyecto que tenga acceso de lectura al repositorio en Cloud Source Repositories.

  • KSA_NAME: Es la cuenta de servicio de Kubernetes para el conciliador. Para los repositorios raíz, si el nombre de RootSync es root-sync, KSA_NAME es root-reconciler. De lo contrario, es root-reconciler-ROOT_SYNC_NAME.

    Para los repositorios de espacio de nombres, si el nombre de RepoSync es repo-sync, KSA_NAME es ns-reconciler-NAMESPACE. De lo contrario, es ns-reconciler-NAMESPACE-REPO_SYNC_NAME.

  • GSA_NAME: Es la cuenta de servicio de Google personalizada que deseas usar para conectarte a Cloud Source Repositories. Asegúrate de que la cuenta de servicio de Google que selecciones tenga el rol source.reader.

Es posible que el mensaje de error no incluya todos los detalles de la causa del error, pero proporciona un comando que imprime los registros del contenedor de git-sync que pueden tener más información.

Si sincronizas desde varios repositorios:

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

Si inhabilitaste la sincronización desde varios repositorios, haz lo siguiente:

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

KNV2005: ResourceFightWarning

Este error indica que el Sincronizador de configuración está compitiendo por un recurso con otro controlador. Estas competencias consumen una gran cantidad de recursos y pueden empeorar tu rendimiento. Las competencias también se conocen como contienda de recursos.

Para detectar competencias, ejecuta el siguiente comando a fin de verificar los registros del Sincronizador de configuración git-importer:

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

Reemplaza CONTAINER_NAME por importer, fs- watcher o git-sync. Dado que git-importer consta de estos tres componentes, puedes usar cualquiera de ellos para verificar los registros de git-importer. git-sync clona el repositorio remoto de Git. importer compacta la jerarquía de repositorios y la concilia mediante el servidor de API, para lo cual verifica los errores. fs- watcher ejecuta el contenedor importador en un modo que registra los cambios del sistema de archivos para el repositorio.

Si ves KNV2005 en los resultados, entonces hay una competencia de recursos.

Para encontrar más información sobre los conflictos de recursos, ejecuta el siguiente comando a fin de ver las actualizaciones del archivo YAML del recurso:

 kubectl get resource --watch -o yaml

Reemplaza resource por el tipo de recurso que se está disputando. Puedes ver qué recurso agregar en función de los resultados del registro.

Con este comando, se muestra una transmisión del estado del recurso después de aplicar las actualizaciones al servidor de API. Puedes usar una herramienta de comparación de archivos para comparar el resultado.

Algunos recursos deben pertenecer a otros controladores (por ejemplo, algunos operadores instalan o mantienen CRD). Estos otros controladores quitan los metadatos específicos del Sincronizador de configuración de forma automática. Si otro componente del clúster de Kubernetes quita los metadatos del Sincronizador de configuración, deja de administrar el recurso. Para obtener información sobre cómo hacerlo, consulta Deja de administrar un objeto administrado.

KNV2006: Errores de Config Management

Para evitar la eliminación accidental, el Sincronizador de configuración no te permite quitar todos los espacios de nombres o recursos con permiso de clúster en una sola confirmación.

Si confirmaste los cambios para intentar quitar todos los recursos, debes volver al estado original y, luego, borrarlos en dos pasos.

Si el webhook de admisión del Sincronizador de configuración está inhabilitado (Anthos Config Management 1.9 y las versiones anteriores lo tienen habilitado de forma predeterminada), puedes revertir la confirmación que borra todos los recursos.

Si el webhook de admisión del Sincronizador de configuración está habilitado, es posible que tu espacio de nombres esté atascado en la finalización. Para arreglarlo, ejecuta los siguientes pasos:

  1. Inhabilita el Sincronizador de configuración y espera hasta que todos los recursos estén limpios o en un estado estable. Por ejemplo, puedes ejecutar kubectl get ns para asegurarte de que se borren los espacios de nombres.
  2. Vuelve a habilitar el Sincronizador de configuración.
  3. Revierte la confirmación que borra todos los recursos.

Eliminar

Si deseas borrar el conjunto completo de recursos en administración, debes realizar dos pasos:

  1. Quita todos excepto un espacio de nombres o un recurso de permiso de clúster, en una primera confirmación y permite que Config Sync sincronice los cambios.
  2. Quita el recurso final en una segunda confirmación.

KNV2008: APIServerConflictError

Este tipo de error se produce cuando un recurso en el servidor de la API se modifica o se borra mientras Anthos Sync también intenta modificarlo. Si este tipo de error solo aparece durante el inicio o con poca frecuencia, puedes ignorar estos errores.

Si estos errores no son transitorios (persisten varios minutos), pueden indicar un problema grave y nomos status informa conflictos de recursos.

Errores de ejemplo:

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

Este error es un error genérico que indica que el Sincronizador de configuración no pudo sincronizar algunas configuraciones en el clúster. Ejemplo de error:

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

Tiempo de espera de E/S de la solicitud de webhook de admisión

Si recibes el siguiente error cuando el conciliador intenta aplicar una configuración al clúster:

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

Este error puede deberse a que el firewall bloquea el puerto de webhook de admisión 8676 en la red del plano de control. Para resolver este problema, agrega una regla de firewall a fin de admitir el puerto 8676, que el webhook de admisión del Sincronizador de configuración usa para la prevención de desvíos.

Se rechazó la conexión de webhook de admisión

Es posible que recibas el siguiente error cuando el conciliador intente aplicar una configuración al clúster:

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

Este error significa que el webhook de admisión aún no está listo. Es un error transitorio que puedes ver cuando se inicializa el Sincronizador de configuración.

Si el problema persiste, consulta la implementación del webhook de admisión para ver si sus pods se pueden programar y están en buen estado.

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

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

El recurso ResourceGroup excede el límite de tamaño del objeto etcd

Si recibes el siguiente error cuando el conciliador intenta aplicar configuraciones al clúster:

KNV2009: too many declared resources causing ResourceGroup.kpt.dev, config-management-system/root-sync failed to be applied: task failed (action: "Inventory", name: "inventory-add-0"): Request entity too large: limit is 3145728. To fix, split the resources into multiple repositories.

Este error significa que el recurso ResourceGroup excede el límite de tamaño del objeto etcd. Te recomendamos dividir el repositorio de Git en varios repositorios. Si no puedes dividir el repositorio de Git, en el Sincronizador de configuración v1.11.0 y versiones posteriores, puedes mitigarlo mediante la inhabilitación de los datos de estado emergentes. Para ello, configura el campo .spec.override.statusMode del objeto RepoSync o RootSync como disabled. Cuando lo haces, el Sincronizador de configuración deja de actualizar el estado de los recursos administrados en el objeto ResourceGroup. Reduce el tamaño del objeto ResourceGroup. Sin embargo, no podrás ver el estado de los recursos administrados de nomos status ni gcloud alpha anthos config sync.

La información del inventario es nula

Si recibes el siguiente error cuando el conciliador intenta aplicar configuraciones al clúster, es probable que tu inventario no tenga recursos o que el manifiesto tenga una anotación no administrada:

KNV2009: inventory info is nil\n\nFor more information, see https://g.co/cloud/acm-errors#knv2009

Para resolver este problema, realiza las siguientes acciones:

  1. Evita configurar sincronizaciones en las que todos los recursos tengan la anotación configmanagement.gke.io/managed: disabled. Para ello, asegúrate de que el Sincronizador de configuración administre al menos un recurso.
  2. Agrega la anotación configmanagement.gke.io/managed: disabled solo después de completar una sincronización inicial del recurso sin esta anotación.

KNV2010: resourceError

Este error es un error genérico que indica un problema con un recurso o conjunto de recursos. El mensaje incluye los recursos específicos que causaron el error.

KNV2010: Resources were improperly formatted.

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

KNV2011: MissingResourceError

Este error indica que se requiere un recurso específico para continuar, pero no se encontró ese recurso. Por ejemplo, el Operador de Config Management intentó actualizar un recurso, pero este se borró mientras se calculaba la actualización.

KNV2012: MultipleSingletonsError

Este error indica que se encontró más de una instancia de un APIResource en un contexto en el que solo se permite exactamente una. Por ejemplo, solo puede existir un recurso de repositorio en un clúster.

KNV2013: InsufficientPermissionError

Este error se produce cuando un conciliador de espacio de nombres tiene permisos insuficientes para administrar recursos. Para solucionarlo, asegúrate de que el conciliador tenga los permisos necesarios.

Errores de ejemplo:

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

Esta advertencia ocurre cuando la configuración del webhook del Sincronizador de configuración se modifica de forma ilegal. Se ignoran las opciones de configuración del webhook ilegal.

Ejemplo de advertencia:

KNV2014: invalid webhook

KNV2015: InternalRenderingError

Este error indica que el proceso de renderización encuentra un problema interno. Un ejemplo no puede acceder al sistema de archivos. Puede indicar que el Pod no está en buen estado. Para reiniciar el Pod del conciliador, ejecuta el siguiente 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>

Si el error persiste después del reinicio, crea un informe de errores.

KNV9997: RenderingInProgress

KNV9997 indica que el estado de renderización no está disponible para el conciliador. El error no se expone en la API de RootSync/RepoSync o nomos status y solo se muestra en el registro de conciliación. Es un error transitorio y se resolverá de forma automática cuando el estado de renderización esté disponible.

Registros de ejemplo:

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 un problema con el comando nomos. Envía un informe de errores con el comando que ejecutaste y el mensaje que recibiste.

Errores de ejemplo:

KNV9998: we made a mistake: internal error

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

KNV9999: UndocumentedError

Se produjo un error sin mensaje de error documentado. Aún no hemos escrito la documentación específica del error en cuestión.

¿Qué sigue?