Helm:升级失败:无法修补..与种类作业,通过更新字段图像



我正在尝试部署更新。安装工作正常,但当我为Job更改yaml文件中的图像字段并尝试滚动更新时,会发生错误。

错误:升级失败:无法用类型job:job.batch修补"dev1测试数据库迁移作业":spec.template:无效值:core。PodTemplateSpec{ObjectMeta:v1.ObjectMeta{名称:",GenerateName:",命名空间:"、SelfLink:"、UID:"、ResourceVersion:";生成:0,创建时间戳:v1.Time{时间:时间。时间{wall:0x0,ext:0,loc:(*Time.Location)(nil)}},删除时间戳:(*v1.Time)(nir),删除GracePeriodSeconds:(*int64)(nil),标签:map[string]string{"controller uid":"e60854c6-9a57-413c-8f19-175a755c9852","作业名称":"dev1 test db migrate job","target app":"db migrate","目标域":"dev1…","target service":"test"},注释:map[sString]string(nil),OwnerReferences:[]v1.OwnerReference(nil,Spec:core.PodSpec{Volumes:[]core.Volume(nil),InitContains:[]core.Container(nil,Args:[]string{"java-jar./db/likibase.jar--logLevel=debug--classpath=./db/mariadb-java-client-2.5.3.jar--driver=org.maridb.jdbc.driver--changeLogFile=./db/changelog-insurance.xml--url=$db_HOST--用户名=$db_USER--密码=$db_password update"},WorkingDir:",端口:[]core.ContainerPort(nil),EnvFrom:[]core.EvFromSource{core.EvfromSource{Prefix:",ConfigMapRef:(*core.ConfigMapEnvSource)(nil),SecretRef:(*core.SecretEnvSource:)(0xc01a48c8a0)}},Env:[]core.evVar(nil"},"memory":resource。数量{i:resource.int64Amount{value:268435456,小数位数:0},d:resource.infDecAmount{Dec:(*inf.Dec)(nil:134217728,比例尺:0},d:resource.infDecAmount{Dec:(*inf.Dec)(nil)},s:",格式:"BinarySI"}},VolumeMounts:[]core.VolumeMount(nil,SecurityContext:(*core.SecurityContext)(nil),Stdin:false,StdinOnce:false,TTY:false}},EphemeralContainers:[]core.EphemeralContainer(nil,SecurityContext:(*core.PodSecurityContext)(0xc010460000,抢占策略:(*core.PreemptionPolicy)(nil),DNSConfig:(*core.PodDNSConfig)

我仍然不明白哪个字段应该是不可变的,可能是Image,但这很奇怪,我可以嵌入Image。

当我将字段"图像"从…更改时发生错误:保险-主-682至…:保险-主-681,例如

每次安装或更新图表文件时,我都会更改版本字段。那么,有人遇到过这种情况吗?而我认为唯一的出路是应用"kubectl删除作业…"在更新之前

"templets"目录中yamls的一部分:

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

需要删除现有作业,因为作业中的模板部分是不可变的或不可更新的。因此您有以下两个选项。

  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测试数据库迁移作业";。

相关内容

  • 没有找到相关文章

最新更新