【发布时间】:2018-11-01 20:39:37
【问题描述】:
我按照https://github.com/kubernetes/sample-controller 的示例创建了一个 Kubernetes CRD。
我的控制器工作正常,我可以监听 CRD 的创建/更新/删除事件。直到我尝试使用 go-client 接口创建一个对象。
这是我的 CRD。
type MyEndpoint struct {
metav1.TypeMeta `json:",inline"`
// Standard object's metadata.
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
// +optional
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
}
我可以毫无问题地使用 kubectl 创建 CRD 定义和创建对象。但是当我使用以下代码创建对象时失败了。
myepDeploy := &crdv1.MyEndpoint{
TypeMeta: metav1.TypeMeta{
Kind: "MyEndpoint",
APIVersion: "mydom.k8s.io/v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: podName,
Labels: map[string]string{
"serviceName": serviceName,
"nodeIP": nodeName,
"port": "5000"
},
},
}
epClient := myclientset.MycontrollerV1().MyEndpoints("default")
epClient.Create(myepDeploy)
但我收到以下错误:
object *v1.MyEndpoint does not implement the protobuf marshalling interface and cannot be encoded to a protobuf message
我看看其他标准类型,我不知道他们是否实现了这样的接口。我在谷歌上搜索,但没有得到任何运气。
有什么想法吗?请帮忙。顺便说一句,我在 minikube 上运行。
【问题讨论】:
标签: kubernetes