如何使用kubernetes go客户端库实现'kubectl create-f pod.yaml'
我有一个名为“myspec”的文件夹,其中有一些kube规范文件如何使用kubernetes go客户端库实现'kubectl create-f pod.yaml',kubernetes,kubernetes-go-client,Kubernetes,Kubernetes Go Client,我有一个名为“myspec”的文件夹,其中有一些kube规范文件 pod.yaml,service.yaml,secret.yaml 当我运行命令“kubectl create-f myspec”时,它会创建所有内容,pod、服务和秘密 现在,我希望使用kubernetes go客户端库执行相同的操作。我能够使用kubernetes go客户端库创建pod, 我将json文件和名称空间名称传递给函数,并将其解组到v1.Pod对象,然后调用create函数,如下所示 func createPo
- pod.yaml,service.yaml,secret.yaml
现在,我希望使用kubernetes go客户端库执行相同的操作。我能够使用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
}
我相信上一张海报的意思是: 1) 首先将字符串转换为字节 2) 然后将其序列化为一个pod 3) 然后像创建任何其他对象一样创建pod 对于POD、服务、ReplicationController、部署、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
}
我正在尝试将pod json解组到一个对象,以便将对象(*v1.pod)传递给函数clientset.CoreV1().Pods(“默认”)。Create(*v1.pod)还有其他方法可以实现这一点吗?