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 环境下获取用户目录 }