开发者社区> 问答> 正文

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

k8s小能手 2018-12-14 14:59:53 562

我不确定标题是否是正确的术语。但我基本上想要使用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资源。

JSON Kubernetes 应用服务中间件 Go nginx 数据格式 容器
分享到
取消 提交回答
全部回答(1)
  • k8s小能手
    2019-07-17 23:20:58

    你可以简单地制造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))

    }

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程