バグを説明する
trident-csiの展開は、次の理由でクラッシュループしていました
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
何らかの理由で、trident-csiは、スナップショットをサポートしていないPVCバックエンド上のスナップショットへの残りの参照を追跡していました。
そのPVCのスナップショット自体はもう存在しませんでした(過去[> 1か月前]にkubernetesで誤って作成された可能性があります)。 元のPVCも削除しました。 しかし、本当の問題は、そのスナップショットの「volumesnapshot」オブジェクトを削除しても、それに対する他のすべての参照が削除されていないように見えることでした。
バックエンドは「ontap-nas-economy」(https://netapp-trident.readthedocs.io/en/latest/kubernetes/operations/tasks/backends/ontap/drivers.html、q-treeのもの)でした。
CSIが「economy」バックエンドでプロビジョニングされたPV(qtree)のスナップショットを見つけようとしていたように見えましたが、実際には通常のontap-nasバックエンドでpvcボリュームをチェックしていました。 これもデフォルトとして設定されています。 この問題は、スナップショットが作成されたときのデフォルトのストレージクラスがエコノミークラスであったために発生したと思われます。 これは後で変更され、デフォルトをバックエンドをサポートするontap-nasに設定しましたが、参照が壊れているか、その時点で適切にクリーンアップされていません(?)。
それらの他の参照は次のとおりです。
過去の参照を削除すると、問題が修正されます。
初期状態:
少し前に、ボリュームスナップショットリソースが、それをサポートしていないバックエンド用に作成されました。 そのvolumesnapshotを削除しても、他のトライデントcrdオブジェクトでのそのボリュームスナップショットへの参照は削除されていないようです。
バグの原因:
一部のノードを再起動し、スナップショット/ PVCのボリュームアタッチメントがあったノードの1つでkubeletを再起動しました。
環境
Openshift4.6。*
再現するには
予想される行動
壊れたTridentTransaction参照でクラッシュループは発生しません。
警告を出力して続行するか、壊れた参照をクリーンアップするか、フラグを追加してこの動作のオン/オフを切り替えます。
回避策は、トライデントトランザクションを手動で削除し、トライデントポッドを再起動することです。 これはまだ対処する必要のあるバグです。
以下の回避策の手順
tridenttransactionsCRDのエントリを確認します。
#oc get tridenttransaction -n trident
#oc get tridenttransaction -n trident -o json
[ corona @ stablrebco2〜 ] $ oc get ttx-nトライデント
名前年齢
pvc-63836175-1515-4326-b73f-cae3e0963be7-snapshot-0462e2ea-f167-4846-86a3-10cc6599b4a8 8d
3)トライデントトランザクションCRDに存在するエントリを削除します。
tridenttransaction CRDエントリを削除する前に、CRDリソースエントリを編集してファイナライザー(trident.netapp.io)を削除する必要がある場合があります。
CRDを編集するには、viエディターを使用します:(変更を保存することを忘れないでください)
エントリ「trident.netapp.io」を含むファイナライザーの下の行を削除します。
4)トライデントトランザクションCRDを削除します。
tridenttransactionが削除されたことを確認します。
5)この後、トライデントポッドが起動し、実行状態になります。 そうでない場合は、メインのトライデントポッド(ポッド名が最も長いポッド)を削除します。
これにより、新しいトライデントポッドが生成され、初期化が再試行されます。初期化中に処理される古いトランザクションがないため、正常に初期化されます。
バグを修正するためのパッチリリースがありますか
こんにちは@promothp 、
このバグは、他のすべてのバグとともに重大度に基づいて評価され、それに応じて修正されるように優先順位が付けられます。 可能であれば、この問題のバグ修正は、1月末のTridentv21.01リリースに含まれる予定です。
すぐにパッチを入手することに投票を追加してください!
この修正は、コミット0ce1aafを含むTridentv21.01リリースに含まれています。