当我更新节点或使用client-go部署时,我偶尔会收到这样的错误"对象已被修改"



我偶尔会遇到这样的错误"对象已修改;请将您的更改应用于最新版本,然后在我更新节点或使用client-go时重试。我的目标是在一个节点/部署中增加了污点/耐受性和标签。

有人说应该使用

err = retry.RetryOnConflict(retry.DefaultBackoff, func() error {})

,但似乎不起作用。

func AddFaultToleration(deploy *appsv1.Deployment, ns string, client kubernetes.Interface) (*appsv1.Deployment, error) {
    updateDeploy, err := client.AppsV1().Deployments(ns).Get(deploy.Name, metav1.GetOptions{})
    if updateDeploy == nil || err != nil {
        return deploy, fmt.Errorf("Failed to get latest version of Deployment: %v", err)
    }
    effect := apiv1.TaintEffectNoExecute
    updateDeploy.Spec.Template.Spec.Tolerations = append(updateDeploy.Spec.Template.Spec.Tolerations, apiv1.Toleration{
        Key:      ToBeFaultTaintKey,
        Value:    ToBeFaultTaintValue,
        Effect:   effect,
        Operator: apiv1.TolerationOpEqual,
    })
    updatedDeployWithTolera, err := client.AppsV1().Deployments(ns).Update(updateDeploy)
    if err != nil || updatedDeployWithTolera == nil {
        return deploy, fmt.Errorf("failed to update deploy %v after adding toleration: %v", deploy.Name, err)
    }
    log.Info("Successfully added toleration on pod:", updatedDeployWithTolera.Name)
    return updatedDeployWithTolera, nil
}

我解决了问题。原因是冲突错误被

所掩盖
updatedDeployWithTolera, err := client.AppsV1().Deployments(ns).Update(updateDeploy) if err != nil || updatedDeployWithTolera == nil { return deploy, fmt.Errorf("failed to update deploy %v after adding toleration: %v", deploy.Name, err)}

,因此retry.RetryonConflict的功能不起作用。

相关内容

最新更新