将 Kubernetes YAML 文件反序列化为 Go 结构体是开发与 Kubernetes API 交互的程序时的一项常见任务。操作方法如下:
问题:
当尝试将 Kubernetes YAML 文件反序列化为 Go 结构时,您可能会遇到错误,指出“no kind '您的种类'已注册版本'您的版本'”。这是因为 Kubernetes schema 不会自动注册。
解决方案:
要解决此问题,请导入适合您的 Kubernetes API 组和版本的安装包与. 一起工作。例如,对于应用程序 v1beta1,使用:
_ "k8s.io/client-go/pkg/apis/extensions/install"
对于其他资源,例如 v1 中的服务,从 pkg/api 导入安装包:
_ "k8s.io/client-go/pkg/api/install"
示例代码:
这是一个完整的工作 Go 程序示例,它反序列化代表部署的 Kubernetes YAML 文件:
package main
import (
"fmt"
"k8s.io/client-go/pkg/api"
_ "k8s.io/client-go/pkg/apis/extensions/install" // Important import
)
func main() {
decode := api.Codecs.UniversalDeserializer().Decode
deployment := `
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
`
obj, _, err := decode([]byte(deployment), nil, nil)
if err != nil {
fmt.Printf("%#v", err)
}
fmt.Printf("%#v\n", obj)
}
通过导入正确的安装包,您可以成功反序列化 Kubernetes将 YAML 文件转换为 Go 结构。
以上是将 Kubernetes YAML 文件反序列化为 Go Struct 时如何解决'No Kind Registered”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!