argoCD用のCustom Resourcesが削除できなくなった経緯から強制的に削除する方法を記載してみる
1. Finalizer の確認
ArgoCD のアプリケーションは、finalizer
が設定されていると削除時にブロックされることがあります。finalizer
を手動で削除することで、削除が進むことがあります。
アプリケーションの詳細を確認します。
kubectl get applications.argoproj.io prometheus --namespace=default -o yamlfinalizers
セクションを探し、その内容を確認します。finalizer
を削除するために、次のコマンドを実行します。kubectl patch applications.argoproj.io prometheus --namespace=default -p '{"metadata":{"finalizers":null}}' --type=merge
このコマンドで finalizers
を削除し、その後に削除を実施。
2. 強制削除の実行
kubectl delete
コマンドに --force
オプションを追加して、強制的に削除。
kubectl delete applications.argoproj.io prometheus --namespace=default --force --grace-period=0
強制削除はリソースのクリーンアップ処理をスキップするため、データの不整合や依存関係の問題が発生する可能性があるので注意
3. リソースのロックを確認
ArgoCD が内部でリソースをロックしている場合があります。argocd-application-controller
のログを確認して、リソースの削除に関するエラーや警告が出ていないか確認。
kubectl logs -n argocd <argocd-application-controller-pod-name>
ログの中にエラーや警告が含まれている場合、それに基づいて対策を検討します。
4. API サーバーの状況を確認
クラスタ全体の API サーバーや kubectl
の動作が正常であることを確認します。場合によっては、API サーバーの問題でリソースの削除が遅延することがあるらしい。
kubectl get pods --all-namespaces
すべてのポッドが正常に動作していることを確認し、異常がある場合は対応すること
5. リソースの依存関係を確認
アプリケーションに関連するリソース(例えば、ConfigMap や Secret)が残っている場合、これらのリソースが削除されていないことが原因で削除処理が進まないことがあります。これらの関連リソースも確認し、手動で削除。
kubectl get configmaps,secret --namespace=default
必要に応じて、手動で削除します。
kubectl delete configmap <name> --namespace=defaultkubectl delete secret <name> --namespace=default
これらの対策を順に試して、アプリケーションを削除してみてください。
0 件のコメント:
コメントを投稿