我不确定标题是否是正确的术语。.但是我基本上想使用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部署。create(obj)创建该部署)。
如果我想创建一个kubectl有效资源,我 可以 创建一个遵循该类型的自定义结构,然后手动填写值。
有什么办法可以自动执行此操作?或当前有一些辅助功能?
本质上,我想将v1.Deployment结构转换为通用的kubectl yaml资源。
答案 0 :(得分:0)
我认为,您只需将struct
编组并获得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))
}
希望会有所帮助。
答案 1 :(得分:0)
以下是我使用类似kubectl的结构将对象编码为json的方法。如下所示,这是专门针对CoreV1中的对象的,但是您可以使用所使用的方案轻松注册其他api。
scheme := runtime.NewScheme()
corev1.AddToScheme(scheme)
codec := serializer.NewCodecFactory(scheme).LegacyCodec(corev1.SchemeGroupVersion)
output, _ := runtime.Encode(codec, stripped)