我正在使用https://github.com/kubernetes/client-go并且一切正常。
我有官方 Kubernetes 仪表板的清单 (YAML):https ://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
我想kubectl apply在 Go 代码中使用 client-go模仿这个清单。
我知道我需要将 YAML 字节进行一些(取消)编组到包中定义的正确 API 类型中:https : //github.com/kubernetes/api
我已经成功地将Create单个 API 类型添加到我的集群中,但是对于包含不同类型列表的清单,我该如何执行此操作?是否有kind: List*支持这些不同类型的资源?
我目前的解决方法是使用csplitwith --- 作为分隔符拆分 YAML 文件
csplit /path/to/recommended.yaml /---/ '{*}' --prefix='dashboard.' --suffix-format='%03d.yaml'
Run Code Online (Sandbox Code Playgroud)
接下来,我遍历创建的新 (14) 部分,读取它们的字节,打开 UniversalDeserializer 的解码器返回的对象类型,并使用我的 k8s 客户端集调用正确的 API 方法。
我想以编程方式执行此操作,以便将仪表板的任何新版本更新到我的集群中。我还需要为 Metrics Server 和许多其他资源执行此操作。另一种(可能更简单)方法是将我的代码与安装了 kubectl 的容器镜像一起发送并直接调用kubectl apply -f -; 但这意味着我还需要将 kube 配置写入磁盘,或者将其内联传递,以便 kubectl 可以使用它。
我发现这个问题很有帮助:https : //github.com/kubernetes/client-go/issues/193 解码器住在这里:https : //github.com/kubernetes/apimachinery/tree/master/pkg/runtime/序列化器 …