2024年12月3日火曜日

Custom Resourcesの強制削除対策

argoCD用のCustom Resourcesが削除できなくなった経緯から強制的に削除する方法を記載してみる


1. Finalizer の確認

ArgoCD のアプリケーションは、finalizer が設定されていると削除時にブロックされることがあります。finalizer を手動で削除することで、削除が進むことがあります。

  1. アプリケーションの詳細を確認します。

    kubectl get applications.argoproj.io prometheus --namespace=default -o yaml
  2. finalizers セクションを探し、その内容を確認します。

  3. 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=default
kubectl delete secret <name> --namespace=default

これらの対策を順に試して、アプリケーションを削除してみてください。

0 件のコメント:

コメントを投稿

helm( kube-prometheus-stack)とlokiの連携

helm経由で、 kube-prometheus-stackとloki stackを入れるだけだと連携ができないので 追加で以下の手順を進める必要がある。 1)Loki stackの導入を実施 helm install loki grafana/loki-stack --name...