Kubernetes: 自定义资源的 UpdateStatus() 不起作用

创建于 2017-10-27  ·  1评论  ·  资料来源: kubernetes/kubernetes

/种类错误
/sig api 机器
@kubernetes/sig-api-machinery-bugs

发生了什么
我的自定义资源类型有一个状态字段。 我已经使用 genclient 为它生成了客户端。
这是我的 CRD 类型的定义:

// +genclient
// +k8s:openapi-gen=true
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

type Recovery struct {
    metav1.TypeMeta   `json:",inline,omitempty"`
    metav1.ObjectMeta `json:"metadata,omitempty"`
    Spec              RecoverySpec   `json:"spec,omitempty"`
    Status            RecoveryStatus `json:"status,omitempty"`
}

生成的 UpdateStatus() 函数:

// UpdateStatus was generated because the type contains a Status member.
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().

func (c *recoveries) UpdateStatus(recovery *v1alpha1.Recovery) (result *v1alpha1.Recovery, err error) {
    result = &v1alpha1.Recovery{}
    err = c.client.Put().
        Namespace(c.ns).
        Resource("recoveries").
        Name(recovery.Name).
        SubResource("status").
        Body(recovery).
        Do().
        Into(result)
    return
}

现在,当我为恢复对象 (stash-mduabx) 调用 UpdateStatus() 时,它会出现以下错误:

the server could not find the requested resource (put recoveries.stash.appscode.com stash-mduabx)

以及api调用的日志:

PUT https://192.168.99.100:8443/apis/stash.appscode.com/v1alpha1/namespaces/test-stash/recoveries/stash-mduabx/status 404 Not Found in 11 milliseconds

你期望发生的事情
它应该更新状态字段。

如何重现它
使用状态字段定义 CRD 类型并使用 genclient 为其生成客户端。 使用 kubectl 创建该类型的对象。 现在从 go 程序中获取对象并为该对象调用 UpdateStatus()。

环境:

  • Kubernetes 版本:1.7.5
arecustom-resources kinbug siapi-machinery

最有用的评论

客户端生成一个状态方法,因为有一个状态字段,但这并不意味着服务器支持该方法。

https://github.com/kubernetes/community/pull/913是一项为 CRD 对象添加状态子资源的服务器支持的提案。

>所有评论

客户端生成一个状态方法,因为有一个状态字段,但这并不意味着服务器支持该方法。

https://github.com/kubernetes/community/pull/913是一项为 CRD 对象添加状态子资源的服务器支持的提案。

此页面是否有帮助?
0 / 5 - 0 等级