cheliequan
2023-05-22 628115fe816db130c6008bcc8c1c3f26cf2d0e8b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package delete
 
import (
    "context"
    "flag"
    "fmt"
    "os"
    "path/filepath"
 
    "k8s.io/apimachinery/pkg/api/errors"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
)
 
var (
    replicas      int32 = 3
    port          int32 = 9081
    namespaces          = []string{"guangsheng", "geruimi", "tongsheng"}
    usedNodePorts       = make(map[int32]bool)
)
 
func main() {
    // 配置 Kubernetes 集群的 kubeconfig 路径
    kubeconfig := flag.String("kubeconfig", filepath.Join(homeDir(), ".kube", "config"), "kubeconfig file")
    flag.Parse()
 
    // 创建 Kubernetes 客户端
    config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
    if err != nil {
        panic(err.Error())
    }
 
    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        panic(err.Error())
    }
 
    // 删除多个 Namespace 下的相同名称的 Deployment 和 Service
    for _, ns := range namespaces {
        err = DeleteResources(clientset, ns, ns, ns)
        if err != nil {
            panic(err)
        }
    }
 
    fmt.Println("Resources deleted.")
}
 
// DeleteResources 删除指定的 Namespace、Deployment 和 Service
func DeleteResources(clientset *kubernetes.Clientset, namespace, deploymentName, serviceName string) error {
    fmt.Println("\033[1;37;40mDeleting resources in Namespace:", namespace, "\033[0m")
 
    // 删除 Deployment
    err := deleteDeployment(clientset, namespace, deploymentName)
    if err != nil {
        return err
    }
 
    // 删除 Service
    err = deleteService(clientset, namespace, serviceName)
    if err != nil {
        return err
    }
 
    // 删除 Namespace
    err = deleteNamespace(clientset, namespace)
    if err != nil {
        return err
    }
 
    return nil
}
 
// deleteDeployment 删除指定的 Deployment
func deleteDeployment(clientset *kubernetes.Clientset, namespace, deploymentName string) error {
    fmt.Println("\033[1;37;40mDeleting Deployment:", deploymentName, "\033[0m")
 
    err := clientset.AppsV1().Deployments(namespace).Delete(context.TODO(), deploymentName, metav1.DeleteOptions{})
    if err != nil {
        if errors.IsNotFound(err) {
            fmt.Printf("Deployment %s not found in Namespace %s\n", deploymentName, namespace)
        } else {
            return fmt.Errorf("failed to delete Deployment: %v", err)
        }
    } else {
        fmt.Printf("Deployment %s deleted from Namespace %s\n", deploymentName, namespace)
    }
 
    return nil
}
 
// deleteService 删除指定的 Service
func deleteService(clientset *kubernetes.Clientset, namespace, serviceName string) error {
    fmt.Println("\033[1;37;40mDeleting Service:", serviceName, "\033[0m")
 
    err := clientset.CoreV1().Services(namespace).Delete(context.TODO(), serviceName, metav1.DeleteOptions{})
    if err != nil {
        if errors.IsNotFound(err) {
            fmt.Printf("Service %s not found in Namespace %s\n", serviceName, namespace)
        } else {
            return fmt.Errorf("failed to delete Service: %v", err)
        }
    } else {
        fmt.Printf("Service %s deleted from Namespace %s\n", serviceName, namespace)
    }
 
    return nil
}
 
// deleteNamespace 删除指定的 Namespace
func deleteNamespace(clientset *kubernetes.Clientset, namespace string) error {
    fmt.Println("\033[1;37;40mDeleting Namespace:", namespace, "\033[0m")
 
    err := clientset.CoreV1().Namespaces().Delete(context.TODO(), namespace, metav1.DeleteOptions{})
    if err != nil {
        if errors.IsNotFound(err) {
            fmt.Printf("Namespace %s not found\n", namespace)
        } else {
            return fmt.Errorf("failed to delete Namespace: %v", err)
        }
    } else {
        fmt.Printf("Namespace %s deleted\n", namespace)
    }
 
    return nil
}
 
// homeDir 获取当前用户的家目录路径
func homeDir() string {
    if h := os.Getenv("HOME"); h != "" {
        return h
    }
    return os.Getenv("USERPROFILE") // Windows 环境下获取用户目录
}