如何將Kubernetes YAML文件反序列化爲Go結構?我接過來一看進入kubectl
代碼,但不知何故,我得到一個錯誤,每YAML文件:如何反序列化Kubernetes 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
不幸的是,docs都非常混亂給我,所以我有不知道如何解決這個問題。
編輯:
這個問題也與其他資源類型的存在:
no kind "Service" is registered for version "v1"
想給Go試試嗎? https://hackernoon.com/using-go-dep-as-a-project-maintainer-641d1f3006d7 –
這與依賴管理無關。 – svenwltr
是的,我知道(因此我的回答如下),但試圖鼓勵人們轉向更具前景的替代方案;) –