Descreva o erro
A implantação do trident-csi estava travando devido 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 algum motivo, o trident-csi estava seguindo as referências restantes a um instantâneo em um back-end de PVC que não suportava instantâneos.
O instantâneo em si não existia mais para esse PVC (pode ter sido criado por engano no kubernetes no passado [> 1 mês atrás]). Eu até tinha deletado o PVC original. Mas o verdadeiro problema era que excluir o objeto "volumesnapshot" para esse instantâneo não parecia excluir todas as outras referências a ele.
O back-end era "ontap-nas-economy" ( https://netapp-trident.readthedocs.io/en/latest/kubernetes/operations/tasks/backends/ontap/drivers.html , o q-tree).
Parecia que o CSI estava tentando localizar um instantâneo para um PV (qtree) provisionado em um backend 'econômico', mas na verdade estava verificando o volume pvc no backend ontap-nas regular. Que é definido como nosso padrão também. Suspeito que esse problema tenha acontecido porque a classe de armazenamento padrão era a econômica, quando o instantâneo foi criado. Isso mudou mais tarde para definir o padrão para ontap-nas que suporta back-end, mas as referências provavelmente foram quebradas/não limpas adequadamente naquele ponto (?).
Essas outras referências incluem:
A exclusão das referências anteriores corrige o problema.
Estado inicial:
Algum tempo atrás, um recurso volumesnapshot foi criado para um back-end que não o suportava. A exclusão desse volumenapshot não pareceu excluir as referências a ele em outros objetos trident crd.
O que desencadeou o bug:
Reiniciando alguns nós, reiniciei o kubelet em um dos nós que tinha o volumeattachment para o snapshot/pvc.
Ambiente
Turno aberto 4.6.*
Reproduzir
Comportamento esperado
Nenhum crashlooping em referências TridentTransaction quebradas.
Imprima um aviso e continue OU limpe a referência quebrada OU adicione um sinalizador para ativar/desativar esse comportamento.
A solução alternativa é excluir as transações do tridente manualmente e reiniciar os pods do tridente. este ainda é um bug que precisa ser resolvido.
Etapas para a solução alternativa abaixo
Verifique as entradas no CRD tridenttransactions.
#oc get tridenttransaction -n trident
# oc get tridenttransaction -n trident -o json
[ corona@stablrebco2 ~]$ oc get ttx -n trident
NOME IDADE
pvc-63836175-1515-4326-b73f-cae3e0963be7-snapshot-0462e2ea-f167-4846-86a3-10cc6599b4a8 8d
3) Apague as entradas presentes no CRD da transação trident.
Antes de excluir a entrada do CRD tridenttransaction, talvez seja necessário editar a entrada do recurso CRD e remover os finalizadores (trident.netapp.io)
Para editar o CRD, use um editor vi: (Lembre-se de salvar a alteração)
Exclua a linha abaixo dos finalizadores contendo a entrada "trident.netapp.io".
4) Para excluir o CRD da transação trident.
Confirme que a transação trident foi excluída.
5) Depois disso, os pods Trident devem aparecer e estar no status Running. Caso contrário, exclua o pod de tridente principal (o pod com o nome de pod mais longo).
Isso deve gerar um novo pod de tridente que tentará inicializar novamente e inicializar com sucesso porque não há transações obsoletas a serem tratadas durante a inicialização.
haverá um lançamento de patch para corrigir o bug
Olá @promothp ,
Este bug junto com todos os outros bugs são avaliados com base na gravidade e priorizados para serem corrigidos de acordo. Se possível, uma correção de bug para esse problema seria incluída na versão Trident v21.01 no final de janeiro.
Adicione meu voto para ter um patch mais cedo ou mais tarde!
Essa correção está incluída na versão Trident v21.01 com commit 0ce1aaf .