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