小编Sim*_*mon的帖子

在单个 YAML 文件中使用多个类型直接针对 Kubernetes API 使用 client-go to `kubectl apply`

我正在使用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/序列化器 …

go kubernetes kubernetes-apiserver client-go

15
推荐指数
1
解决办法
3469
查看次数

标签 统计

client-go ×1

go ×1

kubernetes ×1

kubernetes-apiserver ×1