当前位置: 首页 > 知识库问答 >
问题:

K8s Go客户端将对象转换为kubectl资源YAML

蒙墨竹
2023-03-14

我不确定标题是否是正确的术语。。但我基本上想使用go客户端,获得符合kubectl的对象(YAML)。

即部署资源将是:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.15.4
        ports:
        - containerPort: 80

我可以通过go客户端从我的k8s群集进行部署,如下所示:

    Deployments, err := clientset.AppsV1().Deployments().List(metav1.ListOptions{})
    //and then loop through each deployment:
    for _, deploy := range Deployments.Items{
     //deploy is type v1.Deployment
    }

如果我要列表部署并保存到文件,结构是:

type Deployment struct {
    v1.TypeMeta    `json:",inline"`
    v1.ObjectMeta  `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
    Spec              DeploymentSpec    `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
    Status            DeploymentStatus  `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
}

显然与kubectl文件的预期有很大不同。

(虽然我可以使用go客户端deployment.create(obj)来创建部署)。

如果我想创建一个kubectl有效资源,我可以创建一个遵循该类型的自定义结构,然后手动填充值。

有没有办法自动做到这一点?或者一些目前存在的助手函数?

本质上我想转换v1。通用kubectl yaml资源的部署结构。

共有2个答案

宗政霄
2023-03-14

以下是我使用类似kubectl结构将对象编码为json的方法。如下所示,这是专门针对CoreV1中的对象的,但您可以轻松地用所用的方案注册其他API。

scheme := runtime.NewScheme()
corev1.AddToScheme(scheme)
codec := serializer.NewCodecFactory(scheme).LegacyCodec(corev1.SchemeGroupVersion)
output, _ := runtime.Encode(codec, stripped)
巴星华
2023-03-14

我认为,您可以简单地编组结构并获取yaml。

我使用了结构封送的“github.com/ghodss/yaml”。请把这个包括在进口中。

Deployments, err := clientset.AppsV1().Deployments().List(metav1.ListOptions{})
//and then loop through each deployment:
for _, deploy := range Deployments.Items{
    y, err := yaml.Marshal(deploy)
    if err != nil {
       panic(err)
    }
    fmt.Println("deployment print in yaml: ", string(y))
}

希望能有帮助。

 类似资料:
  • 问题内容: 我正在从一个网站获取许多页面的html源代码,我需要将其转换为json对象,并与json文档中的其他元素组合。。我在同一主题上看到了很多问题,但没有一个是有帮助的。 我的代码: 上面的代码提供了unicode类型,但是,当我将输出放入jsonLint时,它给了我无效的json错误。有人可以帮助我了解如何将完整的html转换为json对象吗? 问题答案: 将原始HTML内容转换为JSON

  • 问题内容: 我有一个JSON对象,我将其转换为并在此处进行一些处理。稍后,我想转换相同的缓冲区数据以转换为有效的JSON对象。 我正在研究Node V6.9.1 下面是我尝试过的代码,但是当我转换回JSON却无法打开该对象时遇到了。 所以我尝试使用检查方式打印整个对象 如果我尝试像数组一样读取它 我也尝试解析它抛出 我需要将其视为我创建的真实对象(我的意思是像上面声明的那样)。 请帮忙.. 问题答

  • 问题内容: 我知道GWT具有良好的RPC支持。但是出于各种目的,我需要自己构建: 1.)我该如何转换Bean对象(在客户端),如; 用GWT转换成JSON字符串?(理想情况下,仅使用GWT / Google正式提供的库)。 2.)其次,如何使用任何GWT客户端Logik将此生成的JSON字符串从客户端发送到任何服务器。(理想情况下,仅使用GWT / Google正式提供的库)。 我进行了很多搜索,

  • 我正试图将下面的json转换成java bean,需要你的帮助 Sort.json 我的豆子看起来像 我的测试课是 我看到的错误是 请建议:

  • 例如:Date值为:“dateCollected”:fri Jul 07 00:00:00 IST 1989, 但它只服用星期五而不是整个日期。

  • 问题内容: 我正在将struts2用于Action,将jquery用于UI … 我想知道如何将Map对象转换为JSON对象并将其发送回UI, 现在可以在JSP页面中将其打印为普通的Java Map对象: 但我希望它是这样的: 我将如何实现这一目标…? 问题答案: 尝试Gson: 不过,我不建议将这种代码放入JSP。诸如此类的事情应该存在于Servlet或Action类之类的控制器中。 您还绝对不希