問題:
將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中文網其他相關文章!