go - 如何使用 golang 客户端从 Kubernetes 中驱逐或删除 Pod

标签 go kubernetes

我想使用 client-go 包从 Kubernetes 节点中逐出所有 pod。类似于 kubectl drain <Node> .可能忽略 kube-system命名空间 pod。

我通过以下方式从节点获取了 pod 列表:

func evictNodePods(nodeInstance string, client *kubernetes.Clientset) {

    pods, err := client.CoreV1().Pods("").List(metav1.ListOptions{
        FieldSelector: "spec.nodeName=" + nodeInstance,
    })

    if err != nil {
        log.Fatal(err)
    }
    for _, i := range pods.Items {
        if i.Namespace == "kube-system" {
            continue
        } else {
            //evict
        }
    }
}

但我不清楚如何发送 POST 请求以驱逐给定节点实例上的 pod

最佳答案

要删除 pod:

err := client.CoreV1().Pods(i.Namespace).Delete(i.Name, metav1.DeleteOptions{})
if err != nil {
  log.Fatal(err)
}

如果升级client-go到最新版本,需要添加context也可以作为参数。

err := client.CoreV1().Pods(i.Namespace).Delete(context.TODO(), i.Name, metav1.DeleteOptions{})
if err != nil {
  log.Fatal(err)
}

关于go - 如何使用 golang 客户端从 Kubernetes 中驱逐或删除 Pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62803041/

相关文章:

go - 如果在循环内调用父函数,是否将从父函数传递给作为goroutine运行的闭包的参数复制?

kubernetes - argocd 应用程序在 CI 管道中创建(GitHub Actions、Tekton...)抛出 "PermissionDenied desc = permission denied: applications, create, default/myapp"

kubernetes - 如何通过 kubernetes 上的 yaml 配置文件创建新的复制 Controller

kubernetes - statefulset 的就绪探测,而不是单个 pod/容器

kubernetes - 如何创建额外的 istio 入口网关?

postgresql - CrashLoopBackOff (postgres) - GCP

go - 在 Go 中检测有符号整数溢出

testing - 如何在 "Go test"上设置 go timeout 标志

go - 从 openpgp.Entity 中提取 rsa.PrivateKey

mysql - 如何从 GO 中的数组将数据输入到 mysql 模型中?