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 следующих варианта.
- Всегда создавайте новое задание с уникальным именем, поэтому оно оставляет старые задания и создает новое - каждый раз, когда вы включаете версию изображения, было бы разумно.
- Автоматическая очистка заданий (дополнительную информацию см. здесь) - Свойство задания
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».