0

我一直在使用 kubebuilder 编写自定义控制器,并且知道它提供的 Get()、Update()、Delete() 方法。但现在我正在寻找一种模仿kubectl rollout restart deployment. 如果没有这样的直接方法,那么我正在寻找正确的方法来模仿。

type CustomReconciler struct {
    client.Client
    Log    logr.Logger
    Scheme *runtime.Scheme
}

func (r *CustomReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
    configMap := &v1.ConfigMap{}
    err = r.Get(ctx, req.namespacedName, configMap)
    if err != nil {
        logger.Error(err, "Failed to GET configMap")
        return ctrl.Result{}, err
}

说在上面的代码中,我从 configmap 中读取了一个部署名称,然后 rollout 重新启动,如下所示:

    val := configMap.Data["config.yml"]
    config := Config{}
    if err := yaml.Unmarshal([]byte(val), &config); err != nil {
        logger.Error(err, "failed to unmarshal config data")
        return ctrl.Result{}, err
    }

    // Need equivalent of following
    // r.RolloutRestart(config.DeploymentName)
4

1 回答 1

1

在您希望复制kubectl行为的所有情况下,答案始终是增加其详细程度,它会准确地向您展示 - 有时甚至是有线有效负载 - 它正在做什么。

对于推出重启,人们会发现它只是在 Deployment/StatefulSet/whatever 上碰撞了一个注释,这会导致外部对象“不同”并触发协调运行

你可以蹲在他们的注释上,或者你可以自己编,或者你可以使用标签更改——几乎任何“无意义”的更改都可以

于 2022-02-10T17:01:12.373 回答