我想使用 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/