Как реализовать `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
}