如何使用kubernetes go客户端库实现`kubectl create -f pod.yaml`

时间:2017-09-18 13:45:57

标签: kubernetes kubernetes-go-client

我有一个名为“myspec”的文件夹,里面有一些kube-spec文件,让我们说

  • pod.yaml,service.yaml,secret.yaml

当我运行命令“kubectl create -f myspec”时,它会创建所有内容,pod,service和secret。

现在我希望使用kubernetes go客户端库执行相同的操作。

2 个答案:

答案 0 :(得分:1)

我相信以前的海报是要张贴此的:

1)您首先将字符串转换为字节。

2)然后将其序列化到pod。

3)然后像其他任何对象一样创建吊舱。

对于Pod,服务,ReplicationControllers,部署,ConfigMap,Secret和任何其他kubernetes API对象,可以做到这一点而不会失去一般性。

示例

func CreatePodFromYaml(podAsYaml string, ns string) error {
    var p v1.Pod
    err := json.Unmarshal([]byte(podAsYaml), &p)
    if err != nil {
        return err
    }
    pod, poderr := kubernetesConfig().CoreV1().Pods(ns).Create(&p)
    if poderr != nil {
        return poderr
    }
    fmt.Printf("Created Pod %q.\n", pod.GetObjectMeta().GetName())
    return nil
}

要编译此代码,您还需要制作kubernetesConfig对象:

func kubernetesConfig() *kubernetes.Clientset {
    config, err := clientcmd.BuildConfigFromFlags("", "/$HOME/.kube/config")
    if err != nil {
        fmt.Println(err.Error())
    }
    clientset, err := kubernetes.NewForConfig(config)

    if err != nil {
        fmt.Println(err.Error())
    }
    return clientset
}

答案 1 :(得分:-1)

我可以使用kubernetes go客户端库创建pod, 我将json文件和命名空间名称传递给函数,并将其unmarhshal传递给v1.Pod对象并调用create函数,如下所示

func createPod(b []byte, ns string) {

  var p v1.Pod.Name
  err := json.Unmarshal(b, &p)
  if err != nil {

  }
  pod, poderr := kubernetesConfig().CoreV1().Pods(ns).Create(&p)
  pod.
  if poderr != nil {
    fmt.Println(poderr.Error())
  } else {
    fmt.Printf("Created Pod %q.\n", pod.GetObjectMeta().GetName())
  }
}

func kubernetesConfig() *kubernetes.Clientset {
config, err := clientcmd.BuildConfigFromFlags("", "/$HOME/.kube/config")
if err != nil {
fmt.Println(err.Error())
}
clientset, err := kubernetes.NewForConfig(config)

if err != nil {
fmt.Println(err.Error())
}
return clientset
}