问题:
将 Kubernetes YAML 文件反序列化为 Go 结构体。
遇到错误:
no kind "Deployment" is registered for version "apps/v1beta1"
解决方案:
要解决该错误,您需要导入必要的 Kubernetes schema 包。这指示解码器在反序列化 YAML 时应考虑哪些类型。
导入以下包:
<code class="go">_ "k8s.io/client-go/pkg/apis/extensions/install"</code>
原因:
Kubernetes模式不会自动注册到解码器。通过导入安装包,您可以显式注册 Extensions/v1beta1 API 组的架构,其中包括部署资源类型。
完整工作示例:
<code class="go">package main import ( "fmt" "k8s.io/client-go/pkg/api" _ "k8s.io/client-go/pkg/api/install" _ "k8s.io/client-go/pkg/apis/extensions/install" ) var service = ` apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-nginx spec: replicas: 2 template: metadata: labels: run: my-nginx spec: containers: - name: my-nginx image: nginx ports: - containerPort: 80 ` func main() { decode := api.Codecs.UniversalDeserializer().Decode obj, _, err := decode([]byte(service), nil, nil) if err != nil { panic(err) } fmt.Printf("%#v\n", obj) }</code>
注意:
在更新的示例中,部署资源是使用 extensions/v1beta1 API 组定义的,这是 1.9 之前的 Kubernetes 版本中部署资源的正确 API 组。对于 Kubernetes 1.9 及更高版本,您应该使用 apps/v1 API 组。
以上是如何将 Kubernetes YAML 文件反序列化为 Go Structs:为什么会收到错误“no kind \'Deployment\' is Registered for version \'apps/v1beta1\'\”?的详细内容。更多信息请关注PHP中文网其他相关文章!