Copia de seguridad y restauración
No se puede editar el plan de restauración de copias de seguridad de clústeres
Versiones: 1.14.3, 1.14.4, 1.14.5, 1.14.6 y 1.14.7
Síntomas:
El recurso personalizado RestorePlan no se puede editar con la consola de GDC.
Solución alternativa:
Crea un plan de restauración y elimina el antiguo, o edita el plan de restauración con la CLI de kubectl.
Tamaño de disco de origen no válido
Versiones: 1.14.4 y 1.14.5
Síntomas: la interfaz de usuario muestra incorrectamente el tamaño de un disco como 0 MB y su hora de creación como "Desconocido" debido a un cambio en el modelo de datos backend después de la migración a la arquitectura de organización de la versión 2.
Solución: No hay ningún método alternativo para ver esta información a través de la interfaz de usuario.
Los pods del agente y del plano de control se reinician por falta de memoria
Versiones: 1.14.3 y 1.14.4
Síntomas: es posible que los pods del agente y del plano de control se reinicien si se quedan sin memoria.
Solución alternativa: aumenta la memoria de los pods del plano de control y del agente siguiendo las instrucciones del runbook BACK-R0005. Aumenta la memoria de los pods a 2 GiB.
No se aplican los SLOs de copia de seguridad y restauración
Versiones: 1.14.3 y 1.14.4
Síntomas: las métricas y las alertas de los objetivos de nivel de servicio (SLOs) de GDC no están configuradas de forma predeterminada, ya que no se ha instalado la definición de recurso personalizado necesaria. Estas alertas se usan en Grafana.
Soluciones alternativas: Para habilitar los SLOs de copia de seguridad y restauración en GDC, sigue el runbook BACK-T0001.
Las políticas de conservación no se aplican a las copias de seguridad importadas
Versiones: todas las versiones de Google Distributed Cloud (GDC) con air gap pueden verse afectadas.
Síntomas: al adjuntar un repositorio de copias de seguridad al clúster, se sincronizan todos los metadatos de las copias de seguridad y de las restauraciones, y los repositorios se tratan como copias de seguridad importadas. Estas copias de seguridad importadas se omiten incorrectamente durante la conciliación, lo que significa que las políticas de conservación se ignoran y las copias de seguridad se conservan indefinidamente.
Solución: Las copias de seguridad importadas se etiquetan con backup.gdc.goog/imported-repository:BACKUP_REPOSITORY_NAME. Para permitir la conciliación normal y la aplicación de las políticas de conservación, quita la etiqueta de las copias de seguridad con los siguientes comandos de kubectl:
Define las variables de entorno necesarias:
export KUBECONFIG=KUBECONFIG export BACKUP_REPOSITORY_NAME=BACKUP_REPOSITORY_NAME export NAMESPACE=BACKUP_PLAN_NAMESPACEHaz los cambios siguientes:
KUBECONFIG: la ruta al archivo kubeconfig.BACKUP_REPOSITORY_NAME: el nombre del repositorio de la copia de seguridad.NAMESPACE: el espacio de nombres que contiene el plan de copia de seguridad.
Lista todas las copias de seguridad importadas:
kubectl get backups.backup.gdc.goog -n $NAMESPACE -l backup.gdc.goog/imported-repository=$BACKUP_REPOSITORY_NAMEQuita las etiquetas según sea necesario:
Quita las etiquetas de todas las copias de seguridad:
kubectl get backups.backup.gdc.goog -l backup.gdc.goog/imported-repository=$BACKUP_REPOSITORY_NAME -n $NAMESPACE -o json | jq -r '.items[].metadata.name' | xargs -I{} kubectl label -n $NAMESPACE backups.backup.gdc.goog {} backup.gdc.goog/imported-repository-Quitar las etiquetas de una sola copia de seguridad:
export BACKUP_NAME= kubectl label backups.backup.gdc.goog $BACKUP_NAME -n $NAMESPACE backup.gdc.goog/imported-repository-
Fallo de copia de seguridad parcial de una VM
Versiones: 1.14.3 y 1.14.4
Síntomas: Si no se puede crear una copia de seguridad de una de las muchas VMs, se marca como fallida toda la copia de seguridad de la VM.
Solución alternativa: limita el número de VMs por plan de copias de seguridad.
Limpiar los recursos de copia de seguridad huérfanos después de eliminar un clúster de usuarios o de servicios
Versiones: 1.14.3, 1.14.4, 1.14.5, 1.14.6 y 1.14.7
Síntomas: Cuando se elimina un clúster de usuario o de servicio, los recursos del agente de copia de seguridad asociados (como StatefulSet, pods, secretos, etc.) creados en la infraestructura de la organización y en el clúster de gestión no se limpian automáticamente. Esto puede dejar recursos huérfanos y, si el clúster se crea de nuevo con el mismo nombre, el pod del agente de copia de seguridad no funcionará.
Solución alternativa: Los recursos huérfanos se encuentran en un espacio de nombres específico del clúster de infraestructura de la organización. Para limpiarlos, debes eliminar este espacio de nombres.
Define los archivos kubeconfig de los clústeres de infraestructura y de gestión de la organización.
export ORG_INFRA_KUBECONFIG=<path_to_org_infra_kubeconfig> export MGMT_KUBECONFIG=<path_to_management_kubeconfig>Identifica el espacio de nombres de los recursos huérfanos. El espacio de nombres sigue el patrón
gpc-backup-<cluster-name>-system. Por ejemplo:gpc-backup-user-vm-1-cluster-systemgpc-backup-user-vm-2-cluster-systemgpc-backup-g-org-1-shared-service-cluster-system
Elimina el espacio de nombres. Se eliminarán todos los recursos que contenga, incluido el StatefulSet y el pod del agente de copia de seguridad en la infraestructura, así como el secreto en el clúster de gestión.
# Replace <namespace-name> with the actual namespace kubectl delete namespace <namespace-name> --kubeconfig "${ORG_INFRA_KUBECONFIG:?}" kubectl delete namespace <namespace-name> --kubeconfig "${MGMT_KUBECONFIG:?}"Para confirmar que la limpieza se ha realizado correctamente, vuelve a ejecutar el comando
get all.# Replace <namespace-name> with the actual namespace kubectl get all -n <namespace-name> --kubeconfig "${ORG_INFRA_KUBECONFIG:?}" kubectl get all -n <namespace-name> --kubeconfig "${MGMT_KUBECONFIG:?}"El comando debería fallar porque el espacio de nombres ya no existe. Deberías ver un error como
Error from server (NotFound): namespaces "<namespace-name>" not found.
No se admite la eliminación de VirtualMachineRestore a través de la CLI o la interfaz de usuario
Versiones: 1.14.3, 1.14.4, 1.14.5, 1.14.6 y 1.14.7
Síntomas: el controlador VirtualMachineRestore no limpia automáticamente los recursos subyacentes (VolumeRestore y Restore) al eliminar un recurso VirtualMachineRestore. Esto requiere que se realice una limpieza manual.
Esto se aplica tanto si se elimina con kubectl delete como con la interfaz de usuario.
Solución: Elimine manualmente los recursos dependientes en el orden correcto y, a continuación, quite el finalizador del recurso VirtualMachineRestore.
Define el archivo kubeconfig para que apunte al clúster de gestión.
export MGMT_KUBECONFIG=<path_to_management_kubeconfig>Identifica el
VirtualMachineRestoreque quieres eliminar y su espacio de nombres.export VM_RESTORE_NAME=<vm-restore-to_be_deleted> export NAMESPACE=<namespace-of-vm-restore>Busca y elimina los recursos
VolumeRestoreasociados. Se crean con una etiqueta que los vincula aVirtualMachineRestore.# Find and delete all associated VolumeRestores. kubectl delete volumerestores.backup.gdc.goog --all-namespaces -l "virtualmachine.gdc.goog/virtual-machine-restore-name=${VM_RESTORE_NAME:?}" --kubeconfig "${MGMT_KUBECONFIG:?}"Busca y elimina los recursos
Restoreasociados. Se crean con una etiqueta que los vincula aVirtualMachineRestore.# Find and delete all associated Restores. kubectl delete restores.backup.gdc.goog -n "${NAMESPACE:?}" -l "virtualmachine.gdc.goog/virtual-machine-restore-name=${VM_RESTORE_NAME:?}" --kubeconfig "${MGMT_KUBECONFIG:?}"Ahora, realiza el paso
kubectl deletesi aún no lo has hecho y quita el finalizador del recursoVirtualMachineRestore. Este es el paso final que permite que el recolector de elementos no utilizados de Kubernetes elimine el recurso.kubectl patch virtualmachinerestores.virtualmachine.gdc.goog "${VM_RESTORE_NAME:?}" -n "${NAMESPACE:?}" --type=merge -p '{"metadata":{"finalizers":null}}' --kubeconfig "${MGMT_KUBECONFIG:?}"Verifica la eliminación.
kubectl get virtualmachinerestores.virtualmachine.gdc.goog "${VM_RESTORE_NAME:?}" -n "${NAMESPACE:?}" --kubeconfig "${MGMT_KUBECONFIG:?}"El comando debería devolver un error
NotFound, lo que confirma que el recurso se ha eliminado.
El pod del plano de control de la copia de seguridad falla porque no tiene suficiente memoria
Versiones: 1.14.4 y posteriores
Síntomas: el pod gpcbackup-controlplane-controller del espacio de nombres del sistema gpc-backup del clúster de infraestructura de la organización muestra el estado CrashLoopBackOff. Cuando se produce este error, las operaciones de copia de seguridad y restauración fallarán, dejarán de responder o no funcionarán como se espera.
Solución: aumenta los límites de memoria de la implementación de gpcbackup-controlplane-controller siguiendo las instrucciones de BACK-R0005. Este método aplica un SubcomponentOverride para ajustar las solicitudes y los límites de CPU y memoria.
La eliminación de un clúster de usuarios se ha bloqueado
Versiones: 1.14.7 y posteriores
Síntomas: los clústeres se quedan atascados en el estado de eliminación debido a problemas con el finalizador.
Solución: Comprueba si los volúmenes de almacenamiento tienen relaciones SnapMirror antes de eliminar el clúster. Para obtener más información, consulta BACK-R0109.
La restauración se ha bloqueado debido a una reclamación de volumen persistente pendiente
Versiones: 1.14.3 y posteriores
Síntomas: A veces, los controladores de reclamación de volumen persistente (PVC) no pueden comunicarse con los agentes de copia de seguridad en el clúster de infraestructura de la organización. Aunque este problema no afecta a la función de copia de seguridad, puede provocar que una operación de restauración de volumen se quede atascada en el estado Pending y, finalmente, se agote el tiempo de espera. Este problema afecta a las operaciones de restauración que implican una restauración de volumen, como la función de restauración del servicio de bases de datos para la clonación y la restauración de cargas de trabajo de usuarios.
Si se produce este problema, las operaciones de restauración posteriores en el clúster afectado fallarán hasta que reinicies manualmente el agente de copia de seguridad correspondiente.
Para confirmar que el problema de restauración está relacionado con este problema específico, debes investigar los registros del agente de copia de seguridad:
Sigue las instrucciones de IAM-R0005 para obtener el rol de depurador BACK (
back-cluster-debugger) necesario aplicando el recursoExpirationClusterRoleBinding.Sigue las instrucciones de IAM-R0004 para generar el archivo kubeconfig del clúster de infraestructura de la organización. Todos los agentes de copia de seguridad se ejecutan en el clúster de infraestructura de la organización.
Identifica el agente de copia de seguridad que facilita la restauración:
kubectl --kubeconfig ORG_INFRA_KUBECONFIG get statefulsets \ --all-namespaces | grep gpcbackup-agentSustituye
ORG_INFRA_KUBECONFIGpor la ruta al archivo kubeconfig del clúster de infraestructura de la organización.El resultado debería ser similar al siguiente:
NAMESPACE NAME READY AGE gpc-backup-g-org-1-shared-service-cluster-system gpcbackup-agent-g-org-1-shared-service 1/1 22d gpc-backup-system gpcbackup-agent 1/1 22d gpc-backup-system gpcbackup-agent-cp 1/1 22d gpc-backup-user-vm-1-cluster-system gpcbackup-agent-user-vm-1 1/1 22d gpc-backup-user-vm-2-cluster-system gpcbackup-agent-user-vm-2 1/1 22dLee el resultado y determina el agente de copia de seguridad que corresponde a tu restauración. Por ejemplo, si el espacio de nombres del conjunto con estado afectado de la salida es
gpc-backup-user-vm-1-cluster-system, el agente de copia de seguridad esgpcbackup-agent-user-vm-1.Busca el mensaje de error en los registros del conjunto con estado para confirmar el problema:
kubectl --kubeconfig=ORG_INFRA_KUBECONFIG logs statefulsets/BACKUP_AGENT \ -n NAMESPACE | grep "Failed to watch \*v1.PersistentVolumeClaim"Haz los cambios siguientes:
ORG_INFRA_KUBECONFIG: la ruta al archivo kubeconfig del clúster de infraestructura de la organización.BACKUP_AGENT: el agente de copia de seguridad que has identificado en el paso anterior.NAMESPACE: el espacio de nombres que has identificado en el paso anterior.
Si hay registros coincidentes, significa que tienes este problema conocido.
Solución alternativa: para solucionar el problema, sigue estos pasos:
Reinicia el agente de copia de seguridad:
kubectl --kubeconfig=ORG_INFRA_KUBECONFIG rollout restart \ statefulsets/BACKUP_AGENT -n NAMESPACEHaz los cambios siguientes:
ORG_INFRA_KUBECONFIG: la ruta al archivo kubeconfig del clúster de infraestructura de la organización.BACKUP_AGENT: el agente de copia de seguridad que ha identificado al confirmar el problema.NAMESPACE: el espacio de nombres que has identificado al confirmar el problema.
El resultado debería ser similar al siguiente:
statefulset.apps/gpcbackup-agent-g-org-1-shared-service restartedEspera hasta 20 minutos para que las operaciones pendientes se reanuden automáticamente.
Puedes realizar otra restauración en el mismo clúster de destino una vez que se haya completado el reinicio del agente de copia de seguridad. Una vez que hayas completado esta solución alternativa, no habrá ningún efecto secundario. Solo es necesario completar esta solución alternativa una vez por cada clúster afectado.
Gestión de clústeres
El subcomponente kub-gpu-controller no se reconcilia
Versiones: 1.14.3
Síntomas: El subcomponente g-gdchservices-shared-service-cluster/kub-gpu-controller
de la organización gdchservices no se reconcilia. Se devuelve la siguiente salida:
│ Message: Reconciliation error: E0321 - runtime parameter: configRunner error
| (full log in oclcm-configrunner pod): rpc error: code = Unknown desc = failed
| to execute binary: exit status 1. Output:
│ <
│ I framework.go:159] "Reading input secret"
| inputSecretKey="g-gdchservices-shared-service-cluster/kub-gpu-controller-backend-parameter"
│ I framework.go:175] "Processing job" jobType=parameter
│ Error: no matched clusterName
│ >
Este error impide que las máquinas con GPU se inicien en la organización gdchservices.
Solución alternativa: actualiza a la versión 1.14.4 o posterior para mitigar el problema.
No se puede eliminar un grupo de nodos de un clúster estándar
Versiones: 1.14.3, 1.14.4 y 1.14.5
Corregido: 1.14.6
Síntomas: no se pueden eliminar grupos de nodos obsoletos de clústeres estándar y los grupos de nodos no se eliminan en el plazo previsto. Los clústeres estándar están en versión preliminar privada y puede que no estén disponibles para todos los clientes.
Solución alternativa: elimina manualmente los grupos de nodos obsoletos.
El clúster se ha quedado bloqueado en el estado de eliminación
Versiones: 1.14.6 y posteriores
Síntomas: al eliminar un clúster de Kubernetes, puede que se quede en el estado Deleting. Para comprobar el estado de tu clúster, ejecuta el siguiente comando:
kubectl get cluster CLUSTER_NAME -n platform \
--kubeconfig MANAGEMENT_API_SERVER
El resultado debería ser similar al siguiente:
NAMESPACE NAME STATE K8S VERSION
platform test-cluster Deleting 1.28.15-gke.100
También puedes verificar el problema comprobando el estado del espacio de nombres del clúster:
kubectl describe ns/CLUSTER_NAME-cluster \
--kubeconfig MANAGEMENT_API_SERVER
El resultado debería ser similar al siguiente:
Name: test-cluster
Labels: kubernetes.io/metadata.name=test-cluster
Status: Terminating
Conditions:
Type Status LastTransitionTime Reason Message
---- ------ ------------------ ------ -------
NamespaceContentRemaining True DATE SomeResourcesRemain Some resources are remaining: backendservices.networking.gdc.goog has 1 resource instances, forwardingruleinternals.networking.gdc.goog has 1 resource instances
NamespaceFinalizersRemaining True DATE SomeFinalizersRemain Some content in the namespace has finalizers remaining: backendservice.finalizers.networking.gdc.goog in 2 resource instances
El espacio de nombres del clúster está en estado Terminating y las condiciones NamespaceContentRemaining y NamespaceFinalizersRemaining se han definido como True.
Solución alternativa: para solucionar el problema, sigue estos pasos:
Aplica un parche a la API de reglas de reenvío:
kubectl patch forwardingruleinternals.networking.gdc.goog -n "CLUSTER_NAME-cluster" \ cluster-control-plane-vip-fr -p '{"metadata":{"finalizers":[]}}' --type='merge'Aplica un parche a la API de servicios de backend:
kubectl patch backendservices.networking.gdc.goog -n "CLUSTER_NAME-cluster" \ cluster-control-plane-vip-bes -p '{"metadata":{"finalizers":[]}}' --type='merge'
Servicio de base de datos
En esta sección se describen los problemas conocidos del servicio de bases de datos.
Clonación de base de datos de AlloyDB Omni bloqueada
Versiones: 1.14.6 y anteriores
Corregido: 1.14.7
Síntomas: Cuando un usuario clona un clúster de AlloyDB Omni desde un momento dado, el clúster de base de datos clonado se bloquea con el error DBSE0005 y no puede estar listo. El recurso restore.alloydb correspondiente está bloqueado en la fase "ProvisionInProgress".
Solución alternativa: Para solucionar este problema, elige cuidadosamente el momento a partir del COMPLETETIME de las copias de seguridad correctas.
Lista de copias de seguridad de AlloyDB Omni disponibles para clonar en el servidor de la API de gestión.
kubectl get backups.alloydb -n source-dbcluster-namespace
Ejemplos de resultados:
NAMESPACE NAME PHASE COMPLETETIME
db1 backupplan1-20240908215001 Succeeded 2024-09-08T21:37:38Z
db1 backupplan1-20240909215001 Succeeded 2024-09-09T21:16:18Z
db1 backupplan1-20240910215001 Succeeded 2024-09-10T21:09:38Z
db1 backupplan1-20240911215001 Succeeded 2024-09-11T21:50:47Z
Elige un valor de COMPLETETIME como momento de la clonación. Ten en cuenta que la hora está en UTC.
DNS
GlobalCustomerRootDNSServerNotReachable activa una alerta falsa
Versiones: 1.14.3, 1.14.4, 1.14.5, 1.14.6, 1.14.7 y 1.14.8
Síntomas: se activa la alerta de DNS DNS-A0021, que sugiere GlobalCustomerRootDNSServerNotReachable.
La CR de la sonda de global-customer-root-dns en org-mp no tiene egress: true en las especificaciones.
Solución alternativa:
Define la ruta de KUBECONFIG para
org-mgmt:export MGMT_KUBECONFIG=MANAGEMENT_KUBECONFIGPausa el subcomponente
core-mzque gestiona la sonda CR:kubectl --kubeconfig "${MGMT_KUBECONFIG:?}" annotate subcomponent -n global-kube-system dns-core-mz lcm.private.gdc.goog/paused=trueEdita el CR de la sonda actual de
org-mp:kubectl --kubeconfig "${MGMT_KUBECONFIG:?}" edit probes -n dns-system global-customer-root-dnsActualiza la especificación para incluir
egress: Truey aplica el cambio. Ten en cuenta queCLUSTER_NAMEyGLOBAL_CUSTOMER_ROOT_IPno han cambiado.apiVersion: prober.private.gdc.goog/v1alpha1 kind: Probe metadata: name: global-customer-root-dns spec: egress: True matchClusters: - CLUSTER_NAME probeJobs: - moduleName: dns_udp_global_customer_root name: healthy-dns-global-customer-root targets: - GLOBAL_CUSTOMER_ROOT_IP
Esta solución alternativa corrige el prober y las falsas alertas desaparecerán en 15 minutos.
Almacenamiento de archivos o en bloques
No se puede montar el volumen de un recurso compartido de archivos en una máquina virtual
Versiones: 1.14.6 y 1.14.7
Síntomas: no se actualizan los permisos de almacenamiento de red cuando se añade un nodo nuevo a un clúster, lo que puede provocar que se denieguen las solicitudes de montaje de NFS.
Es posible que aparezca un error access denied by server al montar un recurso compartido de archivos NFS.
Solución alternativa: reinicia los reconciliadores file-share o proxy-group, o modifica el recurso FileShare para activar una actualización.
Cortafuegos
Falta la regla de política de seguridad para la dirección de la CR de subred
Versiones: 1.14.3
Síntomas: no se puede acceder a una organización porque falta el grupo de direcciones del cortafuegos en el recurso personalizado de subred global creado por el cliente en el servidor de la API global de la organización.
Solución: Sigue los pasos que se indican en el manual de servicio FW-G0002 para añadir manualmente una regla de política de seguridad que permita el tráfico.
Los firewalls de GDC deniegan el tráfico hacia OIR tanto para el plano de gestión como para el de datos
Versiones: 1.14.3 y 1.14.4
Síntomas: después de implementar el recurso personalizado OCITTopology, se interrumpe la conectividad entre el plano de gestión y el plano de datos de OIR y GDC.
Solución alternativa: Sigue los pasos que se indican en el manual de servicio FW-G0002 para añadir manualmente reglas de política de seguridad en el clúster de administrador raíz y permitir el tráfico.
Se requieren las siguientes reglas de la política de seguridad:
apiVersion: firewall.private.gdc.goog/v1alpha2
kind: SecurityPolicyRule
metadata:
labels:
firewall.private.gdc.goog/policy-org: root
firewall.private.gdc.goog/policy-type: perimeter
name: ocit-data-egress
namespace: root
spec:
action: allow
destination:
addresses:
- OCIT_CIDR
zones:
- vsys1-octransit-data
firewallVirtualSystemRef:
name: ocvsys1-root
priority: 60000
profile:
type: none
service:
option: any
source:
addresses:
- ZONE_INFRA_CIDR
zones:
- vsys1-oc-data
---
apiVersion: firewall.private.gdc.goog/v1alpha2
kind: SecurityPolicyRule
metadata:
labels:
firewall.private.gdc.goog/policy-org: root
firewall.private.gdc.goog/policy-type: perimeter
name: ocit-data-igress
namespace: root
spec:
action: allow
source:
addresses:
- OCIT_CIDR
zones:
- vsys1-octransit-data
firewallVirtualSystemRef:
name: ocvsys1-root
priority: 60000
profile:
type: none
service:
option: any
destination:
addresses:
- ZONE_INFRA_CIDR
zones:
- vsys1-oc-data
—-
apiVersion: firewall.private.gdc.goog/v1alpha2
kind: SecurityPolicyRule
metadata:
labels:
firewall.private.gdc.goog/policy-org: root
firewall.private.gdc.goog/policy-type: perimeter
name: ocit-mgmt-egress
namespace: root
spec:
action: allow
destination:
addresses:
- OCIT_CIDR
zones:
- vsys1-octransit-mgmt
firewallVirtualSystemRef:
name: ocvsys1-root
priority: 60000
profile:
type: none
service:
option: any
source:
addresses:
- MGMT_CIDR
zones:
- vsys1-oc-mgmt
---
apiVersion: firewall.private.gdc.goog/v1alpha2
kind: SecurityPolicyRule
metadata:
labels:
firewall.private.gdc.goog/policy-org: root
firewall.private.gdc.goog/policy-type: perimeter
name: ocit-mgmt-ingress
namespace: root
spec:
action: allow
source:
addresses:
- OCIT_CIDR
zones:
- vsys1-octransit-mgmt
firewallVirtualSystemRef:
name: ocvsys1-root
priority: 60000
profile:
type: none
service:
option: any
destination:
addresses:
- MGMT_CIDR
zones:
- vsys1-oc-mgmt
Haz los cambios siguientes:
OCIT_CIDR: los intervalos de direcciones IP del campoocitCIDRdel cuestionario de información del cliente (CIQ).MGMT_CIDR: los intervalos de direcciones IP del campooobManagementCIDRsdel cuestionario de información del cliente (CIQ).ZONE_INFRA_CIDR: los intervalos de direcciones IP del campozoneInfraCIDRsdel cuestionario de información del cliente (CIQ).
El cortafuegos de GDC deniega el tráfico entre zonas y organizaciones
Versiones: 1.14.3, 1.14.4 y 1.14.5
Síntomas: los firewalls bloquean de forma predeterminada el tráfico entre zonas y organizaciones.
Solución alternativa: sigue los pasos que se indican en el runbook para añadir manualmente reglas de política de seguridad que permitan el tráfico.
Firewall no admite AttachmentGroup cuyo identificador sea el mismo que el nombre de la organización
Versiones: 1.14.3 y posteriores
Síntomas: Después de implementar un AttachmentGroup, si el campo identifier de ese objeto AttachmentGroup es el mismo que orgName, el cortafuegos no puede analizar este objeto y las actualizaciones de la configuración del cortafuegos se bloquean. A continuación, se muestra un ejemplo de un objeto AttachmentGroup problemático:
apiVersion: system.private.gdc.goog/v1alpha1
kind: AttachmentGroup
metadata:
name: attachment-group-org-1234
namespace: gpc-system
spec:
identifier: myorg
entities:
- orgName: myorg
domainType: OrgMixed
Solución: No utilices el nombre de la organización como identificador. Hay varias opciones para corregir el AttachmentGroup incorrecto.
Elige una de las siguientes opciones para solucionar el problema con AttachmentGroup.
Añade una cadena al final del identificador original con un guion:
apiVersion: system.private.gdc.goog/v1alpha1 kind: AttachmentGroup metadata: name: attachment-group-org-1234 namespace: gpc-system spec: identifier: myorg-orgdx entities: - orgName: myorg domainType: OrgMixedAñade una cadena al principio del identificador original con un guion:
apiVersion: system.private.gdc.goog/v1alpha1 kind: AttachmentGroup metadata: name: attachment-group-org-1234 namespace: gpc-system spec: identifier: orgdx-myorg entities: - orgName: myorg domainType: OrgMixedSustituye el identificador original por otra cadena:
apiVersion: system.private.gdc.goog/v1alpha1 kind: AttachmentGroup metadata: name: attachment-group-org-1234 namespace: gpc-system spec: identifier: dxidentifier entities: - orgName: myorg domainType: OrgMixed
Puerto
El secreto de la CLI de Harbor deja de ser válido después de crear una copia de seguridad y restaurarla
Versiones: 1.14.3
Síntomas: Después de hacer una copia de seguridad y restaurar Harbor, los secretos de la CLI dejan de ser válidos y deben crearse de nuevo.
Solución alternativa: para mitigar este problema, sigue estos pasos:
- Inicia sesión en Harbor con una cuenta de usuario de IAP.
- Haz clic en tu nombre de usuario y selecciona Perfil de usuario.
- Haz clic en Más.
- Crea otro secreto de CLI de forma automática o manual.
Para obtener más información sobre Harbor en GDC, consulta el resumen de Harbor.
El trabajo de copia de seguridad y restauración de Harbor compite por el permiso
Versiones: 1.14.3 y 1.14.4
Síntomas: Cuando hay varias instancias de Harbor en diferentes proyectos de usuario, las operaciones de copia de seguridad y restauración compiten por los controles de acceso basados en roles y experimentan un alto porcentaje de fallos.
Solución alternativa: Para mitigar este problema, sigue estos pasos para crear manualmente un enlace de rol para cada espacio de nombres en el que se creen instancias de Harbor:
Define las variables de entorno necesarias:
INSTANCE_NAMESPACE=INSTANCE_NAMESPACE INFRA_CLUSTER_KUBECONFIG=INFRA_CLUSTER_KUBECONFIGHaz los cambios siguientes:
INFRA_CLUSTER_KUBECONFIG: la ruta al archivo kubeconfig del clúster de infraestructura.INSTANCE_NAMESPACE: espacio de nombres en el que se crean las instancias de Harbor de Managed Harbor Service (MHS).
Crea el enlace de rol para la solución alternativa:
kubectl --kubeconfig ${INFRA_CLUSTER_KUBECONFIG:?} create \ rolebinding ${INSTANCE_NAMESPACE:?}-mhs-backup-manual-rolebinding \ --role=haas-backup-secret-access-role --serviceaccount=${INSTANCE_NAMESPACE:?}-haas-system:haas-backup-sa \ --namespace=haas-system
El tamaño de la copia de seguridad de Harbor muestra valores 0
Versiones: 1.14.3 y 1.14.4
Síntomas: Por el momento, no se ha implementado la medición del tamaño de las copias de seguridad de Harbor. En la consola de GDC, los campos SizeBytes muestran el valor 0 y la columna Size muestra el valor 0 MB. Por ahora, este es el comportamiento esperado de esta configuración.
Error de permisos en los recursos de copia de seguridad en la página de la consola de Harbor Registry
Versiones: 1.14.3 y 1.14.4
Síntomas: Si no tienes el rol de administrador de instancias de Harbor, verás un error de permiso en el recurso de copia de seguridad al consultar la página Harbor Container Registry en la consola de GDC. Este error se muestra porque la información de la copia de seguridad se ha añadido recientemente a la página Harbor Container Registry, pero no se ha concedido el permiso de lectura del recurso de copia de seguridad a los roles de gestión de identidades y accesos que no sean el administrador de instancias de Harbor.
Los demás elementos de la consola de GDC de la página Harbor Container Registry siguen funcionando correctamente. Para obtener más información sobre los roles en GDC, consulta Definiciones de roles.
La página de rotación de contraseñas de la base de datos no se carga
Versiones: 1.14.3, 1.14.4, 1.14.5 y 1.14.6
Síntomas: se producen errores relacionados con la autenticación de solicitudes a la base de datos, como failed SASL auth (FATAL: password authentication failed for user "dbsadmin" (SQLSTATE 28P01)), y se presentan muchas solicitudes de rotación generadas automáticamente para un único secreto rotatorio.
Solución alternativa: elimina las solicitudes de rotación adicionales que no estén listas de un secreto que se pueda rotar.
Define KUBECONFIG en el servidor de la API de mp.
Exporta el espacio de nombres:
NAMESPACE=haas-systemComprueba si hay secretos rotables en
haas-systemque no estén listos:kubectl get rotatablesecrets -n ${NAMESPACE?}La salida podría tener este aspecto:
NAME CREDENTIALID READY AGE haasdb-pw-ar-test HAAS-0002 True 109d haasdb-pw-gardener-harbor HAAS-0002 True 178d haasdb-pw-haas-alice HAAS-0002 Unknown 166d haasdb-pw-myinstance HAAS-0002 True 80d haasdb-pw-osd HAAS-0002 True 158d haasdb-pw-saptest HAAS-0002 True 91dExporta el nombre del secreto rotatorio. Por ejemplo:
ROTATABLE_SECRET=haasdb-pw-haas-aliceElimina las solicitudes de rotación adicionales que no estén listas:
CUR_ROTATABLE_SECRET=$(kubectl get rotatablesecret ${ROTATABLE_SECRET?} -n ${NAMESPACE?} -ojsonpath='{.status.currentRotationRequestRef.name}') kubectl get rotationrequests -n ${NAMESPACE?} -o json | jq -r --arg rotatableSecret "${ROTATABLE_SECRET?}" --arg curRotatableSecret "${CUR_ROTATABLE_SECRET?}" '.items[] | select(.metadata.ownerReferences[0]? | .name==$rotatableSecret) | select(.status.conditions[0]? | .type=="Ready" and .status=="False") | select(.metadata.name != $curRotatableSecret) | .metadata.name' | xargs -r kubectl delete rotationrequests -n ${NAMESPACE?}
Módulo de seguridad de hardware
Las licencias de prueba desactivadas de HSM siguen siendo detectables
Versiones: 1.14.3, 1.14.4 y 1.14.5
Síntomas: debido a un problema conocido de CipherTrust Manager, las licencias de prueba desactivadas siguen siendo detectables y pueden activar advertencias de vencimiento falsas.
Solución alternativa: consulta el error HSM-R0003 para verificar las licencias normales activas y eliminar las licencias de prueba desactivadas.
Fuga de descriptores de archivo del host-daemon de HSM
Versiones: 1.14.x
Síntomas: si los HSMs se ejecutan durante más de 30 días, se puede producir una fuga de descriptores de archivos que provoque que el servicio host-daemon deje de responder, lo que dará lugar a un error ServicesNotStarted.
Solución alternativa: reinicia el servicio host-daemon. Para ello, pide a tu operador de infraestructura que se conecte al HSM a través de SSH como usuario ksadmin y ejecute el siguiente comando:
sudo systemctl restart host-daemon
Si no funciona, tu IO puede reiniciar el HSM en mal estado.
Los HSMs fallan con el error ValidateNetworkConfig después del arranque
Versiones: 1.14.x
Síntomas: los recursos personalizados de HSM no entran en el estado Ready y fallan debido a un error ValidateNetworkConfig. Este error muestra el siguiente mensaje: data0 interface MAC address {} is not active. Este error se produce si se reinicia el sistema y se establece una interfaz de datos principal diferente.
Solución alternativa: sigue el manual de operaciones HSM-R0059 y vuelve a aplicar la configuración de red del HSM a la red de datos. Este runbook se puede seguir aunque más de un HSM tenga este error.
PROBABILIDADES DE RENOVACIÓN
Alertas de objetivos de nivel de servicio falsas
Versiones: 1.14.3
Síntomas: un SLO de successRange se activa de forma errónea.
Solución alternativa: pide al operador de infraestructura que verifique si la alerta es un problema real o una falsa alarma.
Para ello, cuando se active una alerta, sigue el runbook correspondiente para solucionar la causa subyacente de la alerta del objetivo de nivel de servicio.
Caso 1: Si el runbook resuelve el problema correctamente y la alerta deja de activarse, el operador puede cerrar la incidencia asociada.
Caso 2: Si se completa el runbook, pero la alerta sigue activándose, significa que puede tratarse de una falsa alarma. Comprueba si el SLO no se cumple:
kubectl get servicelevelobjective {SLO_NAME} -n {SLO_NAMESPACE} -o yaml --kubeconfig root-admin-kubeconfig| awk '/successRange/ { found1 = 1 } /labelFilter/ { found2 = 1 } END { if (found1 && found2) print "Broken 1.14.3 SLO detected"; else print "SLO does not have a known 1.14.3 issue" }'Según el resultado, si se confirma que la alerta es una falsa alarma, el IO debe silenciar la alerta en la instancia aislada de GDC. De lo contrario, debe derivar el problema al equipo de Asistencia de Google Cloud.
En cualquier caso, es adecuado que el IO derive el problema al equipo de Asistencia de Cloud para verificar que el componente operativo funciona correctamente.
Configuraciones de SLO basadas en métricas de tipo Gauge no válidas
Versiones: 1.14.3 y 1.14.4
Síntomas: un subconjunto de objetivos de nivel de servicio (SLOs) no se rellena con eventos buenos, malos o totales debido a un error de configuración. Los SLOs en cuestión se basan en los gauges de Prometheus y deben configurarse en consecuencia.
Solución:
Versión 1.14.3: no hay ninguna solución alternativa. Por lo tanto, las alertas de objetivo de nivel de servicio no se activarán para los objetivos de nivel de servicio afectados.
Versión 1.14.4: hay una solución alternativa para corregir el SLO. Para solucionar este problema, el ajuste isGauge: true debe aplicarse a la especificación del SLO.
Ejemplo de configuración de un indicador de un SLO:
```yaml
apiVersion: monitoring.private.gdc.goog/v1alpha1
kind: ServiceLevelObjective
metadata:
namespace: infra-obs
name: fw-packet-discard-errors-slo
spec:
successRange:
- resource: fw
description: Firewall packet discard rate with errors SLO
runbookURL: FW-R0006
goal: "0.995"
isGauge: true
period: 30d
metricName: fw_packet_discard_errors_ps
max: 2
```
La lista de SLOs conocidos que se corrigen con este ajuste es la siguiente:
- SLOs de cortafuegos:
- fw-packet-discard-errors-slo
- fw-packet-discard-no-error-slo
- fw-packet-discard-unknown-protocol-slo
- fw-uptime-slo
- Objetivos de nivel de servicio de archivos:
- file-ontap-appliance-availability-slo
- file-ipsec-networking-availability-slo
- file-ontap-networking-availability-slo
- file-iscsi-client-availability-slo
- file-multipath-client-availability-slo
- file-trident-client-availability-slo
Gestión de identidades y accesos
No se ha podido crear la vinculación de roles de gestión de identidades y accesos
Versiones: 1.14.3
Síntomas: el sistema genera los nombres de las vinculaciones de roles de gestión de identidades y accesos. Estos nombres tienen una longitud máxima de 63 caracteres y el formato user-idp-prefix-rolename. En los casos en los que el nombre generado supera el límite de 63 caracteres, no se pueden crear las vinculaciones de roles. Por lo tanto, los permisos definidos mediante roles predefinidos o personalizados no se asignarán a los usuarios.
Solución alternativa: la creación de la vinculación de roles puede completarse correctamente si el nombre del rol predefinido o personalizado es muy corto (por ejemplo, de 4 a 5 caracteres).
No se ha podido crear el enlace de rol de gestión de identidades y accesos para las cuentas de servicio del proyecto
Versiones: 1.14.3, 1.14.4, 1.14.5 y 1.14.6
Síntomas: Una cuenta de servicio de proyecto (PSA) con el rol organization-iam-admin
no puede usar el comando gdcloud projects add-iam-policy-binding para asignarse
otro rol, como el rol project-iam-admin. Esta deficiencia
impide que un PSA gestione sus propios permisos.
Solución alternativa: Comprueba que tienes el rol organization-iam-admin. A continuación, asígnate el rol project-iam-admin en el espacio de nombres del proyecto del PSA de destino y asigna el rol project-iam-admin al PSA. Esta configuración de permisos
permite que el PSA se asigne permisos adicionales a sí mismo o a otros PSAs.
Los proyectos nuevos experimentan retrasos en la creación de roles predefinidos
Versiones: 1.14.3
Síntomas: Cuando se crea un proyecto, faltan los roles predeterminados, como project-bucket-object-admin.
Solución alternativa: espera entre 15 y 60 minutos o reinicia manualmente el controlador iam-org-admin-cm-backend-controller en el espacio de nombres iam-system del clúster de infraestructura de la organización.
La consola de GDC no puede crear la primera vinculación de roles
Versiones: 1.14.4
Síntomas: al crear la primera vinculación de rol para una nueva identidad de servicio con la consola de GDC, se indica que la creación de la vinculación de rol se ha completado correctamente, pero no funciona. Cualquier otra acción que se realice en la identidad de servicio fallará y no tendrá ningún efecto, como añadir o eliminar enlaces de roles.
Solución alternativa: usa la CLI de gdcloud para crear la primera vinculación de rol de una identidad de servicio. Todas las acciones futuras que se realicen con la identidad de servicio mediante la consola de GDC funcionarán correctamente después de que se adjunte la primera vinculación de roles. Para obtener más información, consulta Asignar un enlace de rol a la identidad de servicio.
Los AOs no pueden concederse acceso a roles en el clúster de infraestructura
Versiones: 1.14.3. 1.14.4
Corregido: 1.14.3 hotfix 21
Síntomas: los AOs no pueden concederse a sí mismos ni a ningún otro usuario acceso a ningún rol del clúster de infraestructura.
Solución: Los usuarios de la cuenta de administrador deben ponerse en contacto con los IOs para obtener el acceso necesario. Los IOs pueden usar IAC para proporcionar a los usuarios de AO el acceso necesario.
El token de la cuenta de servicio deja de ser válido
Versiones: 1.14.3
Corregido: 1.14.3 hotfix 21
Síntomas: el token de cuenta de servicio emitido por el clúster de usuario deja de ser válido porque se cambia el argumento service-account-issuer apiserver después de que el clúster esté en estado de ejecución tras el arranque. Este problema provoca que el pod (por ejemplo, el pod con un contenedor sidecar istio-proxy) del clúster de usuario no pueda autenticarse con el token de la cuenta de servicio y que el token de la cuenta de servicio tarde horas en actualizarse con las nuevas configuraciones.
Solución: Reinicia manualmente el pod en el clúster de usuario para que el token de la cuenta de servicio se renueve con las nuevas configuraciones.
Infraestructura como código (IaC)
Error de conciliación de subcomponentes debido a que falta un espacio de nombres
Versiones: 1.14.3
Síntomas: no se puede conciliar un subcomponente. Esto ocurre porque el espacio de nombres config-management-monitoring necesario no se crea automáticamente en el clúster gdchservices-mp.
Solución alternativa: Crea el espacio de nombres config-management-monitoring en el clúster gdchservices-mp con el siguiente manifiesto:
apiVersion: v1
kind: Namespace
metadata:
labels:
configmanagement.gke.io/system: "true"
name: config-management-monitoring
annotations:
lcm.private.gdc.goog/claim-by-force: "true"
helm.sh/resource-policy: keep
Falla la recogida de métricas de IAC ConfigSync
Versiones: 1.14.3 y 1.14.4
Síntomas: un problema en el subsistema de monitorización de Config Sync de IAC impide que se inicie el despliegue de otel-collector. Las métricas de Config Sync no se recogen para la monitorización y las alertas.
Solución alternativa: completa los siguientes pasos en el clúster root-admin:
- Pausa el
iac-configsync-monsubcomponente. - Edita el objeto
MetricsProxySidecar/iac-configsync-metricsen el espacio de nombresconfig-management-monitoring. En el archivo
MetricsProxySidecar/iac-configsync-metricsYAML, busca lo siguiente:spec: [...] destinations: - certificate: secretName: iac-configsync-mon-target-certCambia esta sección por la siguiente:
spec: [...] destinations: - certificate: secretName: iac-configsync-mon-mon-target-certReinicia la implementación de
otel-collectoren el espacio de nombresconfig-management-monitoring.
Falla de RootSync de IAC
Versiones: 1.14.3
Síntomas: hay un problema en los recursos de sincronización de Config Sync de Gitlab a los clústeres debido a que falta un secreto de iac-creds . Los iac-creds no se rotan debido a un problema de iacmanager.
Solución alternativa: completa los siguientes pasos en el clúster:
- Sigue el manual de procedimientos IAC-R0015 para resolver el problema de la falta de la credencial secreta iac. Rota las credenciales del gestor de IaC y de Config Sync.
Inventario
No se puede conciliar la auditoría de inventario
Versiones: 1.14.3
Síntomas: El subcomponente inv-audit no se puede conciliar, ya que HarborRobotAccount solo está disponible en el plano de gestión.
Solución alternativa: crea un silencio en AlertManager para silenciar la alerta component_reconciliation_errors durante component: inv.
Sistema de gestión de claves
KMS configurado para usar una clave raíz de CTM no conmuta por error cuando un HSM no está disponible
Versiones: 1.14.x
Síntomas: se produce un error en algunas solicitudes al KMS cuando un HSM no está disponible y hay otros HSMs disponibles que se podrían haber utilizado. Este problema solo se produce cuando el KMS está configurado para usar una clave raíz de CTM.
Solución: Elimina el HSM no disponible del HSMCluster siguiendo el runbook HSM-P0006. A continuación, reinicia la implementación de kms-backend:
kubectl --kubeconfig=ORG_INFRA_KUBECONFIG rollout restart deployment/kms-backend -n kms-system
Este comando reinicia los pods kms-backend y restablece la conexión con los HSMs del HSMCluster.
Balanceadores de carga
No se puede crear un balanceador de carga global debido a que se ha agotado el CIDR de subred
Versiones: 1.14.3
Síntomas: no se puede crear un balanceador de carga externo o interno global debido a que no hay suficientes direcciones IP en las subredes globales. El sistema no puede asignar direcciones IP de forma dinámica a los balanceadores de carga globales debido a un controlador que usa una ruta de código incorrecta. El balanceador de carga solo hace referencia a una subred y, si esa subred no tiene más direcciones IP disponibles, no hay forma de cambiar a otra subred. Esta limitación provoca que se muestre el error.
Solución: Debes crear tu propia subred y direcciones IP estáticas para tus recursos de ForwardingRule. Para obtener más información sobre cómo crear subredes, consulta Configurar subredes para redes de cargas de trabajo. Cuando creas un recurso ForwardingRule, puedes especificar la subred en el campo cidrRef.
Versiones: 1.14.3
Síntoma: los objetos del balanceador de carga no entran en el estado Ready.
Solución alternativa: debe crear recursos Backend en los que el campo spec tenga un valor. Los recursos Backend identifican los endpoints del balanceador de carga. Si no se proporciona un valor para el campo spec, se pueden producir errores.
La modificación de los recursos del balanceador de carga no reconcilia los servicios
Versiones: 1.14.3
Síntomas: al modificar los recursos personalizados del balanceador de carga, no se reconcilian los servicios del balanceador de carga.
Solución alternativa: Para mitigar este problema, elimine y vuelva a crear el balanceador de carga eliminando los recursos BackendService y ForwardingRule de ese balanceador de carga.
No se rechazan los nombres de zonas incorrectos
Versiones: 1.14.3
Síntomas: El recurso global BackendService no rechaza los nombres de zona incorrectos. Si el nombre de la zona es incorrecto, el balanceador de carga fallará en lugar de validar y rechazar la configuración.
Solución alternativa: debe proporcionar los nombres correctos de las zonas que se estén usando. Si el balanceador de carga está configurado incorrectamente, los recursos personalizados del balanceador de carga deben eliminarse y volver a crearse.
Error de webhook de balanceador de carga global y de zona
Versiones: 1.14.3
Síntomas: se devuelve el siguiente error:
Error from server (InternalError): error when creating "STDIN": Internal error
occurred: failed calling webhook
"projectnetworkpolicies.networking.global.gdc.goog": failed to call webhook:
Post
"https://unet-global-org-cm-webhooks.unet-system.svc/validate-networking-global-gdc-goog-v1-projectnetworkpolicy?timeout=10s":
context deadline exceeded
Solución alternativa: para mitigar este problema, reinicia y elimina el pod unet-global-cm:
root@bootstrapper-zone1:~# k8s.org get pods -n unet-system
unet-global-org-cm-backend-controller-7df58cd9db-8szkh 1/1 Running 42 (7h22m ago) 9d
root@bootstrapper-zone1:~# k8s.org delete pods -n unet-system
unet-global-org-cm-backend-controller-7df58cd9db-8szkh
Almacenamiento de registros
Loki pod falla o se cierra por falta de memoria durante la reproducción de WAL
Versiones: 1.14.3, 1.14.4 y 1.14.5
Síntomas:
Los pods audit-logs-loki-io del espacio de nombres obs-system pasan al estado CrashLoopBackOff. Esto se debe a errores prematuros de la comprobación de actividad o a la finalización por falta de memoria durante la reproducción del registro Write-Ahead Log (WAL), debido a un valor de wal_replay_ceiling que supera el límite de memoria del pod.
Solución:
Sigue estos pasos para ajustar la configuración de Loki y permitir que se reproduzca el WAL correctamente. Los cambios se deben aplicar al clúster afectado (por ejemplo, root-admin o org-infra).
Define
KUBECONFIG=/path/to/affected-cluster.kubeconfigcomo variable de entorno.Pausa
LoggingPipelineReconcilerpara evitar que el mando deshaga los cambios manuales. Aplica este archivo de manifiesto:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: log-logging-pipeline-pause namespace: root spec: subComponentRef: "log-admin" backend: operableParameters: controller: disableReconcilers: "LoggingPipelineReconciler"Confirma que la anulación está activa. El resultado debe incluir
"disable-reconcilers=LoggingPipelineReconciler".kubectl get deploy -n obs-system log-admin-backend-controller -o jsonpath='{.spec.template.spec.containers[0].args}' --kubeconfig=${KUBECONFIG} | jqReduce el
replay_memory_ceilingdel ConfigMapaudit-logs-loki-io-cma8GB.kubectl edit cm audit-logs-loki-io-cm -n obs-system --kubeconfig=${KUBECONFIG}Modifica la sección
wal:[...] wal: replay_memory_ceiling: 8GB ## <-- Change to 8GB [...]Opcional: Escala el proxy del objeto. Si los pods de
obj-proxyestán cerca de alcanzar sus límites de recursos, escala la implementación para gestionar el aumento de carga durante la recuperación.a. Comprobar el uso de recursos:
kubectl top po -n gpc-system -l name=obj-proxy-manager --kubeconfig=${KUBECONFIG}b. Si el uso es alto, escala la implementación:
kubectl scale deployment obj-proxy -n gpc-system --replicas=7 --kubeconfig=${KUBECONFIG}c. También puedes aumentar el límite de memoria del pod (por ejemplo, de
12000Mia16000Mi) si es necesario.Aumenta el tamaño del PVC del pod afectado (por ejemplo,
loki-storage-audit-logs-loki-io-0de70Gia75Gi) para evitar la presión del disco. Sigue el procedimiento internoSUPP-R001para cambiar el tamaño del PVC. El reinicio del paso siguiente aplica el nuevo tamaño.Añade un
startupProbealaudit-logs-loki-ioStatefulSet para que haya tiempo para la reproducción de WAL antes de que empiecen las comprobaciones de actividad. Al guardar el cambio, se reiniciarán los pods de forma gradual (entre 5 y 10 minutos).kubectl edit sts audit-logs-loki-io -n obs-system --kubeconfig=${KUBECONFIG}Añade este
startupProbea la especificación del contenedoraudit-logs-loki-io:startupProbe: failureThreshold: 1000 httpGet: path: /ready port: loki scheme: HTTP periodSeconds: 10 successThreshold: 1 timeoutSeconds: 10
Verificar la solución alternativa
Comprueba el estado de los pods y los StatefulSets: verifica que todos los pods
audit-logs-loki-ioesténRunningy que el StatefulSet muestre todas las réplicas como listas.kubectl get po -n obs-system -l app=audit-logs-loki-io --kubeconfig=${KUBECONFIG} kubectl get sts -n obs-system audit-logs-loki-io --kubeconfig=${KUBECONFIG}Confirma que se ha cambiado el tamaño del PVC. El resultado esperado es
75Gi.kubectl get pvc -n obs-system loki-storage-audit-logs-loki-io-0 -o jsonpath='{.status.capacity.storage}' --kubeconfig=${KUBECONFIG} ; echoConfirma que la recuperación de WAL se ha completado correctamente comprobando los registros del pod en busca de mensajes
errors=false.kubectl logs -n obs-system audit-logs-loki-io-0 --kubeconfig=${KUBECONFIG} | grep -i "wal"Comprueba que el uso del directorio
/waldentro del pod sea bajo.kubectl exec -n obs-system audit-logs-loki-io-0 -c audit-logs-loki-io --kubeconfig=${KUBECONFIG} -- df -Ph /walComprobar el estado del Loki Ring:
a. Redirige los puertos del servicio de Loki:
DATA_IP=$(ip -br -4 a s dev bond0| awk '{print $3}' | cut -d / -f 1) kubectl port-forward -n obs-system svc/audit-logs-loki-io --address $DATA_IP 43100:3100 --kubeconfig=${KUBECONFIG}b. Comprueba que todas las instancias estén en buen estado en
http://<DATA_IP>:43100/ring.
Limpiar la anulación y el proxy de objeto
Una vez que se haya completado la verificación, sigue estos pasos para limpiar los datos.
Elimina la anulación del subcomponente:
kubectl delete subcomponentoverride log-logging-pipeline-pause -n root --kubeconfig=${KUBECONFIG}Si has aumentado la escala de la implementación de
obj-proxy, vuelve a su tamaño original.
Supervisión
Los webhooks de AlertManager no envían alertas de algunos clústeres
Versión: 1.14.3
Síntomas: los webhooks de AlertManager no envían solicitudes ni notificaciones de alertas a ServiceNow desde ningún clúster que no sea el clúster de administrador raíz o el clúster en el que se encuentra la instancia de ServiceNow. Por lo tanto, no se crean alertas en ServiceNow para la organización.
Puedes identificar que el webhook no envía alertas si recibes mensajes de registro de errores repetidamente. Sigue estos pasos para buscar errores repetidos:
Exporta las variables de entorno:
export MGMT_API_KUBECONFIG=MGMT_API_KUBECONFIGSustituye
MGMT_API_KUBECONFIGpor la ruta al archivo kubeconfig del servidor de la API Management.Busca el pódcast:
kubectl --kubeconfig ${MGMT_API_KUBECONFIG} get pods \ -n mon-system -o name | grep mon-alertmanager-servicenow-webhook-backend-Obtén los registros:
kubectl --kubeconfig ${MGMT_API_KUBECONFIG} logs POD_NAME -n mon-systemSustituye
POD_NAMEpor el nombre del pod.Busca errores repetidos que tengan un aspecto similar al siguiente:
Errorsendingtherequest ... read: connection reset by peer
Solución alternativa: la solución alternativa recomendada para este problema es pausar dos subcomponentes: uno para las alertas de metamonitorización y otro para las alertas normales. A continuación, sustituya la etiqueta egress.networking.gke.io/enabled: "true" por networking.private.gdc.goog/infra-access: enabled en la implementación de mon-alertmanager-servicenow-webhook-backend del clúster afectado. Esta etiqueta permite que el pod se comunique con otros clústeres de infraestructura sin depender de una pasarela de salida.
Sigue estos pasos para aplicar la solución alternativa recomendada:
Exporta las variables de entorno:
export ROOT_KUBECONFIG=ROOT_KUBECONFIG export MGMT_API_KUBECONFIG=MGMT_API_KUBECONFIG export ORG=ORGHaz los cambios siguientes:
ROOT_KUBECONFIG: la ruta al archivo kubeconfig del clúster de administrador raíz.MGMT_API_KUBECONFIG: la ruta al archivo kubeconfig del servidor de la API Management.ORG: el espacio de nombres de la organización.
Pausar subcomponentes:
- Pausa el subcomponente
mon-alertmanager-servicenow-webhook:
kubectl --kubeconfig ${ROOT_KUBECONFIG} annotate subcomponent "mon-alertmanager-servicenow-webhook" \ -n "${ORG}" lcm.private.gdc.goog/paused=true- Pausa el subcomponente
mon-meta-monitoring:
kubectl --kubeconfig ${ROOT_KUBECONFIG} annotate subcomponent "mon-meta-monitoring" \ -n "${ORG}" lcm.private.gdc.goog/paused=true- Pausa el subcomponente
Actualiza la implementación de
mon-alertmanager-servicenow-webhook-backendque abarca la mayoría de las alertas:kubectl --kubeconfig ${MGMT_API_KUBECONFIG} edit deployment \ -n mon-system mon-alertmanager-servicenow-webhook-backendSustituye la etiqueta de
spec.template.metadata.labelspornetworking.private.gdc.goog/infra-access: "enabled"en lugar deegress.networking.gke.io/enabled: "true".Actualiza la
meta-alertmanager-servicenow-webhookimplementación que cubre las alertas relacionadas con la pila de monitorización:kubectl --kubeconfig ${MGMT_API_KUBECONFIG} edit deployment \ -n mon-system meta-alertmanager-servicenow-webhookSustituye la etiqueta de
spec.template.metadata.labelspornetworking.private.gdc.goog/infra-access: "enabled"en lugar deegress.networking.gke.io/enabled: "true".
También puedes usar Grafana para ver las mismas alertas.
Los incidentes de ServiceNow se duplican ocasionalmente
Versión: 1.14.3
Síntomas: es posible que veas incidentes duplicados de ServiceNow para el mismo pod.
Solución alternativa: puedes identificar las incidencias duplicadas comparando las huellas digitales de la descripción de la incidencia.
Las métricas de infraestructura pueden ser demasiado sensibles
Versión: 1.14.3
Síntomas: es posible que veas alarmas de la alerta oclcm-reconciler-success-rate.
Solución: Puedes silenciar la alerta sin problema. Se trata de una alerta demasiado ruidosa y estamos trabajando para mejorar la señal.
Las métricas de conciliación pueden ser demasiado sensibles
Versión: 1.14.3, 1.14.4 y 1.14.5
Síntomas: es posible que veas alarmas de la alerta component_reconciliation_errors.
Solución alternativa: Puedes silenciar la alerta de forma segura siguiendo el runbook MON-R2009. Esta alerta es demasiado ruidosa.
Hay dos alertas falsas abiertas en el clúster de administrador raíz
Versión: 1.14.3
Síntomas: las alertas MON-A0001_slow y MON-A0001_fast están activadas en el clúster de administrador raíz.
El incidente de ServiceNow tiene un aspecto similar al siguiente ejemplo:
number priority sys_created_on u_organization_id short_description active
INC004043 1 - Critical 2025-04-30 08:29:00 root MON-A0001_slow true
INC0040427 1 - Critical 2025-04-30 08:28:55 root MON-A0001_fast true
El incidente tiene la siguiente descripción:
Description:
Message: "Blackbox monitoring metrics pipeline down"
Runbook URL: MON-R0001
Generator URL: cortex.mon-system.svc:9009/graph?g0.expr=%28mon_metrics_pipeline_error_rate1h%7B_slo_alert_id%3D%22mon-a0001-blackbox-monitoring-obs-system%2Finfra-obs-obs-system%22%7D+%3E+%2814.4+%2A+0.05%29+and+mon_metrics_pipeline_error_rate5m%7B_slo_alert_id%3D%22mon-a0001-blackbox-monitoring-obs-system%2Finfra-obs-obs-system%22%7D+%3E+%2814.4+%2A+0.05%29%29+or+%28mon_metrics_pipeline_error_rate6h%7B_slo_alert_id%3D%22mon-a0001-blackbox-monitoring-obs-system%2Finfra-obs-obs-system%22%7D+%3E+%286+%2A+0.05%29+and+mon_metrics_pipeline_error_rate30m%7B_slo_alert_id%3D%22mon-a0001-blackbox-monitoring-obs-system%2Finfra-obs-obs-system%22%7D+%3E+%286+%2A+0.05%29%29&g0.tab=1
AlertCode: MON-A0001
Severity: critical
Cluster: org-1-admin
Namespace: <no value>
Pod Name: <no value>
fingerprint: 3b386f1373178e97
Solución alternativa: sigue estos pasos para resolver el problema solo en el clúster de administrador raíz:
Elimina la etiqueta
monitoring.gdc.goog/metamonitoring-project=mon-systemde lamon-a0001-blackbox-monitoring-obs-systemMonitoringRule.Elimina todas las reglas de grabación con el nombre
mon_metrics_pipeline_absenty el valor de la etiqueta de clústerORG_NAME-admindemon-a0001-blackbox-monitoring-obs-systemMonitoringRule.En el siguiente ejemplo se muestra una regla de registro
mon_metrics_pipeline_absentque se va a eliminar:Expr: absent(probe_success{job="mon-system/meta-monitoring-meta-prometheus/meta_prometheus_probe_metric",cluster="gdchservices-admin"}) OR on() vector(0) Labels: _source_project: blackbox-monitoring-obs-system Cluster: gdchservices-admin Job: mon-system/meta-monitoring-meta-prometheus/meta_prometheus_probe_metric Record: mon_metrics_pipeline_absent
Las alertas MON_A0001_slow y MON_A0001_fast vuelven al estado Normal al cabo de unos minutos (unos 40 minutos).
El gestor de controladores de administrador raíz muestra una tasa de errores alta
Versión: 1.14.3
Síntomas: es posible que veas alarmas de la alerta
ControllerReconciliationErrorRateHigh. El gestor de controladores mostrará registros
que dicen: ApplianceStorage.ceph.storage.private.gdc.goog \"appliance-storage\"
not found
Solución: Puedes inhabilitar el controlador que da error sin problema.
Exporta las variables de entorno:
export ROOT_KUBECONFIG=ROOT_KUBECONFIGEdita el despliegue del gestor de controladores de administrador raíz:
kubectl --kubeconfig ${ROOT_KUBECONFIG} edit deployment \ -n gpc-system root-admin-controllerEn el contenedor
manager, si aún no hay ningún argumento--disable-reconcilers, añade uno con el valor--disable-reconcilers=ApplianceStorageTunnelReconciler. Si es así, añade elApplianceStorageTunnelReconcilerreconciliador con una coma. Por ejemplo:--disable-reconcilers=ManagementSwitch,ManagementAggSwitch,TORSwitch,AggSwitch,ApplianceTORSwitch,ApplianceStorageTunnelReconciler
Los registros de errores deberían borrarse.
Los paneles de control de KUB no muestran datos en todos los paneles de PA
Versiones: 1.14.3
Síntomas: los paneles de control de KUB no muestran datos en todos los paneles de Grafana para los administradores de la plataforma.
Solución alternativa: pausa el subcomponente KSM y actualiza monitoringtarget y metricsproxysidecar:
Pausa el subcomponente:
export SUBCOMPONENT_NAME=mon-kube-state-metrics export SUBCOMPONENT_NAMESPACE=ORG_NAME kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG annotate subcomponent "${SUBCOMPONENT_NAME:?}" -n "${SUBCOMPONENT_NAMESPACE:?}" lcm.private.gdc.goog/paused=trueHaz los cambios siguientes:
- ORG_NAME: el nombre de la organización
- ROOT_ADMIN_KUBECONFIG: la ruta al archivo
root-adminkubeconfig
Añada lo siguiente a
mon-kube-state-metrics-metrics-proxymetricsproxysidecar en la sección.spec.destinations:- certificate: secretName: mon-pa-kube-state-metrics-cert port: 8091La métrica actualizada proxysidecar podría tener el siguiente aspecto:
... spec: containerName: otel-collector destinations: - certificate: secretName: mon-io-kube-state-metrics-cert port: 8090 - certificate: secretName: mon-pa-kube-state-metrics-cert port: 8091 resources: limits: ...Elimina la sección
matchClusters:delmon-pa-kube-state-metricsmonitoringtargetspec. Elmon-pa-kube-state-metricsmonitoringtargetspecactualizado podría tener este aspecto:... spec: podMetricsEndpoints: metricsRelabelings: - action: replace replacement: platform-obs targetLabel: _gdch_project path: value: /metrics port: value: 8091 scheme: value: http scrapeInterval: 60s scrapeTimeout: 45s selector: matchLabels: monitoringtarget: mon-kube-state-metrics
Permisos mal configurados para el rol observability-admin-debugger
Versiones: 1.14.3 y 1.14.4
Síntomas: los IOs no pueden reiniciar los pods de Cortex o Prometheus en el espacio de nombres mon-system.
Solución:
Para organizaciones:
- Pausa el
iam-commonsubcomponente. Actualiza el
observability-admin-debugger/iam-systemroleTemplate de la siguiente manera:apiVersion: iam.private.gdc.goog/v1alpha1 kind: RoleTemplate metadata: name: observability-admin-debugger namespace: iam-system spec: metadata: roleType: predefined hierarchyLevel: org persona: infra-operator displayName: "Observability Admin" bindingType: rolebinding roleNamespace: "mon-system" operableComponent: IAM rules: - apiGroups: - "apps" resources: - "deployments" resourceNames: - "logmon-operator" - "cortex-tenant" - "meta-blackbox-exporter" - "blackbox-exporter" verbs: - "*" - apiGroups: - "apps" resources: - "statefulsets" resourceNames: - "anthos-prometheus-k8s" - "meta-prometheus" - "mon-prober-backend-prometheus" - "primary-prometheus-shard0-replica0" - "primary-prometheus-shard0-replica1" - "primary-prometheus-shard1-replica0" - "primary-prometheus-shard1-replica1" verbs: - "*" - apiGroups: - "" resources: - "secrets" resourceNames: - "anthos-prometheus-scrape-cert" - "kube-control-plane-metrics-proxy-cert" - "metrics-consumers-ca" - "metrics-providers-ca" - "anthos-prometheus-etcd-scrape" verbs: - "*" - apiGroups: - "cert-manager.io" resources: - "certificates" resourceNames: - "anthos-prometheus-scrape" - "kube-control-plane-metrics-proxy-cert" - "metrics-consumers-ca" - "metrics-providers-ca" verbs: - "get" - "list" - "watch"
Para el administrador raíz:
- Pausa el
iam-commonsubcomponente. Actualiza el
observability-admin-debugger-root/iam-systemroleTemplate de la siguiente manera:apiVersion: iam.private.gdc.goog/v1alpha1 kind: RoleTemplate metadata: name: observability-admin-debugger namespace: iam-system spec: metadata: roleType: predefined hierarchyLevel: org persona: infra-operator displayName: "Observability Admin" bindingType: rolebinding roleNamespace: "mon-system" operableComponent: IAM rules: - apiGroups: - "apps" resources: - "deployments" resourceNames: - "logmon-operator" - "cortex-tenant" - "meta-blackbox-exporter" - "blackbox-exporter" verbs: - "*" - apiGroups: - "apps" resources: - "statefulsets" resourceNames: - "anthos-prometheus-k8s" - "meta-prometheus" - "mon-prober-backend-prometheus" - "primary-prometheus-shard0-replica0" - "primary-prometheus-shard0-replica1" - "primary-prometheus-shard1-replica0" - "primary-prometheus-shard1-replica1" verbs: - "*" - apiGroups: - "" resources: - "secrets" resourceNames: - "anthos-prometheus-scrape-cert" - "kube-control-plane-metrics-proxy-cert" - "metrics-consumers-ca" - "metrics-providers-ca" - "anthos-prometheus-etcd-scrape" verbs: - "*" - apiGroups: - "cert-manager.io" resources: - "certificates" resourceNames: - "anthos-prometheus-scrape" - "kube-control-plane-metrics-proxy-cert" - "metrics-consumers-ca" - "metrics-providers-ca" verbs: - "get" - "list" - "watch"
Falta el rol de depurador de Grafana
Versiones: 1.14.3 y 1.14.4
Síntomas: El rol grafana-debugger-cp no está presente en los espacios de nombres del proyecto de sombra de observabilidad (*-obs-system). No se puede conceder a los usuarios el conjunto correcto de permisos necesarios para depurar problemas relacionados con Grafana.
Solución alternativa: crea el siguiente recurso personalizado ClusterRoleTemplate en
infra-cp y usa el ClusterRole correspondiente que se crea para obtener los permisos de
grafana-debugger.
apiVersion: iam.private.gdc.goog/v1alpha1
kind: ClusterRoleTemplate
metadata:
name: grafana-debugger-cp
spec:
metadata:
roleType: predefined
hierarchyLevel: infra-cp
persona: infra-operator
displayName: "Grafana Admin"
bindingType: rolebinding
operableComponent: MON
rules:
- apiGroups:
- "apps"
resources:
- "deployments"
resourceNames:
- "grafana-proxy-server"
verbs:
- "delete"
- "get"
- "list"
- "patch"
- "update"
- "watch"
- apiGroups:
- "apps"
resources:
- "statefulsets"
resourceNames:
- "grafana"
verbs:
- "delete"
- "get"
- "list"
- "patch"
- "update"
- "watch"
- apiGroups:
- ""
resources:
- "pods"
resourceNames:
- "grafana-0"
verbs:
- "delete"
- "get"
- "list"
- "patch"
- "update"
- "watch"
- apiGroups:
- ""
resources:
- "pods"
verbs:
- "get"
- "list"
- "watch"
- apiGroups:
- "monitoring.private.gdc.goog"
resources:
- "datasources"
verbs:
- "create"
- "delete"
- "get"
- "list"
- "update"
- "patch"
- "watch"
- apiGroups:
- "monitoring.global.private.gdc.goog"
resources:
- "datasourcereplicas"
verbs:
- "create"
- "delete"
- "get"
- "list"
- "update"
- "patch"
- "watch"
Las métricas y los registros entre zonas no se ven después de añadir una zona
Versiones: 1.14.*
Síntomas: el panel de control de Grafana no muestra los registros ni las métricas de la zona recién añadida.
Solución alternativa 1: reinicia la implementación de datasource-proxy:
kubectl KUBECONFIG=${KUBECONFIG_ORG} rollout restart deployment datasource-proxy -n mon-system
De esta forma, se reiniciarán los pods de datasource-proxy y se actualizará la configuración de los endpoints entre zonas de la zona recién añadida.
El finalizador MonitoringTarget impide que se elimine el espacio de nombres
Versiones: 1.14.3 y 1.14.4
Síntomas: El espacio de nombres no se elimina y hay clústeres incorrectos en la organización correspondiente.
Solución alternativa: elimina manualmente los finalizadores de los recursos personalizados MonitoringTarget que han bloqueado la eliminación del espacio de nombres.
La eliminación de un proyecto se bloquea porque hay finalizadores pendientes en el panel de control y en la fuente de datos
Versiones: 1.14.3 y 1.14.4
Corregido: 1.14.3 hotfix 22
Síntomas: los proyectos no se eliminan y el espacio de nombres de finalización tiene errores, como en el siguiente ejemplo:
Some resources are remaining: dashboards.observability.gdc.goog has 2 resource instances, datasources.monitoring.private.gdc.goog has 2 resource instances.
Solución: Elimina manualmente los finalizadores del panel de control y de la fuente de datos.
No se ven las métricas de KSM
Versiones: 1.14.3
Corregido: 1.14.3 hotfix 22
Síntomas: los paneles de control de KUB muestran No Data en todos los paneles.
Solución: Pausa el subcomponente KSM y actualiza monitoringtarget
y metricsproxysidecar.
Subcomponente de pausa:
export SUBCOMPONENT_NAME=mon-kube-state-metrics export SUBCOMPONENT_NAMESPACE=ORG_NAME kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG annotate subcomponent "${SUBCOMPONENT_NAME:?}" -n "${SUBCOMPONENT_NAMESPACE:?}" lcm.private.gdc.goog/paused=trueHaz los cambios siguientes:
- ORG_NAME: el nombre de la organización.
- ROOT_ADMIN_KUBECONFIG: la ruta al archivo kubeconfig del administrador raíz.
Añade lo siguiente a
mon-kube-state-metrics-metrics-proxymetricsproxysidecar en.spec.destinations:- certificate: secretName: mon-pa-kube-state-metrics-cert port: 8091La métrica
mon-kube-state-metrics-metrics-proxymetricsproxysidecar actualizada tiene el siguiente aspecto:... spec: containerName: otel-collector destinations: - certificate: secretName: mon-io-kube-state-metrics-cert port: 8090 - certificate: secretName: mon-pa-kube-state-metrics-cert port: 8091 resources: limits: ...Elimina la sección
matchClusters:de la especificaciónmon-pa-kube-state-metricsmonitoringtarget. La especificaciónmon-pa-kube-state-metricsmonitoringtarget actualizada tiene este aspecto:... spec: podMetricsEndpoints: metricsRelabelings: - action: replace replacement: platform-obs targetLabel: _gdch_project path: value: /metrics port: value: 8091 scheme: value: http scrapeInterval: 60s scrapeTimeout: 45s selector: matchLabels: monitoringtarget: mon-kube-state-metrics`
La canalización de métricas del sistema no funciona
Versión: 1.14.3
Síntomas: La alerta MON-A0001 está activa incluso después de seguir el manual de instrucciones MON-R0001.
Solución alternativa:
Si el problema se produce en el clúster de administrador, crea el siguiente
SubcomponentOverrideenroot-admincon el runbook IAC-R0004. Para otros clústeres, como el de usuario, perímetro o compartido, crea elSubcomponentOverrideen${ORG}-mp.kind: SubcomponentOverride metadata: name: mon-cortex-tenant namespace: <NAMESPACE> spec: backend: operableParameters: concurrency: 1024 resourcesLimit: cpu: "8" memory: 16Gi subComponentRef: mon-cortex-tenantBusca el
NAMESPACEcorrecto:kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG get subcomponent -A | grep "mon-cortex-tenant"El resultado es el siguiente:
org-1-mp mon-cortex-tenant 27h ReconciliationCompleted org-1 mon-cortex-tenant 46h ReconciliationCompleted root mon-cortex-tenant 47h ReconciliationCompletedEl espacio de nombres es la raíz si la canalización está inactiva para
root-admin, o bien org-1 si la canalización está inactiva paraorg-1 admin:kubectl --kubeconfig=ORG_ADMIN_KUBECONFIG get subcomponent -A | grep "mon-cortex-tenant"El resultado es el siguiente:
g-org-1-perimeter-cluster mon-cortex-tenant 40h ReconciliationCompleted g-org-1-shared-service-cluster mon-cortex-tenant 40h ReconciliationCompleted user-vm-1-cluster mon-cortex-tenant 40h ReconciliationCompleted user-vm-2-cluster mon-cortex-tenant 40h ReconciliationCompletedEn este caso, el espacio de nombres correcto podría ser
g-org-1-perimeter-cluster,g-org-1-shared-service-cluster,user-vm-1-clusterouser-vm-2-cluster, en función del clúster para el que esté inactivo el flujo de procesamiento de métricas del sistema.Después de aplicar el
SubcomponentOverride, reinicia la implementación de cortex-tenant en los clústeres correspondientes. Comprueba si los valores se han actualizado en el clúster correspondiente:kubectl --kubeconfig ${KUBECONFIG:?} get configmap cortex-tenant-config -n mon-system -o yamlActualiza el campo de simultaneidad.
Reinicia las implementaciones de cortex-tenant:
kubectl --kubeconfig ${KUBECONFIG:?} rollout restart deployment/cortex-tenant -n mon-system
Arquitectura multicliente
La consola no indica los fallos de creación de grupos de nodos
Versión: 1.14.4, 1.14.5 y 1.14.6
Corregido: 1.14.7
Síntomas: en la consola de GDC, cuando no se puede crear un grupo de nodos, la interfaz de usuario muestra incorrectamente un mensaje creation in progress que indica que el grupo de nodos se ha creado correctamente.
Solución alternativa: usa la CLI gdcloud para validar la creación del grupo de nodos.
Multizona
La zona inaccesible redirige a la página de autenticación
Versión: 1.14.x
Síntomas: cuando no se puede acceder a una zona, la consola de GDC redirige a una página que muestra un error de autenticación. Sin embargo, es posible que la inaccesibilidad de la zona no se deba a un problema de autenticación, sino a una interrupción zonal.
Solución: utilice la URL zonal para solucionar el problema. Si la URL zonal tampoco funciona, pide a tu operador de infraestructura que determine si la zona en la que tienes problemas de autenticación está inactiva.
No se aplica el rol para ver zonas con la CLI de gdcloud
Versión: 1.14.x
Síntomas: El rol de gestión de identidades y accesos necesario para usar el comando gdcloud zones list no se aplica al universo de GDC de forma predeterminada. El rol que falta, que no está disponible como rol predefinido, impide usar la CLI de gdcloud para enumerar las zonas.
Solución alternativa: aplica el rol de gestión de identidades y accesos global-zone-viewer y los recursos de enlace de roles al servidor de la API global:
Crea un archivo YAML de rol, como
global-zone-viewer.yaml, con el siguiente contenido:apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: global-zone-viewer namespace: mz-system rules: - apiGroups: - location.mz.global.private.gdc.goog resources: - zones verbs: - get - list --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: global-zone-viewer-binding namespace: mz-system roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: global-zone-viewer subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: system:authenticatedAplica el archivo YAML al servidor de la API global de la organización:
kubectl --kubeconfig ORG_GLOBAL_API_SERVER_KUBECONFIG apply -f global-zone-viewer.yaml
Esta vinculación de rol autentica a todos los usuarios del sistema para ver las zonas mediante gdcloud zones list.
Errores intermitentes de inicio de sesión en la URL de la consola global
Versiones: 1.14.x
Síntomas: al iniciar sesión en la consola de GDC con la URL global, es posible que recibas errores que indiquen que tu sesión ya no es válida. Este error puede deberse a un error de red subyacente y no a una representación precisa del estado de tu sesión.
Solución: inicia sesión en la consola de GDC con las URLs zonales para gestionar los recursos globales de cada zona. Para obtener más información sobre cómo cambiar de contexto de zona desde la consola de GDC, consulta Gestionar recursos en varias zonas.
Redes
Ajustar el orden de las zonas de MultiZoneNetworkConfig provoca un error de sustitución de la configuración
Versiones: todas las versiones 1.14.x pueden verse afectadas.
Síntomas:
El estado
READYde los conmutadores Top of Rack (ToR) es False. Para confirmarlo, ejecuta el siguiente comando:kubectl get torswitches -ALa sustitución de la configuración del interruptor falla y se muestra un error que indica que la entrada ya existe. Esto se puede ver en los registros de sustitución de la configuración del conmutador. El mensaje de error es similar al siguiente:
% Insertion failed - entry already exists
Este problema se debe a que se ha modificado el orden de las zonas en MultiZoneNetworkConfig. El sistema genera números de secuencia para las reglas de listas de acceso de BGP en función de la posición de cada zona en la lista de configuración. Si se cambia el orden de las zonas, el sistema genera nuevas reglas con números de secuencia diferentes que entran en conflicto con las reglas que ya están presentes en el interruptor.
Soluciones:
Para resolver este problema, elimine manualmente la configuración de la lista de acceso de la ruta de AS de BGP en conflicto de cada switch ToR afectado. De esta forma, el sistema puede conciliar y aplicar la configuración correcta.
- Establece una conexión SSH con cada switch ToR que no esté en estado
Ready. Entra en el modo de configuración global:
config tElimina la configuración de la lista de acceso en conflicto:
no ip as-path access-list other-zonesSalir del modo de configuración.
Una vez que se haya ejecutado este comando en todos los conmutadores afectados, el reconciliador aplicará la configuración correcta y los conmutadores pasarán al estado READY.
Config-replace commit expiry
Versiones: todas las versiones 1.14.x pueden verse afectadas.
Síntomas:
Un gran número de listas de control de acceso (LCA) provoca un tiempo de espera al configurar los conmutadores de red. El recurso personalizado BorderLeafSwitch no está en estado Ready y, al establecer una conexión SSH con el interruptor no preparado, se muestra el estado Commit expiry.
Por ejemplo, el siguiente comando muestra el estado:
sh config-replace log verify
El resultado debería ser similar al siguiente:
Config-replace type: atomic .replace_tmp_11924
Start Time: Wed Jul 09 18:08:33 2025
Operation Status: Success
Commit Status: Commit expiry
Solución:
En las versiones 1.14.3 o 1.14.7+, edita el recurso personalizado SubcomponentOverride llamado pnet-core-override en el espacio de nombres root y añade un campo httpTimeout a .spec.operableParameters.netDevGW.
apiVersion: lcm.private.gdc.goog/v1
kind: SubcomponentOverride
metadata:
name: pnet-core-override
namespace: root
spec:
backend:
bootstrapParameters:
enableMetricsEncryption: true
operableParameters:
disableNetworkReconcilerFeatures: ""
enableOperationStoragePVC: false
netDevGW:
httpTimeout: 10m
subComponentRef: pnet-core
Espera 15 minutos para que la infraestructura de automatización envíe las nuevas configuraciones a los interruptores. Configura la httpTimeout según sea necesario hasta que desaparezcan los mensajes de Commit expiry.
En las versiones 1.14.4, 1.14.5 y 1.14.6, realiza manualmente la sustitución de la configuración y confirma los cambios.
Pausar el cambio:
export SWITCH_NAME=SWITCH_NAME # example: aa-aa-blsw01 export SWITCH_TYPE=SWITCH_TYPE # example: borderleafswitch kubectl -n gpc-system annotate $SWITCH_TYPE $SWITCH_NAME system.private.gdc.goog/paused="true"Sigue el manual de instrucciones PNET-P0001 para obtener acceso con interruptores.
Busca la configuración que quieras sustituir:
switch-cli# dir | grep new_configCompleta la sustitución de la configuración:
switch-cli# configure replace <new_config_file>Este proceso puede tardar más de cinco minutos.
Una vez que config-replace se haya completado correctamente, confirma el cambio:
switch-cli# configure replace commitReanuda el interruptor:
kubectl -n gpc-system annotate $SWITCH_TYPE $SWITCH_NAME system.private.gdc.goog/paused-
Fallo en la implementación con ASN de BGP de 4 bytes
Versiones: 1.14.3 y 1.14.4
Síntomas: al configurar el protocolo de pasarela fronteriza (BGP) con un número de sistema autónomo (ASN) de 4 bytes en los conmutadores de red, se producen errores de configuración. Si no se aplica correctamente la configuración de BGP, es posible que la red de esa zona de GDC no pueda establecer un enrutamiento adecuado, lo que provocaría problemas de conectividad, la imposibilidad de anunciar rutas o una inestabilidad general de la red. Por el momento, no hay ninguna solución alternativa.
Tráfico anycast global bloqueado
Versiones: 1.14.3
Síntomas: las listas de control de acceso (LCA) bloquean el tráfico dirigido a los endpoints anycast globales.
Solución alternativa:
Para solucionar el problema por el que las listas de control de acceso (LCAs) bloquean el tráfico de difusión simultánea global, debes crear un recurso personalizado SubcomponentOverride en el clúster de administrador raíz para permitir explícitamente el tráfico a los bloques CIDR de difusión simultánea del servidor DNS global. Sigue estos pasos:
Encuentra todos los bloques CIDR de anycast globales. Para encontrar los bloques CIDR de anycast global que debes actualizar, sigue estos pasos:
Conéctate al servidor de la API global raíz.
Lista todos los recursos personalizados de subredes de todos los espacios de nombres con el siguiente comando:
kubectl get subnet -AFiltra la salida para encontrar recursos de subred en los que el filtro
metadata.namecontenga la palabra claveanycast.Por cada recurso de subred que encuentre con
anycasten su nombre, anote el valor despec.subnet. Este valor representa un bloque CIDR de difusión general global.
En el clúster de administrador raíz, crea un
SubcomponentOverriderecurso personalizado llamadopnet-trafficpolicy-dc-overrideen el espacio de nombres raíz. Por cada subred de difusión general que haya identificado en el paso anterior, añada las reglas tal como se muestra en el archivo YAML:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: pnet-trafficpolicy-dc-override namespace: root spec: backend: operableParameters: breakglassRules: default-traffic-policy-data: - IPVersions: - IPv4 L4Protocol: IP action: Accept description: INTERCONNECT_RULE_DESCRIPTION destinationEndPoint: host: hostPrefix: GLOBAL_ANYCAST_CIDR port: portType: ANY direction: Ingress enforcePoints: - enableLogging: false enforcePointType: DataInterconnect sourceEndPoint: host: hostType: ANY port: portType: ANY - IPVersions: - IPv4 L4Protocol: IP action: Accept description: HAIRPIN_RULE_DESCRIPTION destinationEndPoint: host: hostType: ANY port: portType: ANY direction: Ingress enforcePoints: - enableLogging: false enforcePointType: DataHairpin sourceEndPoint: host: hostPrefix: GLOBAL_ANYCAST_CIDR port: portType: ANY subComponentRef: pnet-trafficpolicy-dcHaz los cambios siguientes:
INTERCONNECT_RULE_DESCRIPTION: texto descriptivo de la regla de red de interconexión.GLOBAL_ANYCAST_CIDR: el bloque CIDR de difusión general global, como 136.125.38.128/28. Por cada anycast que encuentres en el paso anterior, crea la regla con este archivo YAML.HAIRPIN_RULE_DESCRIPTION: texto descriptivo de la regla de red de bucle.
Un error parcial de DCI provoca una pérdida de tráfico
Versiones: 1.14.3
Síntomas: cuando los dos enlaces de interconexión de centros de datos (DCI) que conectan el switch de hoja de borde de una zona al switch del operador, o cuando el switch de hoja de borde de una zona sufre un fallo de hardware, se pierde aproximadamente el 50% del tráfico de red entre zonas.
El nombre de la VRF es demasiado largo
Versiones: 1.14.2
Síntomas: es posible que veas un mensaje como este ejemplo, que indica que los interruptores no están en buen estado al ejecutar este comando:
sh config-replace log verify
La salida podría tener este aspecto:
Operation : Config-replace to user config
Checkpoint file name : .replace_tmp_20791
Scheme : tmp
Cfg-replace done By : admin
Cfg-replace mode : atomic
Verbose : disabled
Start Time : Fri, 20:03:38 08 Nov 2024
Start Time UTC : Fri, 20:03:38 08 Nov 2024
-------------------------------------------
Command : snmp-server context gdch-services-orginfrainternal-vrf vrf gdch-servic
es-orginfrainternal-vrf, parse error : -20, mode : /exec/configure/vrf
Failed to parse: snmp-server context gdch-services-orginfrainternal-vrf vrf gdch
-services-orginfrainternal-vrf
Configuration above is invalid or not supported via CR/rollback feature
Solución alternativa: El nombre del CR de la organización puede tener un máximo de 19 caracteres.
Fallo en la comunicación del pod de StatefulSet
Versiones: 1.14.3 y 1.14.4
Corregido: 1.14.3 hotfix 23, 1.14.5
Síntomas: problemas o interrupciones de conectividad debido a que la eliminación de objetos de endpoint de Cilium (CEP) no se gestiona correctamente después de reiniciar el pod StatefulSet.
Esto podría provocar que la identidad del endpoint no gestionado haga que las políticas de red rechacen erróneamente el tráfico legítimo. Los pods afectados se pueden verificar comprobando
que no tengan el objeto CEP correspondiente:
kubectl get cep -A | grep [*POD_IP*]
Solución alternativa: reinicia los pods StatefulSet afectados para actualizar su UID y
actualizar los metadatos asociados:
kubectl rollout restart statefulset [*STATEFULSET_NAME*] -n [*NAMESPACE*]
No se puede acceder al nodo en la red de datos
Se trata de un problema poco habitual que puede producirse si el pod anetd se queda en un bucle de fallos.
Un recurso del kernel esencial para la conectividad de los nodos puede quedarse bloqueado en un estado dañado.
En esta guía se describen los síntomas de este problema y los pasos que se pueden seguir para solucionarlo.
Versiones:
Todas las versiones de Google Distributed Cloud (GDC) con air gap pueden verse afectadas.
Síntomas:
Si se produce este problema, es posible que observes los siguientes síntomas:
- Los nodos se quedan en el estado
NotReady - Al describir el nodo, se muestra el mensaje
kubelet:kubelet was found unhealthy; repair flag : true - No se puede acceder al nodo mediante SSH en la red de datos
Solución alternativa:
Sigue estas instrucciones para reparar cada nodo en mal estado:
Obtén la dirección IP de gestión del nodo afectado:
kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get -n gpc-system servers/NODE_NAME -ojsonpath='{.spec.managementNetwork.ips[0]}'Obtén acceso SSH al nodo afectado.
Conéctate al nodo mediante SSH con la dirección IP de gestión del nodo.
En el nodo, ejecuta el siguiente comando y, a continuación, cierra la conexión SSH:
tc filter del dev bond0 egressReinicia el conjunto de demonios
anetddel clúster con el nodo afectado:kubectl --kubeconfig AFFECTED_CLUSTER_KUBECONFIG rollout restart ds/anetd -n kube-system
Crear un PNP de salida que permita todo el tráfico rechaza el tráfico inesperado
Versiones:
Todas las versiones de Google Distributed Cloud (GDC) con air gap pueden verse afectadas.
Síntomas: La política de red del proyecto (PNP) allow-all-egress permite el tráfico a los endpoints del proyecto y a los endpoints externos fuera del clúster, pero no permite el tráfico a los endpoints del sistema. Este problema puede provocar que se bloquee el acceso al sistema y a los servicios propios, como la resolución de DNS y el almacenamiento de objetos.
El allow-all-egress PNP podría ser similar al siguiente:
apiVersion: networking.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
namespace: PROJECT_1
name: allow-all-egress
spec:
policyType: Egress
subject:
subjectType: UserWorkload
egress:
- {}
Solución: elimina el allow-all-egress PNP. De forma predeterminada, una vez que se inhabilita la protección contra la filtración externa de datos, se permite el tráfico a los endpoints externos y del proyecto que no sean del clúster ni del sistema.
kubectl delete pnp [*ALLOW_ALL_EGRESS_PNP_NAME*] -n [*NAMESPACE*]
Problema con el panel de control de Grafana de SLO de disponibilidad entre zonas de varias zonas
Versiones: 1.14.3
Síntomas: en Grafana, el panel de control pnet-cross-zone-availability SLO no muestra ninguna métrica.
Solución: sigue el runbook PNET-P0001 para obtener acceso al conmutador y comprueba manualmente la sesión de BGP multizona y el estado de la conectividad.
No se pueden reconciliar las pasarelas de entrada del plano de datos y de gestión
Versiones: 1.14.3
Síntomas: los subcomponentes asm-dataplane-ingress o asm-management-ingress no se pueden conciliar y se muestra el siguiente error:
message: 'Reconciliation error: E0111 - upgrade chart: cannot patch "management-ingress-gateway" with kind BackendService: BackendService.networking.gdc.goog "management-ingress-gateway" is invalid: spec.targetPorts: Invalid value: "array": TargetPorts list is immutable'
Otros valores posibles en la cadena de error en lugar de BackendService son ForwardingRuleInternal y ForwardingRuleExternal. Del mismo modo, el nombre del recurso puede ser dataplane-ingress-gateway, dataplane-ingress-gateway-global o management-ingress-gateway-global en lugar de management-ingress-gateway.
Solución alternativa: identifica si el recurso está presente en el servidor de la API de gestión o en el servidor de la API global. Esto se puede deducir de la versión de la API del tipo de recurso en la cadena de error. Por ejemplo, un recurso con el sufijo networking.gdc.goog está presente en el servidor de la API de gestión, mientras que un recurso con el sufijo networking.global.gdc.goog está presente en el servidor de la API global.
Una vez que hayas identificado el servidor de la API, elimina el recurso con el archivo kubeconfig correspondiente. Por ejemplo:
kubectl --kubeconfig API_SERVER_KUBECONFIG delete Backendservice dataplane-ingress-gateway -n istio-system
La página de la política de red del proyecto no admite el campo de selector de proyectos en la API ProjectNetworkPolicy
Versiones: 1.14.3 y 1.14.4
Síntomas: Cuando creas una política de red de proyecto que incluye el campo projectSelector y la ves en la consola de GDC, la interfaz de usuario muestra todos los proyectos seleccionados para la política en lugar de los proyectos del campo projectSelector.
Solución alternativa: usa la API para crear y leer una política de red de un proyecto que incluya el campo projectSelector.
Sistema operativo
Fallo en el aprovisionamiento del servidor
Versiones: 1.14.3
Síntomas: Durante el aprovisionamiento del servidor, pueden aparecer los siguientes errores 401 en el recurso personalizado BaremetalHost correspondiente al descargar la imagen del SO del registro de Harbor, y el servidor se queda bloqueado en un bucle de desaprovisionamiento y reaprovisionamiento.
Para comprobar si se han producido estos errores, describe el BaremetalHost recurso personalizado:
kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG describe baremetalhost SERVER_NAME -n gpc-system
La salida podría tener este aspecto:
Normal InspectionComplete 14m metal3-baremetal-controller Hardware inspection completed
Normal ProvisioningStarted 5m39s metal3-baremetal-controller Image provisioning started for https://robot%24om5hgylsfvzxs43umvwtu43boiwwc4djmv4hizloonuw63rnmjqwg23fnzsc2ylqnfsxq5dfnzzws33ofvzwk4twmvza:4usy4JXE6BAdEVU2t8LMqDPhfM4EnW73@10.129.24
.66:31714/artifacts/serve/Z3BjLXN5c3RlbS1vcy1pbWFnZXMvZ2RjaC1ub2RlLW9zOnJvY2t5LTg2LTEuMTQtdjIwMjQxMDIzLTEuMTQtcjI4MQ==
Normal ProvisioningError 5m28s metal3-baremetal-controller Image provisioning failed: Failed to prepare to deploy: Validation of image href https://robot%24om5hgylsfvzxs43umvwtu43boiwwc4djmv4hizloonuw63rnmjqwg23fnzsc2ylqnfsxq5dfnzzws33ofvzwk
4twmvza:4usy4JXE6BAdEVU2t8LMqDPhfM4EnW73@10.129.24.66:31714/artifacts/serve/Z3BjLXN5c3RlbS1vcy1pbWFnZXMvZ2RjaC1ub2RlLW9zOnJvY2t5LTg2LTEuMTQtdjIwMjQxMDIzLTEuMTQtcjI4MQ== failed, reason: Got HTTP code 401 instead of 200 in response to HEAD request.
Normal DeprovisioningStarted 5m17s metal3-baremetal-controller Image deprovisioning started
Solución:
Obtén el nombre y el espacio de nombres del
nodePoolClaimal que pertenece el servidor:kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get server SERVER_NAME -n gpc-system -ojson | jq '.spec.nodePoolClaimRef'La salida podría tener este aspecto:
{ "name": "control-plane-extension-pool-o2-standard1-96-gdc-metal", "namespace": "gpu-org-lancer" }Obtén el nombre de la imagen del SO de
NodePoolClaim:kubectl get nodepoolclaim NODEPOOLCLAIM_NAME -n NODEPOOLCLAIM_NAMESPACE -o json | jq '.spec.machineSpec.osImageName'Obtén la URL de la imagen del SO desde
OSImageMetadata:kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get osimagemetadata OS_IMAGE_NAME -o json | jq '.commonMetadata.servingURL'Actualiza el recurso personalizado
Servercon la URL de la imagen del SO más reciente:kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG patch server SERVER_NAME -n gpc-system --type=json -p='[{"op": "replace", "path": "/spec/image/urlSpec/url", "value" : "'OS_IMAGE_URL'"}]'
OS NodeUpgrade puede quedarse bloqueado en el paso NodeOSInPlaceUpgradePostProcessingCompleted
Versiones: 1.14.3 y 1.14.4
Síntomas:
Durante una actualización de un nodo, NodeUpgradeTask se queda atascado en el paso NodeOSInPlaceUpgradePostProcessingCompleted
con un error de reconciliación con el mensaje failed verifying delta after upgrade y no se puede completar.
Este error indica que el proceso de verificación de la actualización ha detectado discrepancias inesperadas en el paquete del nodo. En concreto, identifica los paquetes que aún están en el estado "need-upgrade" o que aparecen como paquetes "only-in-new" después del intento de actualización.
En el mensaje de error se indican los paquetes específicos que no han superado la verificación. Fragmento de ejemplo:
{"ts":1748758118826.9954,"caller":"controller/controller.go:329","msg":"Reconciler error","controller":"NodeUpgradeTask","controllerGroup":"upgrade.private.gdc.goog","controllerKind":"NodeUpgradeTask","NodeUpgradeTask":{"name":"lancer-org1-data-plane-pool-o2-standard1-96-gdc-metal-nmw2h-zx-ac-bm15","namespace":"lancer-org1"},"namespace":"lancer-org1","name":"lancer-org1-data-plane-pool-o2-standard1-96-gdc-metal-nmw2h-zx-ac-bm15","reconcileID":"26585774-7059-46b7-a0f7-0e627b2a2bb5","err":"failed verifying delta after upgrade: 2 errors occurred:\n\t* failed to make \"need-upgrade\" empty, found\n - bind-export-libs\n from: 9.11.36-16.el8_6.86ciq_lts.2\n to: 9.11.36-16.el8_6.86ciq_lts.4\n...\n- strongswan-sqlite\n from: 5.9.10-1.el8_6.ciqlts\n to: 5.9.10-2.el8\n\t* failed to make \"only-in-new\" empty, found lsof=4.93.2-1.el8\nstrace=5.13-4.el8\n\n"}
Este síntoma puede deberse a dos problemas. Primero, detecta cuál es el problema:
Cause-A: no se puede acceder a la máquina, por lo queOSArtifactSnapShotno está actualizado.Comprueba si el nodo que se está actualizando sigue funcionando correctamente o no, y si el trabajo
OSArtifactSnapShotcorrespondiente está fallando.Si
OSArtifactSnapShotestá obsoleto y no se puede acceder a la máquina durante más de 20 minutos, ve al pasoMitigation-A. De lo contrario, sigue comprobando si hayCause-B.Cause-B: error de actualización silenciosa de RPMEn casos excepcionales, la actualización de RPM en una máquina podría fallar de forma silenciosa después de una actualización parcial. Debería haber dos
ConfigMaps que contengan la diferencia del paquete antes y después de la actualización:in-place-delta-<CLUSTER_NAME>-<NODE_NAME>-before-upgrade in-place-delta-<CLUSTER_NAME>-<NODE_NAME>-after-upgradeSi la configuración "after-upgrade" contiene menos paquetes que la configuración "before-upgrade", significa que la actualización se ha cancelado de forma silenciosa y no se han actualizado todos los paquetes. Ve a
Mitigation-B.
Solución:
Mitigation-A: reparar una máquina a la que no se puede acceder
Intenta reparar la máquina reiniciándola. Si la máquina sigue sin estar disponible después de intentar reiniciarla, ponte en contacto con el equipo de SERV para obtener más ayuda.
Cuando la máquina vuelva a estar accesible, elimina el OSArtifactSnapShot para forzar la conciliación. Una vez que se haya conciliado OSArtifactSnapShot, NodeUpgradeTask debe pasar al siguiente paso.
Mitigation-B: vuelve a intentar la NodeUpgradeTask.
Conéctate por SSH a la máquina que se va a actualizar y recoge los siguientes registros para solucionar problemas en el futuro. Debes recoger los siguientes archivos:
- /var/log/dnf.log
- /var/log/dnf.rpm.log
- dnf history > dnf_history.log
- rpm -qa --last > rpm_last.log
Elimina el
NodeUpgradeTaskque no funciona. Esto activará un nuevo intento deNodeUpgradeTasken el nodo concreto. El nuevoNodeUpgradeTaskdebería completar la actualización de RPM y pasar al siguiente paso.
OS NodeUpgrade puede quedarse bloqueado en el paso de creación del servidor de paquetes
Versiones: 1.14.3 y 1.14.4
Síntomas:
Cuando se crea una NodeUpgrade CR, se activa y permanece en in-progress durante más de 30 minutos, es posible que falle de forma silenciosa en la fase de creación del servidor de paquetes. El síntoma es que NodeUpgrade se queda en .status.upgradeStatus=in-progress, pero no se carga .status.tasks:
status:
duration: 0s
upgradeStatus: in-progress
Para confirmar que se produce un error al crear el servidor de paquetes, lee el registro del controlador de actualización del SO:
kubectl logs deployment/os-upgrade-controller -n os-system --kubeconfig=/path/to/admin-cluster-kubeconfig-of-the-nodeupgrade-object
Si el registro del controlador muestra failed to create package server y failed to create package repo server DNS registration con un motivo detallado (cualquiera de los siguientes)
spec.fqdnPrefix already used in an existing DNS registrationname already used in an existing DNS.
A continuación, sugiere que algunos recursos de servidor de paquetes que usan otros NodeUpgrade siguen activos y entran en conflicto con el recurso que se va a crear para el NodeUpgrade colgado actual.
Solución:
Para confirmarlo, puedes consultar el recurso del servidor de paquetes real (de una API concreta, como dnsregistration.network.private.gdc.goog en el servidor de la API de gestión del clúster que gestiona el CR NodeUpgrade) y buscar el NodeUpgrade propietario de esos recursos. Si el NodeUpgrade propietario del DNSRegistration ya ha terminado, pero el recurso DNSRegistration aún no se ha eliminado, puedes eliminar el objeto DNSRegistration si todos sus objetos NodeUpgrade de referencia han terminado.
Lista todos los
DNSRegistrationCRs del servidor de paquetesNodeUpgrade:kubectl get dnsregistration.network.private.gdc.goog -n $NAMESPACE $NAME $ -ojson --kubeconfig=/path/to/mgmt-api-server-kubeconfig-of-the-nodeupgrade-object | grep nu-bmConsulta la
NodeUpgradeCR del propietario de unDNSRegistrationconcreto:kubectl get dnsregistration.network.private.gdc.goog -n $NAMESPACE $NAME $ -ojson --kubeconfig=/path/to/mgmt-api-server-kubeconfig-of-the-nodeupgrade-object | jq -r '.metadata.annotations."package-server-owners"'
Las actualizaciones del SO de los nodos pueden dar problemas y detenerse en cualquier fase del proceso.
Versiones: 1.14.4, 1.14.5 y 1.14.6
Síntomas:
NodeUpgradeTask CR sigue por debajo de in-progress durante más de 2 horas, aunque es posible que se complete automáticamente si se le da suficiente tiempo.
La solicitud de cambio NodeUpgradeTask lleva más de dos horas en curso. Aunque puede que se complete automáticamente, el problema subyacente es que el reconciliador de políticas del SO no puede gestionar de forma eficiente un gran volumen de CRs de OSPolicy. Este problema se produce durante el paso NodeOSInPlaceUpgradeCompleted.
Para confirmar este error durante la creación del servidor de paquetes, consulta el registro del controlador de actualización del SO.
kubectl logs deployment/os-upgrade-controller -n os-system --kubeconfig=/path/to/admin-cluster-kubeconfig-of-the-nodeupgrade-object
Si el registro del controlador no tiene una entrada OSPolicy de NodeUpgradeTask, significa que el controlador está sobrecargado.
Solución:
Pausa todos los OSPolicy CRs no esenciales durante el proceso de actualización.
"storage cp" de un archivo grande provoca un error en org-mgmt kube-api
Versiones: 1.14.3 y posteriores
Síntomas: Durante una operación de gdcloud storage cp o de gdcloud system container-registry load-oci desde una estación de trabajo de OIC, existe una pequeña probabilidad de que se pierda el acceso a org-infra y, a continuación, se produzca un fallo en org-mgmt's kube-api. Se trata de un problema poco habitual, por lo que es útil recoger datos para el equipo de ingeniería.
Solución alternativa: cuando se produzca este problema, prueba a seguir estos pasos:
- En cada nodo del plano de control, ejecuta
uptimepara ver si los nodos se han reiniciado en las últimas 24 horas. - Anota la hora del reinicio.
- Comprueba si se ha producido un pánico del kernel en cada nodo de CP justo antes del reinicio ejecutando
dmesg | grep -i 'kernel panic'. - En cada nodo de CP, comprueba si hay instaladas tarjetas NIC Mellanox con el comando
lspci | grep -i eth | grep -i mellanox. Si no hay NICs Mellanox, deja de leer este problema conocido. En cada nodo de CP, comprueba estos ajustes de red en
data0:[root@cp-node-01 ~]# ethtool -k data0 | grep -E 'generic-receive-offload|large-receive-offload|rx-checksumming|rx-gro-hw' rx-checksumming: off generic-receive-offload: on large-receive-offload: off rx-gro-hw: on # <--- Check this valueSi
rx-gro-hw(consulta la información anterior) está configurado como "off" en todos los nodos, deja de leer este problema conocido.Recoge información para que Google pueda diagnosticar el problema:
k8s.org get po -n anthos-identity-service -l k8s-app=ais k8s.org get po -n management-kube-system k8s.org get po -n kube-system -l component=kube-apiserver k8s.org get nodes -l node-role.kubernetes.io/control-planeEn cada nodo de CP, ejecuta los siguientes comandos:
dmesg | grep -i 'kernel panic' journalctl -u disable-rx-gro-hw.service systemctl status disable-rx-gro-hw modinfo mlx5_core | grep ^version:Para mitigar el problema de configuración de red,
rx-gro-hwdebe estaroff. Para ello, ejecuta los siguientes comandos en todos los nodos de CP:ethtool -K data0 rx off gro off lro off ethtool -K data1 rx off gro off lro off ethtool -K bond00 rx off gro off lro offVuelve a comprobar los ajustes:
[root@cp-node-01 ~]# ethtool -k data0 | grep -E 'generic-receive-offload|large-receive-offload|rx-checksumming|rx-gro-hw' rx-checksumming: off generic-receive-offload: on large-receive-offload: off rx-gro-hw: off # <--- Check this, should be "off"Vuelve a intentar la operación original, como
gdcloud storage cpogdcloud system container-registry load-oci. Si sigue fallando, ponte en contacto con el equipo de Ingeniería.
Servicios principales de infraestructura de Operations Suite (OIC)
Rendimiento deficiente de Jumphost
Versiones: todas las versiones de Google Distributed Cloud (GDC) con air gap pueden verse afectadas.
Síntomas: las operaciones del navegador o del sistema tardan demasiado en completarse.
Solución:
Aumenta el número de vCPUs en los jumphosts a través del administrador de Hyper-V en BM03 y BM04:
- Selecciona una VM de Jumphost y, a continuación, haz clic en Configuración en el panel de acciones.
- Selecciona Procesador y, a continuación, aumenta el número de Número de procesadores virtuales a 4 o más, en función de la carga de trabajo.
- Repite el proceso con el resto de los Jumphosts.
Administrador de recursos
No se pueden eliminar proyectos en la consola de GDC
Versiones: 1.14.3 y 1.14.4
Síntomas: La consola de GDC proporciona el botón Eliminar Eliminar para los proyectos que ya existen en la página Detalles del proyecto, pero el botón no funciona.
Solución: Para eliminar un proyecto, debes usar la CLI de gdcloud. Para obtener más información, consulta Eliminar un proyecto.
Faltan guías de Ansible de la organización
Versiones: 1.14.3
Síntomas: al crear una organización, el trabajo create-ansible-playbooks
que crea los libros de jugadas de Ansible obligatorios falla de forma silenciosa. La falta de libros de jugadas de Ansible provoca problemas como la ausencia de máquinas virtuales perimetrales y problemas al crear una organización global.
Solución alternativa: Sigue el manual de procedimientos OS-R0009 para crear manualmente los playbooks de Ansible de la organización que faltan.
Una organización global asimétrica muestra configuraciones zonales que no existen
Versiones: 1.14.4
Síntomas: Al crear una organización global de la versión 1 con solo un subconjunto de configuraciones de organización zonales, todas las zonas siguen mostrando un estado de réplica de la organización. Por ejemplo, si tienes un universo de GDC con tres zonas, pero solo creas una configuración de organización zonal para dos zonas, la tercera zona seguirá mostrando un estado de réplica erróneo para la tercera organización zonal inexistente.
Para confirmar el estado erróneo, imprime el estado de la organización global:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get organization \
ORG_NAME -n gpc-system -o yaml
La salida de YAML tiene un aspecto similar al siguiente:
...
- name: zone3
replicaStatus:
systemInfo:
cidrInfo: {}
rolloutStatus:
conditions:
- lastTransitionTime: "2025-03-12T02:09:21Z"
message: ""
observedGeneration: 1
reason: Current
status: "True"
type: Synced
- lastTransitionTime: "2025-03-12T02:09:22Z"
message: rollout succeeded
observedGeneration: 1
reason: RolloutSucceeded
status: "True"
type: Replicated
...
Ten en cuenta que esto solo ocurre en las organizaciones de la versión 1, ya que las configuraciones zonales asimétricas no se admiten en las organizaciones de la versión 2.
Solución: Puedes ignorar el estado de réplica erróneo, ya que la organización zonal no existe a menos que la hayas creado específicamente.
Clúster
No se elimina el grupo de nodos de trabajador del clúster de infraestructura
Versiones: 1.14.3 y 1.14.4
Síntomas: al eliminar un grupo de nodos de trabajo de la especificación de CR de Organization, el grupo de nodos no se elimina automáticamente, es decir, el comando kubectl get nodepool data-plane-pool-{machine-class} -n {org-name} sigue mostrando el grupo de nodos que se va a eliminar.
# Organization CR example
apiVersion: resourcemanager.private.gdc.goog/v1alpha1
kind: Organization
...
spec:
resourceCapacities:
workloadServers:
o2-standard1-96-gdc-metal: 4 # worker node pool to remove
...
Solución alternativa: Después de quitar el grupo de nodos de trabajo de la especificación de Organization CR, elimina manualmente el NodePoolClaim CR de este grupo de nodos del clúster de administrador raíz ejecutando el siguiente comando:
sh
kubectl delete nodepoolclaim data-plane-pool-{machine-class} -n {org-name}
Espera hasta que se elimine por completo el NodePoolClaim y sus NodePool CRs asociados, es decir, hasta que el comando kubectl get nodepool data-plane-pool-{machine-class} -n {org-name} deje de mostrar el grupo de nodos de trabajador.
Almacenamiento
No se pueden eliminar los contenedores creados con el comando gdcloud config set zone
Versiones: 1.14.7 y posteriores
Síntomas: Los segmentos creados con el comando gdcloud config set zone no se pueden eliminar debido a problemas con los permisos, ya que el comando intenta operar en la zona incorrecta.
Solución: Usa la consola para definir la zona específica de un segmento o sustituye la marca --zone por --location en el comando gcloud.
Alertas de objetivos de nivel de servicio activadas
Versiones: 1.14.3 y 1.14.4
Síntomas: Se activan alertas de objetivo de nivel de servicio de OBJ debido a un error ErrFailedStreamingDecryptRequest en el proxy de OBJ: obj-list-object-ops-availability-slo y obj-rw-object-ops-error-rate-slo.
Solución: silencia la alerta. El error se identifica incorrectamente como un error del sistema cuando lo provoca el usuario al finalizar la conexión, lo que no se tiene en cuenta en el SLO.
S3 UploadPart Empty ETag
Versiones: 1.14.3
Síntomas: después de enviar una solicitud UploadPart, obtienes un código de estado 200 Success en el mensaje de respuesta, pero el campo ETag está vacío. Este error se produce porque se produce un InternalServerError debido a una interrupción de la red y el código de estado no se actualiza a 500 InternalServerError.
Solución alternativa: vuelve a enviar la solicitud como si hubiera fallado anteriormente.
Los pods no se montan debido a un error de Trident mkfs.ext4
Versiones: 1.14.3
Síntomas: Después de intentar montar pods, observa que todos los pods que están pasando a un nodo concreto o que vienen de él fallan. Aparece un mensaje de error de RPC: DeadlineExceeded desc = context deadline exceeded, que indica que el nodo está bloqueado. Cuando se produce este mensaje, no puedes realizar operaciones adicionales de Trident en el nodo en cuestión. Los volúmenes que sirven datos no se verán afectados, pero los volúmenes que se muevan hacia y desde el nodo podrían sufrir una interrupción.
Solución:
Inspecciona los registros de Trident en el nodo que el pod está intentando montar y comprueba que la cola aumenta. Los registros pueden tener un aspecto similar al siguiente:
2025-01-24T00:27:22.783599667Z time="2025-01-24T00:27:22Z" level=debug msg="Attempting to acquire shared lock (NodeUnstageVolume-pvc-0f04a9c5-00fc-4c3c-9fc1-6730598f7caa); 421 position in the queue." lock=csi_node_server logLayer=csi_frontend requestID=94c8ad12-6479-4e1c-8791-118b565d6c6b requestSource=CSI workflow="node_server=unstage"Inicia sesión en el nodo y consulta el resultado de
dmesg. Los registros pueden tener un aspecto similar al siguiente:Jan 31 02:43:47 ap-ae-bm18 kernel: blk_cloned_rq_check_limits: over max size limit. (524280 > 128) Jan 31 02:43:47 ap-ae-bm18 kernel: blk_cloned_rq_check_limits: over max size limit. (524280 > 128) Jan 31 02:43:47 ap-ae-bm18 kernel: device-mapper: multipath: 253:40: Failing path 65:144. Jan 31 02:43:47 ap-ae-bm18 kernel: blk_cloned_rq_check_limits: over max size limit. (524280 > 128) Jan 31 02:43:47 ap-ae-bm18 kernel: device-mapper: multipath: 253:40: Failing path 65:160. Jan 31 02:43:47 ap-ae-bm18 kernel: blk_cloned_rq_check_limits: over max size limit. (524280 > 128)Después de confirmar que se produce un error de Trident
mkfs.ext4, reinicia el nodo.
Trident no puede crear un volumen debido a un error que ya existe
Versiones: 1.14.3
Síntomas:
No se aprovisiona un PVC y se muestra un evento como el siguiente:
failed to create cloned volume {pvc-bab6bc52-fd37-4ead-a57b-e833e14c172a} on backend iscsi-san: volume trident_pvc_bab6bc52_fd37_4ead_a57b_e833e14c172a already exists
Cuando se produce este evento, el PVC no se aprovisiona hasta que realizas la solución alternativa.
Solución:
Para solucionar el problema, sigue estos pasos:
- Anota el nombre del volumen interno del evento. Por ejemplo, el evento de muestra que se muestra en la sección Síntomas muestra el nombre del volumen interno
trident_pvc_bab6bc52_fd37_4ead_a57b_e833e14c172a. - Sigue el manual de operaciones FILE-R0105 para acceder a ONTAP.
Eliminar el volumen:
volume delete trident_pvc_bab6bc52_fd37_4ead_a57b_e833e14c172a
file_block_iscsi_sessions_unhealthy alert informa de un falso positivo
Versiones: 1.14.3
Síntomas: en algunos entornos, se activa la alerta file_block_iscsi_sessions_unhealthy, que indica que uno o varios nodos están experimentando errores de iSCSI. El controlador file-observability usa un recopilador de métricas personalizadas para monitorizar el estado de las sesiones iSCSI en cada nodo de Kubernetes, pero, en algunos casos, el recopilador de métricas no puede analizar la salida del comando iscsiadm e informa de que no hay sesiones iSCSI en ejecución aunque iSCSI tenga sesiones correctas.
Solución:
Sigue estos pasos para verificar que iSCSI no tiene problemas y silenciar la alerta si se trata de un falso positivo:
En la página de exploración de Grafana, ejecuta la consulta
fb_sessions_running_count{job="file-observability-backend-target.file-system"}. La consulta devuelve una métrica por cada nodo del clúster. Si algún nodo informa de una métricafb_sessions_running_countde0, anota el nombre del nodo.En cada nodo con métricas
fb_sessions_running_countque devuelvan0, ejecuta los siguientes comandos:Establece una conexión SSH con el nodo afectado.
Ejecuta el comando
iscsiadm -m session. Debes ver varias líneas devueltas. Cada línea es una sesión iSCSI en ejecución. Si el comando no devuelve nada o hay errores en el resultado, deriva el problema al equipo de ingeniería de bloqueo de archivos.Si el comando anterior ha devuelto sesiones iSCSI correctamente, significa que has confirmado que la alerta de este nodo es un falso positivo.
Cuando confirmes que todos los nodos afectados tienen sesiones iSCSI correctas y que están provocando que la alerta se active por error, crea un silencio en AlertManager para silenciar la alerta
file_block_iscsi_sessions_unhealthy.
Se activa una alerta file_block_storage_disk_failure para los discos de repuesto
Versiones: 1.14.3
Síntomas: En algunos entornos, se activa la alerta file_block_storage_disk_failure, que indica que uno o varios discos de ONTAP no están en buen estado. El controlador file-observability usa un recopilador de métricas personalizadas para monitorizar el estado de cada disco de ONTAP, pero en versiones anteriores de GDC, el recopilador no considera que un disco de repuesto esté en buen estado y activará una alerta para el disco de repuesto.
Solución:
Sigue estos pasos para verificar que los discos son de repuesto y silenciar la alerta del disco:
En la página de exploración de Grafana, ejecuta la consulta
disks_labels_healthy{job="file-observability-backend-target.file-system"}. La consulta devolverá una métrica por cada disco de ONTAP. Si algún disco indica una métrica de 0 (no está en buen estado), anota el nombre del disco.En cada disco con métricas
disks_labels_healthyque devuelvan0, ejecuta los siguientes comandos:Conéctate al clúster de ONTAP mediante SSH y ejecuta el comando
disk show -disk <disk-name> -fields statecon el nombre del disco recogido de la consulta de métricas.Verifica que la salida del comando indica que el estado del disco es
presentospare. Si el disco está en cualquier otro estado que no seapresentospare, deriva el problema al equipo de ingeniería de bloqueo de archivos.Si el disco en cuestión indica
presentospare, podemos confirmar que la alerta no debería activarse para este disco. Crea un silencio en AlertManager para silenciar la alertafile_block_storage_disk_failurecon la etiquetadisk_namedefinida con el nombre del disco.
Una vez que se hayan creado los silencios para todos los discos de repuesto, ve a Grafana para verificar que las alertas han dejado de activarse.
La alerta file_block_storage_node_peer_connection_unhealthy se activa después de que se restaure la conexión
Versiones: 1.14.3
Síntomas: en algunos entornos, se activa la alerta file_block_storage_node_peer_connection_unhealthy, que indica que se produce un error en una o varias conexiones entre los nodos de ONTAP. El controlador file-observability usa un recopilador de métricas personalizadas para monitorizar el estado de estas conexiones. Hay un problema conocido por el que esta alerta seguirá activándose incluso después de que se haya restablecido la conexión fallida.
Solución:
Sigue estos pasos para verificar que las conexiones entre los nodos son correctas y silenciar la alerta de los nodos:
En la página de exploración de Grafana, ejecuta la consulta
storage_node_peer_connections{job="file-observability-backend-target.file-system"}. La consulta devuelve una métrica por cada conexión entre los nodos de almacenamiento del clúster. Si alguna conexión registra una métricastorage_node_peer_connectionsde0, anota las etiquetassource_node,destination_ipystorage_cluster_namede la métrica.En cada métrica
storage_node_peer_connectionsque devuelva0, ejecuta los siguientes comandos:Establece una conexión SSH con el clúster de almacenamiento de ONTAP desde la etiqueta
storage_cluster_name.Ejecuta el siguiente comando en el clúster de ONTAP con los valores de las etiquetas
source_nodeydestination_ip:
ping -node <node-name> -destination <destination-ip> -verbose -show-detailSi el comando ping falla, deriva el problema al equipo de Ingeniería de bloqueo de archivos. Si el comando ping se ejecuta correctamente, significa que las conexiones de los nodos funcionan correctamente y que la alerta se activa por error.
- Crea un silencio en AlertManager para silenciar la alerta
file_block_storage_node_peer_connection_unhealthycon las etiquetassource_nodeydestination_ipdefinidas en el nodo de origen y la IP de destino de la métrica.
Una vez que se hayan creado los silencios para todos los nodos correctos, ve a Grafana para verificar que las alertas han dejado de activarse.
La alerta file_block_nodes_not_reachable se activa después de que se restaure la conexión
Versiones: 1.14.3
Síntomas: en algunos entornos, se activa la alerta file_block_nodes_not_reachable, que indica que se están produciendo errores en una o varias conexiones de los servicios IPsec en los nodos de Kubernetes a ONTAP. El controlador file-observability usa un recopilador de métricas personalizadas para monitorizar el estado de estas conexiones. Hay un problema conocido por el que esta alerta seguirá activándose incluso después de que se haya restablecido la conexión fallida.
Solución:
Sigue estos pasos para verificar que las conexiones de los nodos funcionan correctamente y silenciar la alerta de los nodos:
En la página de exploración de Grafana, ejecuta la consulta
fb_all_nodes_reachable{job="file-observability-backend-target.file-system"}. La consulta devuelve una métrica por cada nodo del clúster. Si algún nodo informa de una métricafb_all_nodes_reachablede0, anota el nombre del nodo.En cada nodo con métricas
fb_all_nodes_reachableque devuelvan0, ejecuta los siguientes comandos:Establece una conexión SSH con el nodo afectado.
Ejecuta el siguiente comando:
journalctl -u strongswan | grep "sending packet" | sed "s/\[/ /g" | sed "s/\]/ /g" | awk '{ print $14 }' | sort -n | uniq | awk '{print "ping -c 5 " $1}' | shEl comando intentará hacer ping a ONTAP mediante todas las conexiones IPsec. Si falla algún ping del comando, deriva el problema al equipo de ingeniería de bloqueo de archivos. Si los comandos ping se ejecutan correctamente, se confirma que las conexiones de los nodos funcionan correctamente y que la alerta se activa por error.
Si todos los pings del comando se realizan correctamente, significa que las conexiones del nodo están en buen estado y que la alerta se activa de forma errónea. Crea un silencio en AlertManager para silenciar la alerta
file_block_nodes_not_reachablecon la etiquetanode_namedefinida con el nombre del nodo.
Una vez que se hayan creado los silencios para todos los nodos correctos, ve a Grafana para verificar que las alertas han dejado de activarse.
file_block_storage_high_node_total_latency se activa una alerta durante cargas de trabajo pesadas
Versiones: 1.14.3
Síntomas: La alerta file_block_storage_high_node_total_latency puede activarse en determinados entornos debido a cargas de trabajo pesadas en los nodos de almacenamiento. Esta alerta se mantiene hasta que se procesen por completo estas cargas de trabajo. Aunque el rendimiento de lectura y escritura en los volúmenes sea rápido, los nodos de almacenamiento pueden seguir notificando una latencia alta en operaciones de bloques específicas.
Solución:
Para verificar las latencias de volumen correctas y silenciar la alerta de latencia del nodo de almacenamiento, sigue estos pasos:
Comprueba las alertas de latencia de volumen:
- En Grafana, comprueba que las alertas
file_block_storage_high_volume_write_latencyyfile_block_storage_high_volume_read_latencyno se activen y que indiquen tiempos de latencia óptimos para los volúmenes.
- En Grafana, comprueba que las alertas
Deriva el caso si la latencia del volumen es alta:
- Si se activan las alertas de escritura o lectura de volumen, significa que hay una latencia alta en todo el sistema de almacenamiento. Deriva este problema al equipo de ingeniería de bloqueo de archivos.
Silenciar la alerta de latencia de nodos (si los volúmenes están en buen estado):
Si las alertas de escritura y lectura de volumen están en buen estado, es probable que la alerta de latencia de nodo sea un falso positivo.
Crea un silencio en AlertManager para la alerta
file_block_storage_high_node_total_latency.Después de crear el silencio, ve a Grafana para confirmar que la alerta ha dejado de activarse.
Actualización de nodo bloqueada
Versiones: 1.14.3, 1.14.4, 1.14.5, 1.14.6 y 1.14.7
Síntomas: este bloqueo se produce cuando un LUN (número de unidad lógica) pasa a ser de solo lectura, a menudo debido a problemas con las copias de seguridad. Cuando esto ocurre, el nodo se acordonará para mover el pod afectado a otro nodo. Como el proceso de actualización de nodos incluye una comprobación previa para asegurarse de que los nodos no estén aislados, este estado impide que se lleve a cabo la actualización.
Solución: Inhabilita manualmente el subcomponente file-read-only-lun-cleanup
antes de iniciar el proceso de actualización:
Identifica cada organización afectada.
Aplica un
SubcomponentOverridea cada organización del entorno.apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: file-read-only-lun-cleanup namespace: ORG_NAMESPACE spec: subComponentRef: "file-read-only-lun-cleanup" disable: trueComprueba que ninguno de los nodos de las organizaciones afectadas esté acordonado:
Lista los nodos de la organización:
kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get nodesEl resultado debería ser similar al siguiente:
NAME STATUS ROLES AGE VERSION admin-node0-zone1 Ready,SchedulingDisabled control-plane 14h v1.30.8-gke.200 admin-node1-zone1 Ready control-plane 14h v1.30.8-gke.200 admin-node2-zone1 Ready control-plane 14h v1.30.8-gke.200Anota los nombres de los nodos que tengan el estado
SchedulingDisabled. En este ejemplo, el nodo acordonado esadmin-node0-zone1.Desactiva el aislamiento de los nodos que hayan devuelto el estado
SchedulingDisableden el paso anterior:kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG uncordon NODE_NAMEComprueba que todos los nodos estén listos:
kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get nodesEl resultado debería ser similar al siguiente:
NAME STATUS ROLES AGE VERSION admin-node0-zone1 Ready control-plane 14h v1.30.8-gke.200 admin-node1-zone1 Ready control-plane 14h v1.30.8-gke.200 admin-node2-zone1 Ready control-plane 14h v1.30.8-gke.200
La alerta file_block_zombie_luns_present se activa después de que se resuelvan los errores de multipath
Versiones: 1.14.3 y posteriores
Síntomas: La alerta file_block_zombie_luns_present puede activarse en determinados entornos porque el controlador file-observability no puede analizar la salida del comando multipath -ll. Esta situación provoca que se active constantemente la alerta de LUNs zombi, aunque el servicio de multiruta funcione correctamente en todos los nodos.
Solución:
Para verificar que los servicios de multipath funcionan correctamente en los nodos en cuestión, sigue estos pasos:
En la página de exploración de Grafana, ejecuta la consulta
zombie_lun_exists{job="file-observability-backend-target.file-system"}. La consulta devuelve una métrica por cada nodo del clúster. Si algún nodo informa de una métricazombie_lun_existsde1, anota el nombre del nodo.En cada nodo con métricas
zombie_lun_existsque devuelvan1, ejecuta los siguientes comandos:Establece una conexión SSH con el nodo afectado.
Ejecuta el siguiente comando:
multipath -llEl comando devuelve información sobre todos los dispositivos de bloque gestionados por el servicio multipath. Comprueba que ninguno de los dispositivos de bloque contenga la cadena
failed undef unknowno la cadenafailed faulty runningen sus estados.Si algún dispositivo tiene el estado
failed faulty running, sigue el runbook FILE-R0020 para resolver los LUNs zombi.Si algún dispositivo tiene el estado
failed undef unknown, sigue el runbook FILE-R0021 para resolver los LUNs superzombies.
Silencia las alertas de LUN zombi si los nodos están en buen estado:
Si no se encuentran dispositivos de bloque no válidos en ninguno de los nodos, la alerta de LUN zombi es un falso positivo.
Crea un silencio en AlertManager para la alerta
file_block_zombie_luns_present.Después de crear el silencio, ve a ServiceNow para confirmar que la alerta ha dejado de activarse.
No se puede eliminar un segmento vacío desde la consola
Versiones: 1.14.4 y posteriores
Síntomas: en la consola de GDC, no puedes eliminar un contenedor vacío. El segmento puede tener marcadores de eliminación y otras versiones de objetos cuando la gestión de versiones de objetos está habilitada con políticas de retención. Puede que veas un error como este:
can't delete bucket containing empty objects: Delete the bucket inside to delete
the object
Solución alternativa: Usa el comando gdcloud storage rm -a para eliminar objetos, incluidos los marcadores de eliminación, para que se pueda eliminar el segmento.
Artifact Registry del sistema
Las tareas de replicación de Harbor se bloquean
Versiones: 1.14.3
Síntomas: los trabajos de replicación de artefactos de Harbor se bloquean. Este problema impide la distribución de artefactos a la organización y detiene la creación de organizaciones.
Solución alternativa: para mitigar este problema, siga los pasos que se indican en el runbook SAR-R1010.
El estado de error transitorio no se borra al reconciliar el recurso personalizado de la cuenta de robot de Harbor
Versiones: 1.14.3
Síntomas: se activa erróneamente una alerta CustomResourceErrorStatusAlert con las etiquetas kind=HarborRobotAccount y code=SAR2002. Por ejemplo, la alerta falsa tiene el campo message definido como "Error getting robot: failed to list robots: 503 Service Unavailable".
Solución alternativa: pide al operador de infraestructura que verifique si la alerta es un problema real o una falsa alarma y que la silencie si es una falsa alarma, siguiendo las instrucciones que se indican a continuación.
Cuando se active una alerta, sigue el manual de operaciones SAR-E2002 para identificar y solucionar la causa subyacente de la alerta.
Debido a este problema conocido, aunque el runbook resuelva correctamente la causa subyacente, la alerta podría seguir activándose erróneamente. Sigue comprobando el estado de error del objeto de recurso personalizado (CR) HarborRobotAccount (HRD) de destino del que se está enviando la alerta:
Define las variables de entorno necesarias:
export KUBECONFIG=KUBECONFIG export HRD_NAME=HRD_NAME export HRD_NAMESPACE=HRD_NAMESPACEHaz los cambios siguientes:
KUBECONFIG: la ruta al archivo kubeconfig.HRD_NAME: el nombre de la CR de destinoHarborRobotAccount.HRD_NAMESPACE: el espacio de nombres que contiene el CRHarborRobotAccountde destino.
Comprueba el estado del error del
HarborRobotAccountCR de destino:kubectl get harborrobotaccount ${HRD_NAME?} -n ${HRD_NAMESPACE?} -ojsonpath='{.status.errorStatus} {"\n"}'
Si el valor de lastUpdateTime indica que el campo errorStatus se actualizó por última vez hace más de 30 minutos, la alerta es falsa. Para mitigar la falsa alarma, silencia la alerta en la instancia con air gap de GDC siguiendo el runbook MON-R2009.
Falsa alarma de alerta SAR-R0003
Versiones: 1.14.3 y posteriores
Síntomas: se activa una alerta con el código SAR-R0003, OC SAR y gravedad critical de forma errónea.
Solución: sigue el runbook MON-R2009 para silenciar la alerta.
Sistema de incidencias
El servidor MID de ServiceNow no se inicia correctamente
Versiones: 1.14.3
Corregido: 1.14.4
Síntomas: El MID Server de ServiceNow, que se integra con Splunk, no se registra en ServiceNow al iniciarse debido a una incompatibilidad de versiones.
Solución:
- Pausa el
ts-mid-serversubcomponente.
KUBECONFIG=ROOT_ADMIN_KUBECONFIG kubectl annotate subcomponent ts-mid-server -n gdchservices lcm.private.gdc.goog/paused=true
- Anula la cadena de versión del servidor MID.
KUBECONFIG=GDCHSERVICES_ADMIN_KUBECONFIG kubectl set env statefulset/midserver-set -n support MID_CONFIG_mid__pinned__version=washingtondc-12-20-2023__patch5-06-21_06-26-2024_1335
Actualizar
La anotación del clúster de servicios compartidos no se actualiza después de una actualización correcta del clúster
Versiones: 1.14.4
Síntomas: los CRs de los clústeres de perímetro y de servicios compartidos de clusters.baremetal.cluster.gke.io reflejan la versión correcta de GKE después de la actualización. Los CRs de clusters.cluster.gdc.goog siguen mostrando la versión anterior de GKE.
Solución alternativa: Actualiza la anotación upgrade.gdc.goog/version en clusters.baremetal.cluster.gke.io al nuevo nombre UserClusterMetadata correspondiente a la versión de GKE actualizada.
La actualización de nodos del administrador de la organización se queda atascada
Versiones: 1.14.6
Corregido: 1.14.7
Síntomas: el proceso de actualización de nodos del plano de control de administrador de la organización gdchservices se ha bloqueado. La actualización del nodo falla porque no se puede establecer una conexión SSH con el nodo, lo que provoca un error Connection timed out.
La actualización del complemento se queda atascada
Versiones: 1.14.6
Corregido: 1.14.7
Síntomas: La actualización del complemento del clúster de administrador raíz se bloquea durante la actualización de cualquier versión anterior a la 1.14.6. Un mensaje de estado puede indicar que la actualización ha superado el límite de tiempo previsto:
message: 'UPG1401: addon upgrade expected to finish within 2h0m0s but hasn''t
after 8h8m24.00395866s, last message was: Addon upgrade for root-admin cluster
in progress'
Solución: Actualiza manualmente el spec.addOnSetTemplateRef del recurso addonset root-admin para que apunte a la plantilla correcta de la nueva versión.
Fallo al generar un informe de asistencia
Versiones: 1.14.3, 1.14.4, 1.14.5 y 1.14.6
Corregido: 1.14.7
Síntomas: el comando gdcloud resource-support get-report falla cuando se ejecuta en un clúster de usuarios debido a un problema de permisos.
El arranque de la VM puede quedarse bloqueado después de completar la actualización del nodo del SO
Versiones: 1.14.6
Síntomas: durante la actualización de la versión 1.14.3 a la 1.14.6, las máquinas virtuales de los clústeres de perímetro o de servicio compartido no se inician y no se puede acceder a ellas después de actualizar el SO.
Por ejemplo, el siguiente comando puede confirmar el problema:
kubectl --kubeconfig CP_KUBECONFIG logs -n VM_NAMESPACE VIRT_LAUNCHER_POD_NAME -c guest-console-log
El resultado del registro de la consola de la VM muestra un mensaje de pánico del kernel similar al siguiente:
[ 2.005806] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[ 2.008100] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.18.0-553.16.1.el8_6.ciqfips.0.8.1.x86_64 #1
[ 2.011153] Hardware name: KubeVirt None/RHEL, BIOS 1.14.0-2 04/01/2014
[ 2.013401] Call Trace:
[ 2.015365] dump_stack+0x41/0x60
[ 2.016641] panic+0xe7/0x2ac
[ 2.017864] mount_block_root+0x2be/0x2e6
[ 2.019176] ? do_early_param+0x95/0x95
[ 2.020287] prepare_namespace+0x135/0x16b
[ 2.021476] kernel_init_freeable+0x210/0x23a
[ 2.022724] ? rest_init+0xaa/0xaa
[ 2.023721] kernel_init+0xa/0x110
[ 2.024698] ret_from_fork+0x1f/0x40
[ 2.025913] Kernel Offset: 0x33c00000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
[ 2.028706] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---
Solución alternativa: sigue estos pasos para solucionar el problema:
Define las siguientes variables de entorno:
export MP_KUBECONFIG=MANAGEMENT_API_KUBECONFIG export CP_KUBECONFIG=ORG_INFRA_KUBECONFIG export VM_NAMESPACE=VM_NAMESPACE export VM_NAME=FAILED_VM_NAMEDetén la VM que ha fallado:
kubectl --kubeconfig=$MP_KUBECONFIG patch gvm -n $VM_NAMESPACE \ $VM_NAME --type='merge' -p='{"spec": {"runningState": "Stopped"}}'Abre el editor para desvincular el disco de arranque de la VM que ha fallado:
kubectl --kubeconfig $MP_KUBECONFIG edit gvm -n $VM_NAMESPACE $VM_NAMESustituye el disco de arranque por un nombre de marcador de posición en la especificación de la VM:
# Several lines of code are omitted here. spec: disks: - boot: true virtualMachineDiskRef: # This is a random placeholder name you put here. Doesn't need to exist name: VM_DISK_PLACEHOLDER_NAMECrea un secreto de secuencia de comandos de inicio:
cat <<'EOF' > script #!/bin/bash username="newuser" password="Lime+blaze8legend" sudo useradd -m -s /bin/bash "$username" echo "$username:$password" | sudo chpasswd sudo usermod -aG sudo "$username" EOF kubectl --kubeconfig=$MP_KUBECONFIG create secret generic configure-password -n $VM_NAMESPACE --from-file=scriptCrea una VM auxiliar:
Obtén la imagen de VM para el disco de arranque de la VM. La imagen no debe tener la misma familia de SO que el disco de arranque del nodo de la VM con problemas. Por lo tanto, usa
greppara buscar la imagen de Ubuntu:# find the latest ubuntu-20.04 OS version UBUNTU_OS_VERSION=$(kubectl --kubeconfig $MP_KUBECONFIG get vmimage -A --sort-by=.metadata.creationTimestamp | grep ubuntu-20.04 | tail -n 1 | awk '{print $2}')Crea el disco de arranque y la VM. Crea un disco de arranque y una VM con un disco secundario conectado y un script de inicio para acceder a la consola:
kubectl --kubeconfig $MP_KUBECONFIG apply -n $VM_NAMESPACE -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineDisk metadata: name: HELPER_VM_BOOT_DISK_NAME spec: source: image: name: UBUNTU_OS_VERSION namespace: vm-system size: 20Gi --- apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: HELPER_VM_NAME spec: compute: virtualMachineType: n3-standard-2-gdc disks: - virtualMachineDiskRef: name: HELPER_VM_NAME-disk boot: true autoDelete: true - virtualMachineDiskRef: name: PROBLEM_VM_BOOT_DISK autoDelete: false startupScripts: - scriptSecretRef: name: configure-password name: configure-password EOFVerifica que la VM auxiliar se esté ejecutando:
kubectl --kubeconfig $MP_KUBECONFIG get gvm -n ${VM_NAMESPACE} HELPER_VM_NAME
Consola de la VM auxiliar y vuelve a generar el initramfs:
De la consola a la VM auxiliar:
kubectl virt console HELPER_VM_NAME -n ${VM_NAMESPACE} --kubeconfig=$CP_KUBECONFIGUsa las siguientes credenciales:
username="newuser"
password="Lime+blaze8legend"
Monta las particiones del disco conectado:
sudo mkdir /mnt/kernelpanic/ sudo mount /dev/mapper/rocky-rl--root /mnt/kernelpanic/ sudo mount /dev/mapper/rocky-rl--root /mnt/kernelpanic/ sudo mount /dev/sdb2 /mnt/kernelpanic/boot/ sudo mount /dev/sdb1 /mnt/kernelpanic/boot/efi/ sudo mount /dev/rocky/rl-home /mnt/kernelpanic/home/ sudo mount /dev/rocky/rl-var /mnt/kernelpanic/var/ sudo mount /dev/rocky/rl-var_tmp /mnt/kernelpanic/var/tmp/ sudo mount /dev/rocky/rl-var_log /mnt/kernelpanic/var/log/ sudo mount /dev/rocky/rl-var_log_audit /mnt/kernelpanic/var/log/audit/ sudo mount /dev/rocky/rl-tmp /mnt/kernelpanic/tmp/ sudo mount -t sysfs sysfs /mnt/kernelpanic/sys/ sudo mount -t proc procfs /mnt/kernelpanic/proc/ sudo mount -t devtmpfs devtmpfs /mnt/kernelpanic/dev/ sudo mount -t devpts devpts /mnt/kernelpanic/dev/pts/ sudo mount -o bind /dev/pts/ /mnt/kernelpanic/dev/pts/Establece una conexión chroot con el punto de montaje y vuelve a generar el archivo initramfs:
sudo chroot /mnt/kernelpanic/ dracut --regenerate-all --forceVerifica que se haya generado el nuevo initramfs para la nueva versión del kernel:
4.18.0-553.16.1.el8_6.ciqfips.0.8.1.x86_64ls /boot/initramfs-* -lEl resultado es similar al siguiente:
-rw-------. 1 root root 184937778 Feb 5 2025 /boot/initramfs-0-rescue-e4d67258cb64499f98609307ac4a93e8.img -rw-------. 1 root root 119867729 Aug 7 17:35 /boot/initramfs-4.18.0-553.16.1.el8_6.ciqfips.0.6.1.x86_64.img -rw-------. 1 root root 35321114 Aug 7 17:36 /boot/initramfs-4.18.0-553.16.1.el8_6.ciqfips.0.8.1.x86_64.img
Detén la VM auxiliar:
kubectl --kubeconfig=$MP_KUBECONFIG patch gvm -n $VM_NAMESPACE HELPER_VM_NAME --type='merge' -p='{"spec": {"runningState": "Stopped"}}'Desconecta el disco de la máquina virtual auxiliar:
Abre la especificación de la VM auxiliar en un editor:
kubectl --kubeconfig $MP_KUBECONFIG edit gvm -n $VM_NAMESPACE HELPER_VM_NAMEElimina el siguiente código del archivo YAML:
- virtualMachineDiskRef: name: PROBLEM_VM_BOOT_DISK autoDelete: false
Vuelve a conectar el disco de arranque a la VM que ha fallado:
Abre la especificación de la VM que ha fallado en un editor:
kubectl --kubeconfig $MP_KUBECONFIG edit gvm -n $VM_NAMESPACE $VM_NAMEActualiza la especificación de la siguiente manera:
# Several lines of code are omitted here. spec: disks: - boot: true virtualMachineDiskRef: name: PROBLEM_VM_BOOT_DISK
Inicia la VM que falla:
kubectl --kubeconfig=$MP_KUBECONFIG patch gvm -n $VM_NAMESPACE $VM_NAME --type='merge' -p='{"spec": {"runningState": "Running"}}'Verifica que la actualización se haya solucionado:
Comprueba que el recurso personalizado
Nodede esta VM muestraReadyy usa la versión más reciente del kernel4.18.0-553.16.1.el8_6.ciqfips.0.8.1.x86_64:kubectl --kubeconfig=$CP_KUBECONFIG get node NODE_NAME -owideEl resultado debería ser similar al siguiente:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME vm-45b03137 Ready worker 139d v1.30.12-gke.300 10.204.0.7 <none> Rocky Linux 8.6 (Green Obsidian) 4.18.0-553.16.1.el8_6.ciqfips.0.8.1.x86_64 containerd://1.6.38-gke.0Comprueba la versión del kernel después de establecer una conexión SSH con la VM:
uname -aEn el resultado debe aparecer la nueva versión del kernel
4.18.0-553.16.1.el8_6.ciqfips.0.8.1.x86_64.
El ingester sigue sin estar en buen estado y no se olvida automáticamente después de la actualización
Versiones: 1.14.x
Síntomas: el subcomponente log-infra no está en buen estado después de la actualización. Para comprobarlo, ejecuta el siguiente comando:
none
kubectl --kubeconfig ${KUBECONFIG:?} get subcomponent -n ${CLUSTER_NAMESPACE:?} log-infra
Para comprobar el estado de un subcomponente, debes usar el archivo kubeconfig del clúster principal para KUBECONFIG y el espacio de nombres del clúster actual para CLUSTER_NAMESPACE. El comando devolverá el valor de STATUS del subcomponente. Si el estado no es ReconciliationCompleted, significa que el subcomponente no está en buen estado en ese clúster.
Algunos pods de Loki del clúster no están en buen estado. Para enumerar todos los pods de Loki, ejecuta el siguiente comando:
none
kubectl --kubeconfig ${KUBECONFIG:?} get pods -n obs-system | awk 'NR==1 || /loki/'
Este comando muestra todos los pods de Loki, incluidas las columnas STATUS y READY. Se considera que un pod no está en buen estado si su estado no es Running o si algunos de sus contenedores no están listos. La columna READY, con el formato a/b, indica el número de contenedores listos a del total b. Un pod está en buen estado cuando a y b son iguales.
Comprueba los registros de los pods de Loki que no estén en buen estado:
none
kubectl --kubeconfig ${KUBECONFIG:?} logs <pod-name> -n obs-system
Los registros de salida de los pods incorrectos son similares a los siguientes:
level=warn ts=2024-12-21T05:01:42.331048596Z caller=ingester.go:385 component=ingester msg="autoforget have seen 2 unhealthy ingesters out of 3, network may be partitioned, skip forgeting ingesters this round"
level=warn ts=2024-12-21T05:01:45.928939929Z caller=lifecycler.go:291 component=ingester msg="found an existing instance(s) with a problem in the ring, this instance cannot become ready until this problem is resolved. The /ring http endpoint on the distributor (or single binary) provides visibility into the ring." ring=ingester err="instance 10.99.196.153:9095 past heartbeat timeout"
Solución alternativa: Para eliminar un ingester incorrecto del anillo de Loki, consulta el runbook AL-R0031.
Vertex AI
Las solicitudes de traducción pueden generar el código de error RESOURCE_EXHAUSTED
Versiones: 1.14.3
Síntomas: después de enviar una solicitud de traducción, se obtiene el código de error RESOURCE_EXHAUSTED en el mensaje de respuesta. Este error se produce cuando superas un límite de frecuencia del sistema. Se ha agotado un recurso, como una cuota por usuario, el número máximo de consultas por segundo o el espacio de todo el sistema de archivos.
Solución alternativa: pide a tu operador de infraestructura que reinicie los fragmentos del backend del servicio de traducción. Después, vuelve a enviar las solicitudes de traducción con intervalos más largos entre ellas o enviando solicitudes más cortas.
batchTranslateDocument solicita que se devuelva un error 503
Versiones: 1.14.3
Síntomas: después de enviar una solicitud batchTranslateDocument, obtienes el código de error 503 "Batch Document translation is not implemented" en el mensaje de respuesta. Este error se produce porque el método BatchTranslateDocument requiere el servicio Aspose, que solo se implementa cuando el parámetro operable enableRAG se define como true en el clúster.
Solución alternativa: pide a tu operador de infraestructura que defina el parámetro enableRAG operable como true en el clúster de administrador de la organización siguiendo estos pasos:
Crea un recurso personalizado
SubcomponentOverrideen un archivo YAML llamadovai-translation.yamlcon el parámetro operableenableRAGdefinido comotrue:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: "vai-translation" namespace: SHARED_SERVICE_CLUSTER_NAMESPACE spec: subComponentRef: "vai-translation" backend: operableParameters: enableRAG: trueSustituye
SHARED_SERVICE_CLUSTER_NAMESPACEpor el espacio de nombres del clúster de servicios compartidos.Aplica el recurso personalizado
SubcomponentOverrideal clúster de administrador de la organización:kubectl --kubeconfig ORG_MGMT_KUBECONFIG apply -f vai-translation.yamlSustituye
ORG_MGMT_KUBECONFIGpor la ruta al archivo kubeconfig de gestión del clúster de administrador de la organización.
No se pueden inicializar el pod y el servicio frontend de traducción u OCR.
Versiones: 1.11.x, 1.12.x, 1.13.x y 1.14.x
Síntomas: durante las actualizaciones, se vuelve a crear el clúster de la base de datos, lo que provoca que el secreto secret-store de ODS en el clúster de servicios compartidos esté obsoleto y no esté sincronizado. Por este motivo, el pod y el servicio de frontend de traducción u OCR no se inicializan.
Solución:
Elimina el secreto del clúster de servicios compartidos:
kubectl --kubeconfig SHARED_SERVICEG_CLUSTER_KUBECONFIG delete secret postgres-secret-store -n VAI_API_NAMESPACE
Sustituye SHARED_SERVICE_CLUSTER_KUBECONFIG por la ruta al archivo kubeconfig del clúster de servicios compartidos.
Si el servicio que da problemas es Traducción, sustituye VAI_API_NAMESPACE por "g-vai-translation-sie". Si el servicio que da problemas es OCR, sustituye VAI_API_NAMESPACE por "g-vai-ocr-sie".
Un controlador vuelve a crear el secreto automáticamente y lo vuelve a sincronizar con el clúster de la base de datos.
Vertex AI Search
Componentes de búsqueda atascados en el estado de conciliación
Versiones: 1.14.6
Síntomas: Los subcomponentes vaisearch-conversation y vaisearch-frontend se quedan en el estado Reconciling si no se crea ningún recurso personalizado SearchConfig en la organización.
Solución alternativa: se puede ignorar el problema. Una vez creado el recurso personalizado SearchConfig, los subcomponentes deben completar su conciliación.
Servidor
La rotación de credenciales de la BIOS se queda bloqueada en la fase de solicitud de restablecimiento
Versiones: 1.14.4
Síntomas: la rotación de las credenciales de la BIOS se queda bloqueada en el estado de solicitud de restablecimiento. Para comprobarlo, consulta la anotación gdch.cluster.gke.io/rotation-status del secreto bios-credentials del servidor:
kubectl get secret bios-credentials-SERVER_NAME -n gpc-system -o jsonpath='{.metadata.annotations.gdch\.cluster\.gke\.io/rotation-status}'
Sustituye SERVER_NAME por el nombre del servidor. El resultado del comando es "reset-requested" si la rotación se bloquea.
Solución alternativa: Para completar la rotación de credenciales de la BIOS, sigue el runbook SERV-R0018.
No se pueden aprovisionar los servidores instalados anteriormente
Versiones: 1.14.6
Síntomas: los servidores no se aprovisionan después de desaprovisionarse y volver a aprovisionarse, concretamente en relación con problemas con la gestión de claves de iLO (Integrated Lights-Out) y HSM (módulo de seguridad de hardware). Los servidores, que antes formaban parte de una organización desactivada, tienen errores durante el aprovisionamiento de imágenes, lo que indica que no se puede encontrar un dispositivo adecuado, a menudo debido a discos bloqueados por claves antiguas o eliminadas. Es posible que veas un error como este:
No suitable device was found for deployment - root device hints were not
provided and all found block devices are smaller than 4294967296B
Solución alternativa: elimina y vuelve a instalar los servidores afectados para que se aprovisionen. Para obtener más información, consulta los runbooks SERV-R0020 y SERV-R0021.
Máquinas virtuales
No se pueden importar imágenes
Versiones: 1.14.4. 1.14.5
Corregido: 1.14.6
Síntomas: la importación de una imagen mediante el comando gdcloud compute images import falla y se muestra un error Unauthorized debido a que se ha agotado el tiempo de espera de la sesión.
Solución: Usa la API de KRM para importar tu propia imagen en lugar de la CLI de gdcloud.
La importación de imágenes KRM tarda mucho
Versiones: 1.14.6 y posteriores
Síntomas: la importación de una imagen mediante la API KRM tarda mucho en completarse.
El recurso VirtualMachineImageImport permanece en el estado TranslationJobInProgress
durante un periodo prolongado, lo que indica que la fase de traducción no se
completa como se esperaba. El pod image-translation pasa al estado CrashLoopBackOff.
Solución:
- Vuelve a intentar la importación creando un recurso
VirtualMachineImageImportcon otro nombre. - Monitoriza el estado
VirtualMachineImageImportcomprobando periódicamente el recurso hasta que cambie aWaitingForTranslationJob. Para obtener más información, consulta el manual de operaciones de VMM R0007.