登录
首页 >  Golang >  Go问答

如何使用 Go 程序操作 Kubernetes 自定义资源?

来源:stackoverflow

时间:2024-02-28 22:18:25 124浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《如何使用 Go 程序操作 Kubernetes 自定义资源?》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

我正在寻找与以下内容等效的 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 库。

各种供应商都有用于其自定义资源的客户端库。

但是我需要获取/更新没有公开可用的客户端库的资源类型。今天,该逻辑已在 bash 脚本中实现,我正在尝试将该功能移至 go 控制器。

似乎 go 中应该有一种简单的方法来完成与 kubectl 相同的操作。

谢谢,保罗


解决方案


对于任何类型,包括您的 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。

理论要掌握,实操不能落!以上关于《如何使用 Go 程序操作 Kubernetes 自定义资源?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>