Оператор 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"}
Хотя я продолжаю получать эту ошибку, мой оператор продолжает работать. Ценю любую помощь!