【问题标题】:Helm: UPGRADE FAILED: cannot patch ... with kind Job, by update field imageHelm:升级失败:无法通过更新字段图像修补 ...
【发布时间】:2020-05-07 09:33:25
【问题描述】:

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

错误:升级失败:无法使用种类作业修补“dev1-test-db-migrate-job”:Job.batch “dev1-test-db-migrate-job”无效:spec.template:无效值:核心.PodTemplateSpec{ObjectMeta:v1.ObjectMeta{Name:"", GenerateName:"", Namespace:"", SelfLink:"", UID:"", ResourceVersion:"", Generation:0, CreationTimestamp:v1.Time{Time :time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*v1.Time)(nil), DeletionGracePeriodSeconds:(*int64)(nil), 标签:map[string]string{"controller-uid":"e60854c6-9a57-413c-8f19-175a755c9852", "job-name":"dev1-test-db-migrate-job", "target-app":" db-migrate", "target-domain":"dev1...", "target-service":"test"}, Annotations:map[string]string(nil), OwnerReferences:[]v1.OwnerReference(nil) , Finalizers:[]string(nil), ClusterName:"", ManagedFields:[]v1.ManagedFieldsEntry(nil)}, Spec:core.PodSpec{Volumes:[]core.Volume(nil), InitContainers:[]core。容器(无),容器:[]core.Container{core.Container{名称:“app”,图像:“...:insurance-master-68 2", 命令:[]string{"/bin/sh", "-c"}, Args:[]string{"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:"", Ports:[]core.ContainerPort(nil), EnvFrom:[]core.EnvFromSource{core.EnvFromSource{Prefix:"", ConfigMapRef:(*core.ConfigMapEnvSource) (nil), SecretRef:(*core.SecretEnvSource)(0xc01a48c8a0)}}, Env:[]core.EnvVar(nil), Resources:core.ResourceRequirements{Limits:core.ResourceList{"cpu":resource.Quantity{i :resource.int64Amount{value:200, scale:-3}, d:resource.infDecAmount{Dec:(*inf.Dec)(nil)}, s:"200m", Format:"DecimalSI"}, "memory" :resource.Quantity{i:resource.int64Amount{value:268435456, scale:0}, d:resource.infDecAmount{Dec:(*inf.Dec)(nil)}, s:"", Format:"BinarySI"} }, Requests:core.ResourceList{"cpu":resource.Quantity{i:resource.int64Amount{value:100, scale:-3}, d:resource.infDecAmount{D ec:(*inf.Dec)(nil)}, s:"100m", Format:"DecimalSI"}, "memory":resource.Quantity{i:resource.int64Amount{value:134217728, scale:0}, d :resource.infDecAmount{Dec:(*inf.Dec)(nil)}, s:"", Format:"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:"Never", TerminationGracePeriodSeconds:(*int64)(0xc014591f78), ActiveDeadlineSeconds:(*int64)(nil), DNSPolicy:"ClusterFirst", NodeSelector:map[string] string(nil), ServiceAccountName:"", AutomountServiceAccountToken:(*bool)(nil), NodeName:"", SecurityContext:(*core.PodSecurityContext)(0xc010460000), ImagePullSecrets :[]core.LocalObjectReference{core.LocalObjectReference{Name:"artifactory-tradeplace-registry"}}, Hostname:"", Subdomain:"", Affinity:(*core.Affinity)(nil), SchedulerName:"default- scheduler", Tolerations:[]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)}}: 字段是不可变的

我还是没明白哪个字段应该是不可变的,可能是Image,不过很奇怪,能嵌入Image是有道理的。

例如,当我将字段图像从 ...: insurance-master-682 更改为 ...: insurance-master-681 时发生错误

我每次安装或更新时都会更改图表文件,我会更改版本字段。 那么,有人遇到过这种情况吗? 虽然我看到唯一的出路是在更新之前应用“kubectl delete job ...”

'templetes' 目录中的 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

【问题讨论】:

  • 没错。您无法更改 Job 的图像。
  • @suren 哦,很遗憾,但是谢谢
  • 当我更改了 values.yaml 中的 Image 和一些 Env 变量时,我注意到了同样的错误。不知何故 helm upgrade --install 无法应用更改,只需要全新安装。

标签: kubernetes-helm helmfile


【解决方案1】:

您需要删除现有作业并重新运行。可能无法重新运行相同的作业。问题似乎是工作名称。当我尝试使用相同的名称进行升级时,我确实看到了类似的情况,例如:“dev1-test-db-migrate-job”。

【讨论】:

    【解决方案2】:

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

    1. 始终创建一个具有唯一名称的新作业,因此它会留下旧作业并创建一个新作业 - 每次都包含图像版本是明智的。
    2. 自动清理作业(更多信息check here) - 作业属性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
    

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 2023-03-08
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      • 2021-04-02
      • 1970-01-01
      相关资源
      最近更新 更多