簡體   English   中英

如何從控制器運行時觸發部署資源的推出重啟

[英]How to trigger a rollout restart on deployment resource from controller-runtime

我一直在使用 kubebuilder 編寫自定義 controller,並了解它提供的 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 中讀取部署名稱並重新啟動,如下所示:

    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)

在您希望復制kubectl行為的所有情況下,答案始終是增加其冗長程度,並且它會准確地向您展示——有時甚至是連線有效載荷——它在做什么。

對於 rollout 重啟,人們會發現它只是在 Deployment/StatefulSet/whatever 上添加了一個注釋,這導致外部 object 變得“不同”,並觸發了協調運行

您可以借鑒他們的注釋,也可以自行編寫,或者您可以使用 label 更改——實際上任何“無意義”的更改都可以

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM