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:
configmanagement.gke.io/managed
: Para obtener más información sobre su uso, consulta Administra objetos.configmanagement.gke.io/namespace-selector
: Para obtener más información sobre su uso, consulta Objetos con permiso de espacio de nombres.configmanagement.gke.io/cluster-selector
: Para obtener más información sobre su uso, consulta ClusterSelectors.
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. EnGSA_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 esroot-sync
,KSA_NAME
esroot-reconciler
. De lo contrario, esroot-reconciler-ROOT_SYNC_NAME
.Para los repositorios de espacio de nombres, si el nombre de RepoSync es
repo-sync
,KSA_NAME
esns-reconciler-NAMESPACE
. De lo contrario, esns-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 rolsource.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:
- 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. - Vuelve a habilitar el Sincronizador de configuración.
- 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:
- 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.
- 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:
- 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. - 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?
- Obtén más información para solucionar problemas del Sincronizador de configuración.
- Obtén más información sobre cómo supervisar Config Sync.