如何反序列化Kubernetes YAML文件
如何将Kubernetes YAML文件反序列化为Go结构?我看了一下kubectl
代码,但不知何故我收到了每个YAML文件的错误:
no kind "Deployment" is registered for version "apps/v1beta1"
这是一个MWE:
package mainimport (
"fmt"
"k8s.io/client-go/pkg/api"
)
var service = `
apiVersion: apps/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.UniversalDecoder().Decode
//decode := api.Codecs.UniversalDeserializer().Decode
obj, _, err := decode([]byte(service), nil, nil)
if err != nil {
panic(err)
}
fmt.Printf("%#v\n", obj)
}
我正在使用客户端版本2.0.0
。该glide.yaml
如下所示:
package: test/stackoverflowimport:
- package: k8s.io/client-go
version: ^2.0.0
这些是对以下内容的引用kubectl
:
- https://github.com/kubernetes/kubernetes/blob/43ac38e29e6ecf83e78bc7c5d9f804310b051c95/pkg/kubectl/cmd/apply.go#L637
- https://github.com/kubernetes/kubernetes/blob/43ac38e29e6ecf83e78bc7c5d9f804310b051c95/pkg/kubectl/cmd/util/factory_client_access.go#L205-L213
不幸的是,文档使我非常困惑,所以我不知道如何解决这个问题。
其他资源类型也存在此问题:
no kind "Service" is registered for version "v1"
回答:
您需要导入,_ "k8s.io/client-
go/pkg/apis/extensions/install"否则架构为空,另请参阅docs。
完整的工作示例是:
$ go get -u github.com/golang/dep/cmd/dep$ dep init
$ go run main.go
具有以下内容main.go
:
package mainimport (
"fmt"
"k8s.io/client-go/pkg/api"
_ "k8s.io/client-go/pkg/api/install"
_ "k8s.io/client-go/pkg/apis/extensions/install"
)
var 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
`
func main() {
// decode := api.Codecs.UniversalDecoder().Decode
decode := api.Codecs.UniversalDeserializer().Decode
obj, _, err := decode([]byte(deployment), nil, nil)
if err != nil {
fmt.Printf("%#v", err)
}
fmt.Printf("%#v\n", obj)
}
请注意,我也_ "k8s.io/client-
go/pkg/api/install"为您导入了内容,以便您可以使用v1
诸如Pod或Services之类的对象。
编辑:对我的同事斯特凡·斯基曼斯基(Stefan
Schimanski)提出了最初的解决方案表示感谢。
以上是 如何反序列化Kubernetes YAML文件 的全部内容, 来源链接: utcz.com/qa/405785.html