如何反序列化Kubernetes YAML文件

如何将Kubernetes YAML文件反序列化为Go结构?我看了一下kubectl代码,但不知何故我收到了每个YAML文件的错误:

no kind "Deployment" is registered for version "apps/v1beta1"

这是一个MWE:

package main

import (

"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/stackoverflow

import:

- 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 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 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

回到顶部