【问题标题】:how to implement `kubectl create -f pod.yaml` using kubernetes go client library如何使用 kubernetes go 客户端库实现`kubectl create -f pod.yaml`
【发布时间】:2018-02-27 02:03:33
【问题描述】:

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

  • pod.yaml、service.yaml、secret.yaml

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

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

【问题讨论】:

  • 我正在尝试将 pod json 解组为一个对象,以便我可以将对象 (*v1.Pod) 传递给函数 clientset.CoreV1().Pods("default").Create( *v1.Pod) 还有其他方法可以实现吗?

标签: kubernetes kubernetes-go-client


【解决方案1】:

我相信之前的海报,是为了发布这个:

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

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

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

对于 Pod、Services、ReplicationControllers、Deployments、ConfigMaps、Secrets 和任何其他 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
}

【讨论】:

    【解决方案2】:

    我可以使用 kubernetes go 客户端库创建 pod, 我将 json 文件和命名空间名称传递给函数,并将其解组到 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
    }
    

    【讨论】:

      猜你喜欢
      • 2019-04-09
      • 2020-11-05
      • 2020-06-14
      • 1970-01-01
      • 2018-07-01
      • 2015-12-09
      • 2019-02-19
      • 2021-10-14
      • 2019-10-09
      相关资源
      最近更新 更多