我有一个名为“myspec”的文件夹,其中包含一些 kube-spec 文件,比如说
- pod.yaml、service.yaml、secret.yaml
当我运行命令“kubectl create -f myspec”时,它会创建所有内容、pod、service 和 secret。
现在我希望使用 kubernetes go 客户端库执行相同的操作。
我有一个名为“myspec”的文件夹,其中包含一些 kube-spec 文件,比如说
当我运行命令“kubectl create -f myspec”时,它会创建所有内容、pod、service 和 secret。
现在我希望使用 kubernetes go 客户端库执行相同的操作。
我相信之前的海报是为了发布这个:
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
}
我能够使用 kubernetes go 客户端库创建 pod,我将 json 文件和命名空间名称传递给函数,并将它解组到 v1.Pod 对象并调用如下创建函数
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
}