1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

KubernetesでNamespaceが消えない時にやったこと

Posted at

問題

Namespace を消そうとしてもコマンドが終わらないってこと、たまにありますよね。

$ kubectl delete ns vault
namespace "vault" deleted


...

今回は、「ファイナライザを削除して Namespace を強制削除する卍」といった方法はとりたくない環境だったので、ちゃんと原因を特定してみました。

状況

消えない Namespace の状態を確認すると、Terminating で止まっていました。

$ kubectl get ns vault
NAME    STATUS        AGE
vault   Terminating   76d

解決方法

Kubernetes で Namespace 内に存在するすべての種類のリソースを取得する魔法のようなワンライナーがあるらしいので使ってみます。

$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n vault
No resources found in vault namespace.
...
No resources found in vault namespace.
NAME             STORE                    REFRESH INTERVAL   STATUS              READY
vault-eso-test   vault-backend-k8s-auth   15s                SecretSyncedError   False
No resources found in vault namespace.
...
No resources found in vault namespace.

どうやらこのリソースが残ってしまっているみたいでした。

NAME             STORE                    REFRESH INTERVAL   STATUS              READY
vault-eso-test   vault-backend-k8s-auth   15s                SecretSyncedError   False

消してみる。

$ kubectl delete ExternalSecret vault-eso-test
Error from server (InternalError): Internal error occurred: failed calling webhook "validate.externalsecret.external-secrets.io": failed to call webhook: Post "https://external-secrets-webhook.vault.svc:443/validate-external-secrets-io-v1beta1-externalsecret?timeout=5s": service "external-secrets-webhook" not found

うーん消せない...
どうやら、「Webhook がもう存在しないのに、それを参照してるリソースが残ってる」らしいので、Webhook一覧を見てみます。

$ kubectl get validatingwebhookconfigurations --all-namespaces
NAME                               WEBHOOKS   AGE
externalsecret-validate            1          76d
xxx                                1          448d
xxx                                9          451d
xxx                                1          451d
xxx                                1          451d
secretstore-validate               2          76d

怪しそうなWebhookが2つほどありました。
まずは、エラーメッセージに出ている「externalsecret-validate」を消してみます。

$ kubectl delete validatingwebhookconfiguration externalsecret-validate
validatingwebhookconfiguration.admissionregistration.k8s.io "externalsecret-validate" deleted

お、リソースが消せました!

$ kubectl delete ExternalSecret vault-eso-test
externalsecret.external-secrets.io "vault-eso-test" deleted

でも、Namespace は Termination のままでした...
なので「secretstore-validate」も消してみます。

$ kubectl delete validatingwebhookconfigurations secretstore-validate 
validatingwebhookconfiguration.admissionregistration.k8s.io "secretstore-validate" deleted

削除後、Namespace を削除する途中で固まっていたシェルを確認すると、コマンドが終わっており Namespace も消えていました!

おわりに

今回は、カスタムリソース(Operator)をインストールしていた Namespace を削除しようしたら、うまくリソースを消せなかったことが原因で Namespace が Termination のまま止まっていました。そもそも、カスタムリソースをインストールすると CRD もインストールされると思いますが、CRD はクラスタスコープのリソースなので Namespace を消すだけでは消えないんですよね...
なので、カスタムリソースをどの Namespace にインストールしたかは、ちゃんとhelmfile等のコードに残して確認できるようにしておくことが大切と学びました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?