golang k8s

如何使用go语言在k8s上添加node节点

阅读 2.5k
3 个回答

go是编程语言,k8s只是用go开发的应用而已。节点这些概念都属于k8s,那么对应的功能自然由他接口提供,不需要操go的心。去搜文档就好了。云服务的话,在管理后台也有对应的目录。

新手上路,请多包涵

用client-go操作就好了呀

package main

import (
    "context"
    "fmt"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
    v1 "k8s.io/api/core/v1"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func main() {
    // 加载 kubeconfig 文件(通常位于 ~/.kube/config)
    kubeconfig := "/path/to/your/kubeconfig"

    // 构造 Kubernetes 客户端
    config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
    if err != nil {
        panic(fmt.Errorf("failed to build kubeconfig: %v", err))
    }

    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        panic(fmt.Errorf("failed to create kubernetes client: %v", err))
    }

    // 构造 Node 对象 这里你也可以直接读取一个nodeyaml的模版序列化
    node := &v1.Node{
        ObjectMeta: metav1.ObjectMeta{
            Name: "example-node", // 设置节点名称,必须唯一
        },
        Spec: v1.NodeSpec{
            // 这里可以设置其他 node spec 的参数,比如调度标签等
            Taints: []v1.Taint{
                {
                    Key:    "example-taint-key",
                    Value:  "example-taint-value",
                    Effect: v1.TaintEffectNoSchedule, // 节点调度策略示例
                },
            },
        },
        Status: v1.NodeStatus{
            // 自定义 Node 的状态字段(通常由 kubelet 自动管理)
            Capacity: v1.ResourceList{
                v1.ResourceCPU:    "4",     // 设置该 Node 提供的 CPU 容量
                v1.ResourceMemory: "16Gi",  // 设置该 Node 提供的内存容量
            },
            Allocatable: v1.ResourceList{
                v1.ResourceCPU:    "4",
                v1.ResourceMemory: "16Gi",
            },
            Conditions: []v1.NodeCondition{
                {
                    Type:   v1.NodeReady,
                    Status: v1.ConditionTrue,
                    Reason: "NodeCreatedManually",
                },
            },
        },
    }

    // 调用 Kubernetes API 创建 Node
    nodeClient := clientset.CoreV1().Nodes()
    _, err = nodeClient.Create(context.TODO(), node, metav1.CreateOptions{})
    if err != nil {
        panic(fmt.Errorf("failed to create node: %v", err))
    }

    fmt.Println("Node created successfully!")
}
推荐问题