Kubernetes K8s Go客户端将对象转换为kubectl资源YAML
我不确定标题是否是正确的术语。但我基本上希望使用go客户端并获得符合kubectl的对象(YAML) i、 e部署资源将是:Kubernetes K8s Go客户端将对象转换为kubectl资源YAML,kubernetes,kubectl,kubernetes-go-client,Kubernetes,Kubectl,Kubernetes Go Client,我不确定标题是否是正确的术语。但我基本上希望使用go客户端并获得符合kubectl的对象(YAML) i、 e部署资源将是: apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata
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 client deployment.create(obj)来创建部署)
如果我想创建kubectl有效资源,我可以创建一个符合该类型的自定义结构,然后手动填充值
有没有什么方法可以自动做到这一点?或者当前存在的一些帮助器函数
本质上,我希望将v1.Deployment结构转换为通用的kubectl yaml资源。我认为,您可以简单地封送
结构并获取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))
}
希望能有所帮助。以下是我使用类似kubectl结构将对象编码为json的方法。如下所示,这是专门针对CoreV1中的对象的,但是您可以很容易地用所使用的方案注册其他API
scheme := runtime.NewScheme()
corev1.AddToScheme(scheme)
codec := serializer.NewCodecFactory(scheme).LegacyCodec(corev1.SchemeGroupVersion)
output, _ := runtime.Encode(codec, stripped)
嘿@abu不幸的是,这不起作用,因为封送部署会将其封送到v1.Deployment,而v1.Deployment不是有效的kubectl资源