ホームページ  >  記事  >  バックエンド開発  >  Kubernetes YAML ファイルを Go 構造体に逆シリアル化する方法: 「バージョン \'apps/v1beta1\'\ には種類の \'Deployment\' が登録されていません」というエラーが表示されるのはなぜですか?

Kubernetes YAML ファイルを Go 構造体に逆シリアル化する方法: 「バージョン \'apps/v1beta1\'\ には種類の \'Deployment\' が登録されていません」というエラーが表示されるのはなぜですか?

DDD
DDDオリジナル
2024-10-31 16:20:37274ブラウズ

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 スキーマ パッケージをインポートする必要があります。これは、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 構造体に逆シリアル化する方法: 「バージョン \'apps/v1beta1\'\ には種類の \'Deployment\' が登録されていません」というエラーが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。