Как получить / обновить пользовательский ресурс Kubernetes из программы go? - PullRequest
1 голос
/ 24 сентября 2019

Я ищу go-эквивалент:

kubectl get some-custom-resource-kind some-custom-resource -o yaml > file.yaml
Modify the yaml file...
kubectl apply -f file.yaml

У Kubernetes есть библиотека go-клиента для стандартного ресурса types.

И у разных поставщиков есть клиентбиблиотеки go для их пользовательских ресурсов .

Но мне нужно получить / обновить ресурс, у которого нет общедоступной клиентской библиотеки go.Сегодня логика реализована в скрипте bash, и я пытаюсь переместить эту функцию в контроллер go.

Похоже, что идти, чтобы сделать эквивалент kubectl, должен быть прямой путь.

Спасибо, Павел

1 Ответ

1 голос
/ 24 сентября 2019

Для любого типа, включая ваши CRD, используйте client.Client.

Из документации:

// Using a typed object.
pod := &corev1.Pod{}
// c is a created client.
_ = c.Get(context.Background(), client.ObjectKey{
    Namespace: "namespace",
    Name:      "name",
}, pod)
pod.SetFinalizers(append(pod.GetFinalizers(), "new-finalizer"))
_ = c.Update(context.Background(), pod)

// Using a unstructured object.
u := &unstructured.Unstructured{}
u.SetGroupVersionKind(schema.GroupVersionKind{
    Group:   "apps",
    Kind:    "Deployment",
    Version: "v1",
})
_ = c.Get(context.Background(), client.ObjectKey{
    Namespace: "namespace",
    Name:      "name",
}, u)
u.SetFinalizers(append(u.GetFinalizers(), "new-finalizer"))
_ = c.Update(context.Background(), u)

Вы также можете легко поменять местами SomeCustomResourceKind:

myCR := &v1alpha1.SomeCustomResourceKind{}

// c is a created client.Client
_ = c.Get(context.TODO(), client.ObjectKey{
  Namespace: "namespace",
  Name:      "some-custom-resource", }, myCR)

myCR.MyProperty = "NewValue"

_ = c.Update(context.TODO(), myCR)

Вы упомянули, что пытаетесь переместить эту функцию изbash-скрипт для контроллера Go, поэтому стоило бы проверить проект Kubebuilder , который может создать для вас контроллер (и любые дополнительные API, которые могут вам понадобиться).Он создает полнофункциональные контроллеры с клиентом времени выполнения контроллера и подключает всю логику согласования для управления вашими CRD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...