Иногда я получаю такую ​​ошибку «объект был изменен» при обновлении узла или развертывании с помощью client-go - PullRequest
0 голосов
/ 07 июля 2019

Иногда я получаю такую ​​ошибку: «объект был изменен; пожалуйста, примените ваши изменения к последней версии и повторите попытку», когда я обновляю узел или выполняю развертывание с помощью 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
}

1 Ответ

0 голосов
/ 21 июля 2019

Я решил проблему.причина в том, что ошибка конфликта скрывается

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 не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...