k8s Operator SDK-如何获取实际的CRD状态

时间:2018-07-03 15:43:38

标签: controller kubernetes kubernetes-custom-resources

我希望将新规范与实际状态进行比较,以查看是否允许某些更改(例如升级)

我从etcd运算符找到了这个示例,我想知道是否还有更通用的方法来检索我的CRD(有状态集)的某些资源:

podList, err := c.config.KubeCli.Core().Pods(c.cluster.Namespace).List(k8sutil.ClusterListOpt(c.cluster.Name))

例如:https://github.com/coreos/etcd-operator/blob/534a00a970975a66b15e2ea3cd90eb6d5104c71b/pkg/cluster/cluster.go#L285

1 个答案:

答案 0 :(得分:0)

解决方案正在使用Get函数: https://github.com/operator-framework/operator-sdk/blob/master/pkg/sdk/query.go

示例(https://github.com/operator-framework/operator-sdk/blob/master/doc/design/milestone-0.0.2/query-api.md):

d := &apps_v1.Deployment{
    TypeMeta: meta_v1.TypeMeta{
        Kind:       "Deployment",
        APIVersion: "apps/v1",
    }
    ObjectMeta: metav_1.ObjectMeta{
        Name:      "example",
        Namespace: "default",
    }
}
// Get with default options
err := sdk.Get(d)
// Get with custom options 
o := &meta_v1.GetOptions{ResourceVersion: "0"}
err := sdk.Get(d, sdk.WithGetOptions(o))