登录
首页 >  Golang >  Go问答

如何使用 golang 客户端封锁 Kubernetes 节点

来源:stackoverflow

时间:2024-03-16 14:42:28 317浏览 收藏

在 Kubernetes 中,通过使用 Golang 客户端 SDK,可以对特定节点进行封锁操作。这可以通过向 `/api/v1/nodes/{node-name}` 端点发送一个内容类型为 `application/strategic-merge-patch+json` 的 PATCH 请求来实现,其中请求体包含一个 JSON Patch 文档,用于将节点的 `unschedulable` 字段设置为 `true`。通过这种方式,可以将节点标记为不可调度,从而阻止其被用于新的 Pod 调度。

问题内容

我想使用 golang kubernetes 客户端 sdk 来封锁 kubernetes 集群中的特定节点。

根据其他帖子,我需要通过以下内容:

patch /api/v1/nodes/node-name

request body: {"spec":{"unschedulable":true}} content-type: "application/strategic-merge-patch+json"

但是,我不熟悉如何传递它。

我有以下内容,但不确定这些值是否正确

type patchStringValue struct {
    Op    string `json:"op"`
    Path  string `json:"path"`
    Value string `json:"value"`
}

func k8NodeCordon() {
    clientSet := k8ClientInit()

    payload := []patchStringValue{{
        Op:    "replace",
        Path:  "/spec/unschedulable",
        Value: "true",
    }}
    payloadBytes, _ := json.Marshal(payload)
    _, err := clientSet.
        CoreV1().Nodes().Patch()
    return err
}

解决方案


看起来我只需要添加以下内容:

_, err := clientset.corev1().nodes().patch("", types.jsonpatchtype, payloadbytes)
type patchStringValue struct {
    Op    string `json:"op"`
    Path  string `json:"path"`
    Value bool   `json:"value"`
}

func k8NodeCordon() {
    clientSet := k8ClientInit()

    payload := []patchStringValue{{
        Op:    "replace",
        Path:  "/spec/unschedulable",
        Value: true,
    }}
    payloadBytes, _ := json.Marshal(payload)
    _, err := clientSet.CoreV1().Nodes().Patch("", types.JSONPatchType, payloadBytes)
    return err
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何使用 golang 客户端封锁 Kubernetes 节点》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>