首頁 >後端開發 >Golang >如何將 Kubernetes YAML 檔案反序列化為 Go Structs:為什麼會收到錯誤「no kind \'Deployment\' is Registered for version \'apps/v1beta1\'\」?

如何將 Kubernetes YAML 檔案反序列化為 Go Structs:為什麼會收到錯誤「no kind \'Deployment\' is Registered for version \'apps/v1beta1\'\」?

DDD
DDD原創
2024-10-31 16:20:37370瀏覽

How to Deserialize Kubernetes YAML Files into Go Structs: Why Do I Get the Error

在Go 中反序列化Kubernetes YAML 文件

問題:

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn