Helm: UPGRADE FAILED: невозможно исправить ... с помощью доброго задания, путем обновления изображения поля

Пытаюсь развернуть обновления. Установка работает нормально, но когда я меняю поле изображения в yaml-файле для Job и пытаюсь накатить обновления, возникает ошибка.

Ошибка: UPGRADE FAILED: невозможно исправить "dev1-test-db-migrate-job" с помощью вида Job: Job.batch "dev1-test-db-migrate-job" недействителен: spec.template: недопустимое значение: core.PodTemplateSpec{ObjectMeta:v1.ObjectMeta{Имя:"", GenerateName:"", Пространство имен:"", SelfLink:"", UID:"", ResourceVersion:"", Генерация:0, CreationTimestamp:v1.Time{Время: время.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*v1.Time)(nil), DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[ строка] строка {"controller-uid":"e60854c6-9a57-413c-8f19-175a755c9852", "имя-задания":"dev1-test-db-migrate-job", "target-app":"db-migrate", "target-domain":"dev1...", "target-service":"test"}, аннотации:map [строка] строка (nil), OwnerReferences:[]v1.OwnerReference(nil), Finalizers:[]string(nil), ClusterName:"", ManagedFields:[]v1.ManagedFieldsEntry(nil)}, Spec:core.PodSpec{Volumes:[]core.Volume(nil), InitContainers:[]core.Container(nil), Контейнеры:[]core.Container{core.Container{Имя: "app", Изображение: "...: страхование -master-682", Команда: [] строка {"/bin/sh", "-c"}, Args:[] строка {"java -jar ./db/liquibase.jar --logLevel=debug --classpath=./db/mariadb-java-client-2.5.3.jar --driver=org.mariadb.jdbc.Driver --changeLogFile=./db/changelog-insurance.xml --url=$DB_HOST --username=$DB_USER --password=$DB_PASSWORD update"}, WorkingDir:"", Порты:[]core.ContainerPort(nil), EnvFrom:[]core.EnvFromSource{core.EnvFromSource{Prefix:"", ConfigMapRef:(*core.ConfigMapEnvSource)(ноль), SecretRef:(*core.SecretEnvSource)(0xc01a48c8a0)}}, Env:[]core.EnvVar(nil), Resources:core.ResourceRequirements{Limits:core.ResourceList{"cpu":resource.Quantity{i:resource.int64Amount{value:200, масштаб:-3}, d:resource.infDecAmount{Dec:(*inf.Dec)(nil)}, s:"200m", формат:"DecimalSI"}, "memory":resource.Quantity{i:resource.int64Amount{значение:268435456, масштаб:0}, d:resource.infDecAmount{Dec:(*inf.Dec)(nil)}, s:"", Формат:"BinarySI"}}, Запросы: core. ResourceList{"cpu":resource.Quantity{i:resource.int64Amount{значение:100, масштаб:-3}, d:resource.infDecAmount{Dec:(*inf.Dec)(nil)}, s:"100m", Формат:"DecimalSI"}, "memory":resource.Quantity{i:resource.int64Amount{value:134217728, scale:0}, d:resource.infDecAmount{Dec:(*inf.Dec)(nil)}, s:"", Формат:"BinarySI"}}}, VolumeMounts:[]core.VolumeMount(nil), VolumeDevices:[]core.VolumeDevice(nil), LivenessProbe:(*core.Probe)(nil)", ReadinessProbe:(*core.Probe)(nil), StartupProbe:(*core.Probe)(nil), Lifecycle:(*core.Lifecycle)(nil), TerminationMessagePath:"/dev/termination-log", TerminationMessagePolicy:"File", ImagePullPolicy:"IfNotPresent", SecurityContext:(*core.SecurityContext)(nil), Stdin:false, StdinOnce:false, TTY:false}}, EphemeralContainers:[]core.EphemeralContainer(nil), RestartPolicy:"Никогда", TerminationGracePeriodSeconds:(*int64)(0x78c014591), ActiveDeadlineSeconds:(*int64)(nil), DNSPolicy:"ClusterFirst", NodeSelector:map[string]string(nil), ServiceAccountName:"", AutomountServiceAccountToken:(*bool)(nil), NodeName:"", SecurityContext:(*core.PodSecurityContext)(0xc010460000), ImagePullSecrets:[]core.LocalObjectReference{core.LocalObjectReference{Имя:"artifactory-tradeplace-registry"}}, Имя хоста: "", Поддомен: "", Соответствие:(*core.Affinity)(nil), SchedulerName:"default-scheduler", Допуски:[]core.Toleration(nil), HostAliases:[]core.HostAlias ​​(nil), PriorityClassName:"", Priority:(*int32)(nil), PreemptionPolicy:(*core.PreemptionPolicy)(nil), DNSConfig:(*core.PodDNSConfig)(nil), ReadinessGates:[]core.PodReadinessGate(nil), RuntimeClassName:(*string)(nil), Overhead:core.ResourceList(nil), EnableServiceLinks:(*bool)(nil), TopologySpreadConstraints:[]core.TopologySpreadConstraint(nil)}}: поле неизменяемоИмя хоста: "", Поддомен: "", Родство: (* core.Affinity) (ноль), Имя планировщика: "default-scheduler", Допуски: [] core.Toleration (ноль), HostAliases: [] core.HostAlias ​​(ноль), PriorityClassName: "", Priority: (* int32) (nil), PreemptionPolicy: (* core.PreemptionPolicy) (nil), DNSConfig: (* core.PodDNSConfig) (nil), ReadinessGates: [] core.PodReadinessGate (nil), RuntimeClassName: (* string) (nil), Overhead: core.ResourceList (nil), EnableServiceLinks: (* bool) (nil), TopologySpreadConstraints: [] core.TopologySpreadConstraint (nil)}}: поле неизменяемоИмя хоста: "", Поддомен: "", Родство: (* core.Affinity) (ноль), Имя планировщика: "default-scheduler", Допуски: [] core.Toleration (ноль), HostAliases: [] core.HostAlias ​​(ноль), PriorityClassName: "", Priority: (* int32) (nil), PreemptionPolicy: (* core.PreemptionPolicy) (nil), DNSConfig: (* core.PodDNSConfig) (nil), ReadinessGates: [] core.PodReadinessGate (nil), RuntimeClassName: (* string) (nil), Overhead: core.ResourceList (nil), EnableServiceLinks: (* bool) (nil), TopologySpreadConstraints: [] core.TopologySpreadConstraint (nil)}}: поле неизменяемо DNSConfig: (* core.PodDNSConfig) (nil), ReadinessGates: [] core.PodReadinessGate (nil), RuntimeClassName: (* string) (nil), Overhead: core.ResourceList (nil), EnableServiceLinks: (* bool) (nil), TopologySpreadConstraints: [] core.TopologySpreadConstraint (nil)}}: поле неизменяемо DNSConfig: (* core.PodDNSConfig) (nil), ReadinessGates: [] core.PodReadinessGate (nil), RuntimeClassName: (* string) (nil), Overhead: core.ResourceList (nil), EnableServiceLinks: (* bool) (nil), TopologySpreadConstraints: [] core.TopologySpreadConstraint (nil)}}: поле неизменяемо

Я так и не понял, какое поле должно быть неизменным, возможно, Image, но это очень странно, имеет смысл встроить Image.

Ошибка возникает, когда я меняю поле Изображение с...:insurance-master-682 на...: insurance-master-681, например

Я меняю файл диаграммы каждый раз при установке или обновлении, меняю поле версии. Итак, кто-нибудь сталкивался с этим? пока я вижу, что единственный выход - применить kubectl delete job ... перед обновлением

часть ямлов в каталоге храмов:

apiVersion: batch/v1
kind: Job
metadata:
  labels:
    target-domain: dev1...
    target-service: test
  name: dev1-test-db-migrate-job
spec:
  backoffLimit: 0
  template:
    metadata:
      labels:
        target-app: db-migrate
        target-domain: dev1...
        target-service: test
    spec:
      containers:
        - args:
            - java -jar ./db/liquibase.jar --logLevel=debug --classpath=./db/mariadb-java-client-2.5.3.jar
              --driver=org.mariadb.jdbc.Driver --changeLogFile=./db/changelog-insurance.xml
              --url=$DB_HOST --username=$DB_USER --password=$DB_PASSWORD update
          command:
            - /bin/sh
            - -c
          envFrom:
            - secretRef:
                name: dev1-secret-config-deploy-for-app-gk5b59mb86
          image: ...:insurance-master-682
          imagePullPolicy: IfNotPresent
          name: app
          resources:
            limits:
              cpu: 200m
              memory: 256Mi
            requests:
              cpu: 100m
              memory: 128Mi
      imagePullSecrets:
        - name: artifactory-tradeplace-registry
      restartPolicy: Never

Пример Chart.yaml

apiVersion: v2
name: 
description: A Helm chart for Kubernetes
type: application
version: 0.1.20200505t154055
appVersion: 1.16.0

2 ответа

Существующее задание необходимо удалить, так как раздел шаблона в задании неизменяем или не подлежит обновлению. поэтому у вас есть 2 следующих варианта.

  1. Всегда создавайте новое задание с уникальным именем, поэтому оно оставляет старые задания и создает новое - каждый раз, когда вы включаете версию изображения, было бы разумно.
  2. Автоматическая очистка заданий (дополнительную информацию см. здесь) - Свойство задания ttlSecondsAfterFinishedпозволяет автоматически удалить задание по истечении указанного периода. например:
          apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi-with-ttl
    spec:
      ttlSecondsAfterFinished: 100
      template:
        spec:
          containers:
          - name: pi
            image: perl
            command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
          restartPolicy: Never

вам нужно удалить существующее задание и запустить его повторно. может быть не в состоянии повторно запустить одно и то же задание. проблема, кажется, имя работы. Я вижу подобное, когда пытаюсь выполнить обновление с тем же именем, например: «dev1-test-db-migrate-job».

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