1. https://raw.githubusercontent.com/kubesphere/ks-installer/release-3.1/scripts/kubesphere-delete.sh
    1. #!/usr/bin/env bash
    2. function delete_sure(){
    3. cat << eof
    4. $(echo -e "\033[1;36mNote:\033[0m")
    5. Delete the KubeSphere cluster, including the module kubesphere-system kubesphere-devops-system kubesphere-monitoring-system kubesphere-logging-system openpitrix-system.
    6. eof
    7. read -p "Please reconfirm that you want to delete the KubeSphere cluster. (yes/no) " ans
    8. while [[ "x"$ans != "xyes" && "x"$ans != "xno" ]]; do
    9. read -p "Please reconfirm that you want to delete the KubeSphere cluster. (yes/no) " ans
    10. done
    11. if [[ "x"$ans == "xno" ]]; then
    12. exit
    13. fi
    14. }
    15. delete_sure
    16. # delete ks-install
    17. kubectl delete deploy ks-installer -n kubesphere-system 2>/dev/null
    18. # delete helm
    19. for namespaces in kubesphere-system kubesphere-devops-system kubesphere-monitoring-system kubesphere-logging-system openpitrix-system kubesphere-monitoring-federated
    20. do
    21. helm list -n $namespaces | grep -v NAME | awk '{print $1}' | sort -u | xargs -r -L1 helm uninstall -n $namespaces 2>/dev/null
    22. done
    23. # delete kubefed
    24. kubectl get cc -n kubesphere-system ks-installer -o jsonpath="{.status.multicluster}" | grep enable
    25. if [[ $? -eq 0 ]]; then
    26. helm uninstall -n kube-federation-system kubefed 2>/dev/null
    27. #kubectl delete ns kube-federation-system 2>/dev/null
    28. fi
    29. helm uninstall -n kube-system snapshot-controller 2>/dev/null
    30. # delete kubesphere deployment
    31. kubectl delete deployment -n kubesphere-system `kubectl get deployment -n kubesphere-system -o jsonpath="{.items[*].metadata.name}"` 2>/dev/null
    32. # delete monitor statefulset
    33. kubectl delete prometheus -n kubesphere-monitoring-system k8s 2>/dev/null
    34. kubectl delete statefulset -n kubesphere-monitoring-system `kubectl get statefulset -n kubesphere-monitoring-system -o jsonpath="{.items[*].metadata.name}"` 2>/dev/null
    35. # delete grafana
    36. kubectl delete deployment -n kubesphere-monitoring-system grafana 2>/dev/null
    37. kubectl --no-headers=true get pvc -n kubesphere-monitoring-system -o custom-columns=:metadata.namespace,:metadata.name | grep -E kubesphere-monitoring-system | xargs -n2 kubectl delete pvc -n 2>/dev/null
    38. # delete pvc
    39. pvcs="kubesphere-system|openpitrix-system|kubesphere-devops-system|kubesphere-logging-system"
    40. kubectl --no-headers=true get pvc --all-namespaces -o custom-columns=:metadata.namespace,:metadata.name | grep -E $pvcs | xargs -n2 kubectl delete pvc -n 2>/dev/null
    41. # delete rolebindings
    42. delete_role_bindings() {
    43. for rolebinding in `kubectl -n $1 get rolebindings -l iam.kubesphere.io/user-ref -o jsonpath="{.items[*].metadata.name}"`
    44. do
    45. kubectl -n $1 delete rolebinding $rolebinding 2>/dev/null
    46. done
    47. }
    48. # delete roles
    49. delete_roles() {
    50. kubectl -n $1 delete role admin 2>/dev/null
    51. kubectl -n $1 delete role operator 2>/dev/null
    52. kubectl -n $1 delete role viewer 2>/dev/null
    53. for role in `kubectl -n $1 get roles -l iam.kubesphere.io/role-template -o jsonpath="{.items[*].metadata.name}"`
    54. do
    55. kubectl -n $1 delete role $role 2>/dev/null
    56. done
    57. }
    58. # remove useless labels and finalizers
    59. for ns in `kubectl get ns -o jsonpath="{.items[*].metadata.name}"`
    60. do
    61. kubectl label ns $ns kubesphere.io/workspace-
    62. kubectl label ns $ns kubesphere.io/namespace-
    63. kubectl patch ns $ns -p '{"metadata":{"finalizers":null,"ownerReferences":null}}'
    64. delete_role_bindings $ns
    65. delete_roles $ns
    66. done
    67. # delete clusters
    68. for cluster in `kubectl get clusters -o jsonpath="{.items[*].metadata.name}"`
    69. do
    70. kubectl patch cluster $cluster -p '{"metadata":{"finalizers":null}}' --type=merge
    71. done
    72. kubectl delete clusters --all 2>/dev/null
    73. # delete workspaces
    74. for ws in `kubectl get workspaces -o jsonpath="{.items[*].metadata.name}"`
    75. do
    76. kubectl patch workspace $ws -p '{"metadata":{"finalizers":null}}' --type=merge
    77. done
    78. kubectl delete workspaces --all 2>/dev/null
    79. # delete devopsprojects
    80. for devopsproject in `kubectl get devopsprojects -o jsonpath="{.items[*].metadata.name}"`
    81. do
    82. kubectl patch devopsprojects $devopsproject -p '{"metadata":{"finalizers":null}}' --type=merge
    83. done
    84. for pip in `kubectl get pipeline -A -o jsonpath="{.items[*].metadata.name}"`
    85. do
    86. kubectl patch pipeline $pip -n `kubectl get pipeline -A | grep $pip | awk '{print $1}'` -p '{"metadata":{"finalizers":null}}' --type=merge
    87. done
    88. for s2ibinaries in `kubectl get s2ibinaries -A -o jsonpath="{.items[*].metadata.name}"`
    89. do
    90. kubectl patch s2ibinaries $s2ibinaries -n `kubectl get s2ibinaries -A | grep $s2ibinaries | awk '{print $1}'` -p '{"metadata":{"finalizers":null}}' --type=merge
    91. done
    92. for s2ibuilders in `kubectl get s2ibuilders -A -o jsonpath="{.items[*].metadata.name}"`
    93. do
    94. kubectl patch s2ibuilders $s2ibuilders -n `kubectl get s2ibuilders -A | grep $s2ibuilders | awk '{print $1}'` -p '{"metadata":{"finalizers":null}}' --type=merge
    95. done
    96. for s2ibuildertemplates in `kubectl get s2ibuildertemplates -A -o jsonpath="{.items[*].metadata.name}"`
    97. do
    98. kubectl patch s2ibuildertemplates $s2ibuildertemplates -n `kubectl get s2ibuildertemplates -A | grep $s2ibuildertemplates | awk '{print $1}'` -p '{"metadata":{"finalizers":null}}' --type=merge
    99. done
    100. for s2iruns in `kubectl get s2iruns -A -o jsonpath="{.items[*].metadata.name}"`
    101. do
    102. kubectl patch s2iruns $s2iruns -n `kubectl get s2iruns -A | grep $s2iruns | awk '{print $1}'` -p '{"metadata":{"finalizers":null}}' --type=merge
    103. done
    104. kubectl delete devopsprojects --all 2>/dev/null
    105. # delete validatingwebhookconfigurations
    106. for webhook in ks-events-admission-validate users.iam.kubesphere.io network.kubesphere.io validating-webhook-configuration
    107. do
    108. kubectl delete validatingwebhookconfigurations.admissionregistration.k8s.io $webhook 2>/dev/null
    109. done
    110. # delete mutatingwebhookconfigurations
    111. for webhook in ks-events-admission-mutate logsidecar-injector-admission-mutate mutating-webhook-configuration
    112. do
    113. kubectl delete mutatingwebhookconfigurations.admissionregistration.k8s.io $webhook 2>/dev/null
    114. done
    115. # delete users
    116. for user in `kubectl get users -o jsonpath="{.items[*].metadata.name}"`
    117. do
    118. kubectl patch user $user -p '{"metadata":{"finalizers":null}}' --type=merge
    119. done
    120. kubectl delete users --all 2>/dev/null
    121. # delete helm resources
    122. for resource_type in `echo helmcategories helmapplications helmapplicationversions helmrepos helmreleases`; do
    123. for resource_name in `kubectl get ${resource_type}.application.kubesphere.io -o jsonpath="{.items[*].metadata.name}"`; do
    124. kubectl patch ${resource_type}.application.kubesphere.io ${resource_name} -p '{"metadata":{"finalizers":null}}' --type=merge
    125. done
    126. kubectl delete ${resource_type}.application.kubesphere.io --all 2>/dev/null
    127. done
    128. # delete workspacetemplates
    129. for workspacetemplate in `kubectl get workspacetemplates.tenant.kubesphere.io -o jsonpath="{.items[*].metadata.name}"`
    130. do
    131. kubectl patch workspacetemplates.tenant.kubesphere.io $workspacetemplate -p '{"metadata":{"finalizers":null}}' --type=merge
    132. done
    133. kubectl delete workspacetemplates.tenant.kubesphere.io --all 2>/dev/null
    134. # delete federatednamespaces in namespace kubesphere-monitoring-federated
    135. for resource in $(kubectl get federatednamespaces.types.kubefed.io -n kubesphere-monitoring-federated -oname); do
    136. kubectl patch "${resource}" -p '{"metadata":{"finalizers":null}}' --type=merge -n kubesphere-monitoring-federated
    137. done
    138. # delete crds
    139. for crd in `kubectl get crds -o jsonpath="{.items[*].metadata.name}"`
    140. do
    141. if [[ $crd == *kubesphere.io ]]; then kubectl delete crd $crd 2>/dev/null; fi
    142. done
    143. # delete relevance ns
    144. for ns in kubesphere-alerting-system kubesphere-controls-system kubesphere-devops-system kubesphere-logging-system kubesphere-monitoring-system kubesphere-monitoring-federated openpitrix-system kubesphere-system
    145. do
    146. kubectl delete ns $ns 2>/dev/null
    147. done

    1664094924674.png