問題:
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 サイトの他の関連記事を参照してください。