首页 > 后端开发 > Golang > 在 Go 中反序列化 Kubernetes YAML 文件时如何解决'no kind \'Deployment\' is Registered for version \'apps/v1beta1\'\”错误?

在 Go 中反序列化 Kubernetes YAML 文件时如何解决'no kind \'Deployment\' is Registered for version \'apps/v1beta1\'\”错误?

DDD
发布: 2024-10-29 08:54:30
原创
1007 人浏览过

How to Resolve

将 Kubernetes YAML 文件反序列化为 Go 结构

将 Kubernetes YAML 文件反序列化为 Go 结构允许您以编程方式使用 Kubernetes 清单。但是,遇到诸如“没有为版本“apps/v1beta1”注册任何类型的“部署””之类的错误可能会令人沮丧。

要解决此问题,您需要导入适当的架构包以确保反序列化器已访问特定 Kubernetes 对象的类型信息。在这种情况下,对于使用“apps/v1beta1”版本的部署,您需要导入“_ k8s.io/client-go/pkg/apis/extensions/install”。

<code class="go">import _ "k8s.io/client-go/pkg/apis/extensions/install"</code>
登录后复制

一旦架构导入后,反序列化器将能够识别“部署”类型和版本,并正确反序列化 YAML 文件。更正后的代码:

<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: 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.UniversalDeserializer().Decode

    obj, _, err := decode([]byte(service), nil, nil)
    if err != nil {
        panic(err)
    }

    fmt.Printf("%#v\n", obj)
}</code>
登录后复制

此解决方案也适用于其他资源类型。例如,如果服务遇到类似错误,您可以导入“_ k8s.io/client-go/pkg/apis/core/install”。

导入适当的架构包对于成功反序列化至关重要Kubernetes YAML 文件。通过这样做,您可以确保您有权访问将 YAML 清单转换为 Go 结构所需的类型信息。

以上是在 Go 中反序列化 Kubernetes YAML 文件时如何解决'no kind \'Deployment\' is Registered for version \'apps/v1beta1\'\”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板