开发者社区> 问答> 正文

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

我不确定标题是否是正确的术语。但我基本上想要使用go-client并获得符合kubectl的对象(yamls)。

即部署资源将是:

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-client从我的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-client deployment.create(obj)来创建该部署)。

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

有没有办法自动完成?或者目前有哪些辅助功能?

本质上我想将v1.Deployment结构转换为通用kubectl yaml资源。

展开
收起
k8s小能手 2018-12-14 14:59:53 5297 0
2 条回答
写回答
取消 提交回答
  • 可以看看这个:http://zhgolang.com/archives/k8sgo%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%B0%86%E5%AF%B9%E8%B1%A1%E8%BD%AC%E6%8D%A2%E4%B8%BAkubectl%E8%B5%84%E6%BA%90yamls

    2022-11-11 17:39:14
    赞同 展开评论 打赏
  • 整合最优质的专家资源和技术资料,问答解疑

    你可以简单地制造struct并获得yaml。

    我用于"github.com/ghodss/yaml"struct marshaling。请在导入中包含此内容。

    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))

    }

    2019-07-17 23:20:58
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
ACK 云原生弹性方案—云原生时代的加速器 立即下载
ACK集群类型选择最佳实践 立即下载
企业运维之云原生和Kubernetes 实战 立即下载

相关镜像