Trident: Trident-csi crashloops en referencias de instantáneas no válidas

Creado en 7 dic. 2020  ·  5Comentarios  ·  Fuente: NetApp/trident

Describa el error

La implementación de trident-csi estaba fallando debido a

I1207 08:20:13.609384 1 connection.go:186] GRPC error: rpc error: code = FailedPrecondition desc = Trident initialization failed; error attempting to clean up snapshot snapshot-SOMEUUID from backend ontapnas.... : error reading volume size: flexvol trident_pvc_SOMEOTHERUUID not found

Por alguna razón, trident-csi estaba siguiendo referencias sobrantes a una instantánea en un backend de PVC que no admitía instantáneas.
La instantánea en sí ya no existía para ese PVC (es posible que se haya creado por error en kubernetes en el pasado [hace> 1 mes]). Incluso había borrado el PVC original. Pero el verdadero problema era que eliminar el objeto "volumensnapshot" para esa instantánea no parecía eliminar todas las demás referencias a él.

El backend era "ontap-nas-economy" ( https://netapp-trident.readthedocs.io/en/latest/kubernetes/operations/tasks/backends/ontap/drivers.html , el q-tree).

Parecía que CSI estaba tratando de ubicar una instantánea para un PV (qtree) aprovisionado en un backend 'económico', pero en realidad estaba verificando el volumen de pvc en el backend normal de ontap-nas. Que también está configurado como nuestro valor predeterminado. Sospecho que este problema ocurrió porque la clase de almacenamiento predeterminada era la económica cuando se creó la instantánea. Eso cambió más tarde para establecer el valor predeterminado en ontap-nas que admite backend, pero las referencias probablemente se rompieron o no se limpiaron correctamente en ese punto (?).

Esas otras referencias incluyen:

  • un VolumeSnapshotContent que hacía referencia a la misma instantánea/pvc.
  • un objeto TridentVolume que hace referencia a ese PVC eliminado
  • una TridentTransaction que también contenía una referencia a esa instantánea.

Eliminar las referencias pasadas soluciona el problema.

Estado inicial:

Hace algún tiempo, se creó un recurso de instantánea de volumen para un backend que no lo admitía. Eliminar esa instantánea de volumen no pareció eliminar las referencias a ella en otros objetos trident crd.

Lo que provocó el error:

Al reiniciar algunos nodos, se reinició el kubelet en uno de los nodos que tenía el archivo adjunto de volumen para la instantánea/pvc.

Ambiente
Turno abierto 4.6.*

  • Versión de Trident: 20.07.1 (también se bloqueó en 20.10.0 después de la actualización)
  • Indicadores de instalación de Trident utilizados: --debug
  • Tiempo de ejecución del contenedor: cri-o://1.19.0-24
  • Versión de Kubernetes: v1.19.0
  • Orquestador de Kubernetes: Openshift 4.6.*
  • Puertas de funciones habilitadas para Kubernetes: [p. ej., CSINodeInfo]
  • Sistema operativo: Red Hat Enterprise Linux CoreOS 46.82
  • Tipos de backend de NetApp: [por ejemplo, CVS para AWS, ONTAP AFF 9.5, HCI 1.7]

Reproducir

  • Establezca el backend de almacenamiento predeterminado en uno que no admita instantáneas.
  • Cree un objeto de instantánea de volumen para un backend que no admita instantáneas
  • Cambie el SC predeterminado a uno que admita instantáneas
  • Eliminar la instantánea de volúmenes
  • Reinicie el nodo que contenía el archivo adjunto para esa instantánea.
  • Después de reiniciar el nodo, reinicie el pod trident-csi.
  • Compruebe si todas las referencias están borradas.

Comportamiento esperado

Sin crashlooping en referencias TridentTransaction rotas.
Imprima una advertencia y continúe O limpie la referencia rota O agregue una bandera para activar/desactivar este comportamiento.

bug tracked

Todos 5 comentarios

La solución consiste en eliminar las transacciones de trident manualmente y reiniciar los pods de trident. esto sigue siendo un error que debe abordarse.
Pasos para la solución a continuación
Compruebe las entradas en el CRD de tridenttransactions.

# oc obtener transacción tridente -n tridente
# oc obtener tridenttransaction -n trident -o json

[ corona@stablrebco2 ~]$ oc obtener ttx -n tridente
NOMBRE EDAD
pvc-63836175-1515-4326-b73f-cae3e0963be7-instantánea-0462e2ea-f167-4846-86a3-10cc6599b4a8 8d

3) Eliminar las entradas presentes en el CRD tridenttransaction.
Antes de eliminar la entrada de CRD de tridenttransaction, es posible que deba editar la entrada de recursos de CRD y eliminar los finalizadores (trident.netapp.io)

Para editar el CRD, use un editor vi: (Recuerde guardar el cambio)

kubectl (oc) editar tridenttransaction pvc-63836175-1515-4326-b73f-cae3e0963be7-snapshot-0462e2ea-f167-4846-86a3-10cc6599b4a8 -n trident

 Elimine la línea debajo de los finalizadores que contienen la entrada "trident.netapp.io".

4) Para eliminar el CRD de tridenttransaction.

oc eliminar ttx pvc-63836175-1515-4326-b73f-cae3e0963be7-snapshot-0462e2ea-f167-4846-86a3-10cc6599b4a8 -n tridente

Confirme que se ha eliminado la transacción trident.

oc obtener ttx -n tridente

5) Después de esto, las cápsulas Trident deberían aparecer y estar en estado de ejecución. De lo contrario, elimine el pod tridente principal (el pod con el nombre de pod más largo).
Esto debería generar un nuevo pod tridente que intentará inicializarse nuevamente y debería inicializarse con éxito porque no hay transacciones obsoletas que manejar durante la inicialización.

oc obtener vainas -n tridente

oc eliminar vaina-n tridente

¿Habrá un lanzamiento de parche para corregir el error?

Hola @promothp ,

Este error, junto con todos los demás errores, se evalúa en función de la gravedad y se prioriza para corregirlo en consecuencia. Si es posible, se incluiría una corrección de errores para este problema en el lanzamiento de Trident v21.01 a fines de enero.

¡Agregue mi voto para tener un parche más temprano que tarde!

Esta solución se incluye en la versión Trident v21.01 con la confirmación 0ce1aaf .

¿Fue útil esta página
0 / 5 - 0 calificaciones