Python 尝试创建Kubernetes作业时出错
我已经定义了这个方法,它应该为我创建一个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
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
谢谢你澄清这一点,因为我现在真的明白我做错了什么!