Как реализовать `kubectl create -f pod.yaml` с помощью клиентской библиотеки kubernetes go

У меня есть папка с именем "myspec", в которой есть несколько файлов kube-spec, скажем так

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

когда я запускаю команду "kubectl create -f myspec", она создает все, pod, service и secret.

Теперь я хочу выполнить то же самое, используя клиентскую библиотеку kubernetes go.

2 ответа

Я верю предыдущему постеру, предназначенному для публикации этого:

1) Сначала вы конвертируете строку в байты.

2) Затем сериализовать его в стручок.

3) Затем создайте стручок, как любой другой объект.

Это можно сделать без потери общности для модулей, служб, ReplicationControllers, развертываний, ConfigMaps, секретов и любых других объектов API kubernetes.

пример

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, я передаю 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
}
Другие вопросы по тегам