我对golang比较新,需要一些帮助指向正确的方向。无法为Kubernetes API类型声明声明Kind类型
我试图申报一个新的Deployment
类型。
我进口的样子:
import (
"encoding/json"
"fmt"
yaml "gopkg.in/yaml.v2"
"io/ioutil"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
)
当我尝试创建一个部署对象,如:
test := v1beta1.Deployment{
Spec: v1beta1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Containers: []v1.Container{{
Name: "test",
Image: "image_url",
},
},
},
},
},
}
它的工作原理,但返回部署对象不具有Kind
这是识别物体所必需的。
根据https://github.com/kubernetes/kubernetes/blob/master/pkg/apis/extensions/types.go#L162
有一个嵌入式metav1.TypeMeta
它具有Kind
对象,我需要的。 (参考:https://github.com/kubernetes/apimachinery/blob/master/pkg/apis/meta/v1/types.go#L38)
我试图宣布在结构中的文字像metav1.TypeMeta
:
test := v1beta1.Deployment{
metav1.TypeMeta: metav1.TypeMeta{Kind: "Deployment"}
Spec: v1beta1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Containers: []v1.Container{{
Name: "test",
Image: "image_url",
},
},
},
},
},
}
但我得到一个
unknown field '"k8s.io/apimachinery/pkg/apis/meta/v1".TypeMeta' in struct literal of type v1beta1.Deployment
我怀疑这是由于metav1.TypeMeta
声明Deployment
struct是一个未导出的字段。
我该如何声明Kind?
我正在使用客户端去获取资源,并需要使用“Kind”作为一些开关决定,但Kind在检索到的对象中是空的。解决这个问题的最好方法是什么? –