Python 尝试创建Kubernetes作业时出错

Python 尝试创建Kubernetes作业时出错,python,kubernetes,yaml,Python,Kubernetes,Yaml,我已经定义了这个方法,它应该为我创建一个Kubernetes作业 def make_job(): job = client.V1Job() job.metadata = client.V1ObjectMeta() job.metadata.name = "process" job.spec = client.V1JobSpec() job.spec.template = client.V1PodTemplate() job.spec.templat

我已经定义了这个方法,它应该为我创建一个Kubernetes作业

def make_job():
    job = client.V1Job()
    job.metadata = client.V1ObjectMeta()
    job.metadata.name = "process"
    job.spec = client.V1JobSpec()
    job.spec.template = client.V1PodTemplate()
    job.spec.template.spec = client.V1PodTemplateSpec()
    job.spec.template.spec.restart_policy = "Never"
    job.spec.template.spec.containers = [
        make_container()
    ]
    return job
但是,它在此行返回一个错误

job.spec = client.V1JobSpec()

ValueError: Invalid value for `template`, must not be `None`
我想知道我在这里是否做错了什么,如果是的话,我在这里做错了什么

编辑:

我已经用这个更改解决了错误

job.spec = client.V1JobSpec(template=client.V1PodTemplate)

正如您已经了解到的,如果不注入其
模板
,就不可能构建
作业.Spec
,这是作业中的一个基本要素

.spec.template是.spec的唯一必填字段

.spec.template是一个pod模板。它的模式与 pod,但它是嵌套的,没有apiVersion或种类

查看一下
V1JobSpec
的Python Kubernetes客户端实现,可以验证
spec
属性是否标记为,与其他属性相反

因此,通过预先构建
模板
,并在构建
JobSpec
时注入模板,确实可以解决问题:

job.spec.template = client.V1PodTemplate()
job.spec.template.spec = client.V1PodTemplateSpec()
job.spec.template.spec.restart_policy = "Never"
job.spec.template.spec.containers = [
    make_container()
]

job.spec = client.V1JobSpec()
根据这一推理,同样的情况似乎并不适用于
作业
Spec
属性的更高范围,因为它是作业对象定义的一个必需部分


但是再次查看客户端的属性,可以发现
Spec
属性被标记为可选,这解释了为什么我们能够创建
作业
实例,而不必注入
Spec

谢谢你澄清这一点,因为我现在真的明白我做错了什么!