I have seen many cases where the supervisor namespace gets stuck at Terminating phase waiting on finalization on some of its child resources. This plugin can be used for setting finalizer to null for all objects of a specified api resource under a supervisor namespace. It will be helpful in cleaning up supervisor namespaces stuck terminating phase and can be also used to clean up stale resources under a supervisor namespace.
kubectl-nullfinalizer
#!/bin/bash
Help()
{
# Display Help
echo "This plugin sets finalizer to null for specified resource in a namespace."
echo "Usage: kubectl nullfinalizer SVNAMESPACE RESOURCENAME"
echo "Example: kubectl nullfinalizer vineetha-svns01 pvc"
}
# Get the options
while getopts ":h" option; do
case $option in
h) # display Help
Help
exit;;
\?) # incorrect option
echo "Error: Invalid option"
exit;;
esac
done
kubectl get -n $1 $2 --no-headers | awk '{print $1}' | xargs -I{} kubectl patch -n $1 $2 {} -p '{"metadata":{"finalizers": null}}' --type=merge
Usage
- Place the plugin in the system executable path.
- I placed it in $HOME/.krew/bin in my laptop.
- Once you copied the plugin to the proper path, you can make it executable by: chmod 755 kubectl-nullfinalizer .
- After that you should be able to run the plugin as: kubectl nullfinalizer SUPERVISORNAMESPACE RESOURCENAME .
Example
Following is an exmaple of a supervisor namespace stuck at Terminating phase. While describe you can see that it is waiting on finalization.
❯ k config current-context
wdc-08-vc07
❯ kg ns svc-sct-bot-dogfooding
NAME STATUS AGE
svc-sct-bot-dogfooding Terminating 584d
❯
❯ kg ns svc-sct-bot-dogfooding -oyaml
status:
conditions:
- lastTransitionTime: "2023-09-26T04:45:21Z"
message: All resources successfully discovered
reason: ResourcesDiscovered
status: "False"
type: NamespaceDeletionDiscoveryFailure
- lastTransitionTime: "2023-09-26T04:45:21Z"
message: All legacy kube types successfully parsed
reason: ParsedGroupVersions
status: "False"
type: NamespaceDeletionGroupVersionParsingFailure
- lastTransitionTime: "2023-09-26T04:45:21Z"
message: All content successfully deleted, may be waiting on finalization
reason: ContentDeleted
status: "False"
type: NamespaceDeletionContentFailure
- lastTransitionTime: "2023-09-26T04:45:21Z"
message: 'Some resources are remaining: clusters.cluster.x-k8s.io has 1 resource
instances, kubeadmcontrolplanes.controlplane.cluster.x-k8s.io has 1 resource
instances, machines.cluster.x-k8s.io has 4 resource instances, persistentvolumeclaims.
has 9 resource instances, projects.registryagent.vmware.com has 1 resource instances,
tanzukubernetesclusters.run.tanzu.vmware.com has 1 resource instances'
reason: SomeResourcesRemain
status: "True"
type: NamespaceContentRemaining
- lastTransitionTime: "2023-09-26T04:45:21Z"
message: 'Some content in the namespace has finalizers remaining: cluster.cluster.x-k8s.io
in 1 resource instances, cns.vmware.com/pvc-protection in 9 resource instances,
controller-finalizer in 1 resource instances, kubeadm.controlplane.cluster.x-k8s.io
in 1 resource instances, machine.cluster.x-k8s.io in 4 resource instances, tanzukubernetescluster.run.tanzu.vmware.com
in 1 resource instances'
reason: SomeFinalizersRemain
status: "True"
type: NamespaceFinalizersRemaining
phase: Terminating
❯ kg pvc -n svc-sct-bot-dogfooding
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
gc1-workers-r9jvb-4sfjc-containerd Terminating pvc-0d9f4a38-86ad-41d8-ab11-08707780fd85 70Gi RWO wdc-08-vc07c01-wcp-mgmt 538d
gc1-workers-r9jvb-szg9r-containerd Terminating pvc-ca6b6ec4-85fa-464c-abc6-683358994f3f 70Gi RWO wdc-08-vc07c01-wcp-mgmt 538d
gc1-workers-r9jvb-zbdt8-containerd Terminating pvc-8f2b0683-ebba-46cb-a691-f79a0e94d0e2 70Gi RWO wdc-08-vc07c01-wcp-mgmt 538d
gc2-workers-vpzl2-ffkgx-containerd Terminating pvc-69e64099-42c8-44b5-bef2-2737eca49c36 70Gi RWO wdc-08-vc07c01-wcp-mgmt 510d
gc2-workers-vpzl2-hww5v-containerd Terminating pvc-5a909482-4c95-42c7-b55a-57372f72e75f 70Gi RWO wdc-08-vc07c01-wcp-mgmt 510d
gc2-workers-vpzl2-stsnh-containerd Terminating pvc-ed7de540-72f4-4832-8439-da471bf4c892 70Gi RWO wdc-08-vc07c01-wcp-mgmt 510d
gc3-workers-2qr4c-64xpz-containerd Terminating pvc-38478f19-8180-4b9b-b5a9-8c06f17d0fbc 70Gi RWO wdc-08-vc07c01-wcp-mgmt 510d
gc3-workers-2qr4c-dpng5-containerd Terminating pvc-a8b12657-10bd-4993-b08e-51b7e9b259f9 70Gi RWO wdc-08-vc07c01-wcp-mgmt 538d
gc3-workers-2qr4c-wfvvd-containerd Terminating pvc-01c6b224-9dc0-4e03-b87e-641d4a4d0d95 70Gi RWO wdc-08-vc07c01-wcp-mgmt 538d
❯
❯ k nullfinalizer -h
This plugin sets finalizer to null for specified resource in a namespace.
Usage: kubectl nullfinalizer SVNAMESPACE RESOURCENAME
Example: kubectl nullfinalizer vineetha-svns01 pvc
❯
❯
❯ k nullfinalizer svc-sct-bot-dogfooding pvc
persistentvolumeclaim/gc1-workers-r9jvb-4sfjc-containerd patched
persistentvolumeclaim/gc1-workers-r9jvb-szg9r-containerd patched
persistentvolumeclaim/gc1-workers-r9jvb-zbdt8-containerd patched
persistentvolumeclaim/gc2-workers-vpzl2-ffkgx-containerd patched
persistentvolumeclaim/gc2-workers-vpzl2-hww5v-containerd patched
persistentvolumeclaim/gc2-workers-vpzl2-stsnh-containerd patched
persistentvolumeclaim/gc3-workers-2qr4c-64xpz-containerd patched
persistentvolumeclaim/gc3-workers-2qr4c-dpng5-containerd patched
persistentvolumeclaim/gc3-workers-2qr4c-wfvvd-containerd patched
❯
❯
❯ kg projects.registryagent.vmware.com -n svc-sct-bot-dogfooding
NAME AGE
svc-sct-bot-dogfooding 584d
❯
❯ k nullfinalizer -h
This plugin sets finalizer to null for specified resource in a namespace.
Usage: kubectl nullfinalizer SVNAMESPACE RESOURCENAME
Example: kubectl nullfinalizer vineetha-svns01 pvc
❯
❯ k nullfinalizer svc-sct-bot-dogfooding projects.registryagent.vmware.com
project.registryagent.vmware.com/svc-sct-bot-dogfooding patched
❯
❯
❯ kg ns svc-sct-bot-dogfooding
Error from server (NotFound): namespaces "svc-sct-bot-dogfooding" not found
❯
Hope it was useful. Cheers!