Оператор Kubernetes в Go - как обновить текущий образ?

Я пытаюсь создать оператор Nginx, который позволяет вам изменять версию извлекаемого изображения. Прямо сейчас у меня есть рабочий оператор, который позволяет менять реплики. Я попытался добавить код (как показано ниже), чтобы попытаться обновить модули, когда изображение изменяется в файле Kind yaml.

Развертывание генерируется и не включено в приведенный ниже код. Я установил для ImagePullPolicy значение always, но он все еще не работает.

Код для создания развертывания:

found := &appsv1.Deployment{}
err = r.Get(ctx, types.NamespacedName{Name: nginx.Name, Namespace: nginx.Namespace}, found)
if err != nil && errors.IsNotFound(err) {
    // ? Als err niet nul is, en de error is 'IsNotFound' dan maken we een nieuwe deployment
    dep := r.CreateDeployment(nginx)
    log.Info("Creating new Deployment")
    err = r.Create(ctx, dep)
    if err != nil {
        log.Error(err, "Error creating new Deployment")
        return ctrl.Result{}, err
    }
    return ctrl.Result{Requeue: true}, nil
} else if err != nil {
    log.Error(err, "Failed... Couldn't get Deployment")
    return ctrl.Result{}, err
}

Код, который я использовал, чтобы попытаться обновить текущее изображение модулей.

version := "nginx:" + nginx.Spec.Version
currentVersion := found.Spec.Template.Spec.Containers[0].Image
if currentVersion != version {
    currentVersion = version
    err = r.Update(ctx, found)
    if err != nil {
        log.Error(err, "Failed to update Version")
        return ctrl.Result{}, err
    }
    // Version Updated
    return ctrl.Result{Requeue: true}, nil
}

Я получаю следующую ошибку: она появляется, как только я запускаю Operator.

2020-10-19T15:47:31.715+0200    ERROR   controller  Reconciler error    {"reconcilerGroup": "nginx.example.com", "reconcilerKind": "Nginx", "controller": "nginx", "name": "nginx-sample", "namespace": "default", "error": "Operation cannot be fulfilled on deployments.apps \"nginx-sample\": the object has been modified; please apply your changes to the latest version and try again"}

Хотя я продолжаю получать эту ошибку, мой оператор продолжает работать. Ценю любую помощь!

0 ответов

Другие вопросы по тегам