我正在构建一个工具来从 json 创建 k8s 资源(就像 kubectl create -f 一样)。
我发现动态客户端可以做这样的事情,但是当我将它与下面的代码一起使用时,我发现很难找到给定资源的 json 的 schema.GroupVersionResource。我是不是遗漏了什么,或者获取资源的唯一方法是通过重映射器?
container := &unstructured.Unstructured{}
if err := container.UnmarshalJSON([]byte(jsonstring); err != nil {
return err
}
_, err := k8sclient.Dynamic.Resource(?).Create(ctx, container, metav1.CreateOptions{})
if err != nil {
return err
}
我知道一种解决方法是编写一些类似波纹管的代码,但我确信这不是最佳实践,而且除了 crd 之外还有太多这样的代码。
var kindResourceMap = map[string]schema.GroupVersionResource{
"Deployment": {
Group: "apps",
Version: "v1",
Resource: "deployments",
},
"ConfigMap": {
Group: "apps",
Version: "v1",
Resource: "configmaps",
},
"Job": {
Group: "batch",
Version: "v1",
Resource: "jobs",
},
"Secret": {
Group: "api",
Version: "v1",
Resource: "secrets",
},
"Service": {
Group: "api",
Version: "v1",
Resource: "services",
},
"StatefulSet": {
Group: "apps",
Version: "v1",
Resource: "statefulsets",
},
"PersistentVolume": {
Group: "api",
Version: "v1",
Resource: "persistentvolumes",
},
"CustomResourceDefinition": {
Group: "apiextensions.k8s.io",
Version: "v1beta1",
Resource: "customresourcedefinitions",
},
}