更改 kubernetes 作业的图像

Ric*_*rdo 8 jobs kubernetes

我正在处理 kubernetes 的清单job

apiVersion: batch/v1
kind: Job
metadata:
  name: hello-job
spec:
  template:
    spec:
      containers:
      - name: hello
        image: hello-image:latest
Run Code Online (Sandbox Code Playgroud)

然后我应用清单使用kubectl apply -f <deployment.yaml>并且作业运行没有任何问题。

当我将正在运行的容器的图像从latest其他图像更改时,问题就出现了。

那时,我field is immutable在应用清单时遇到了异常。

如果作业正在运行或已完成,我会收到相同的异常。到目前为止,我发现的唯一解决方法是在应用新清单之前手动删除作业。

如何更新当前作业而不必先手动删除它?

fat*_*ook 9

我猜您可能使用了不正确的 kubernetes 资源。Job是一个不可变的 Pod,它运行到完成,你不能更新它。根据 Kubernetes 文档..

说 Job old 已经在运行。您希望现有 Pod 继续运行,但您希望它创建的其余 Pod 使用不同的 Pod 模板,并为 Job 使用新名称。您无法更新作业,因为这些字段不可更新。因此,您可以使用 kubectl delete jobs/old --cascade=false 删除旧作业,但保持其 pod 运行。

如果您打算更新映像,您应该使用支持更新的部署或复制控制器