繁体   English   中英

Kubernetes合并已删除的作业和新的作业

[英]Kubernetes merges deleted job and new job

我具有将文件上传到存储桶时触发的google cloud功能。 该函数连接到kubernetes集群(使用此库 ),删除给定名称空间中与标签purpose: 'address-migration'匹配的所有现有作业,并创建一个新作业。

更具体地说,这是我的代码:

const jobsListResponse = await clientInstance.api.batch.v1.jobs.get();
const foundJob = jobsListResponse.body.items.find(job => (
    job.metadata.namespace === 'microservice' &&
    job.metadata.labels && job.metadata.labels['purpose'] === 'address-migration'
));

if (foundJob !== undefined) {
    const deleteResponse = await clientInstance.api.batch.v1.namespace('microservice').job(foundJob.metadata.name).delete();
    console.log('Deleted old job', deleteResponse);
}
const jobManifest = require('./jobManifest.json');
jobManifest.metadata.name += (new Date()).getTime().toString();
jobManifest.spec.template.spec.containers[0].env.push({
    name: 'DP',
    value: targetLink
});
const createJobResponse = await clientInstance.api.batch.v1.namespace('microservice').jobs.post({body: jobManifest});
console.log('Created new job', createJobResponse);

当函数第一次执行且之前没有任何作业时,它创建了函数并成功运行。

但是,当第二次触发该功能时,旧作业似乎与新作业合并

现在,新作业的名称address-migration-${timestamp} 但是它是address-migration-15361359838821536136672927 由于奇怪的原因,新时间戳被附加到现有名称(包括旧时间戳)上。

还将新的环境变量也合并到其中。 现在,清单中有两个DP条目:

- name: DP
  value: gs://dpdat/dp2.dat
- name: DP
  value: gs://dpdat/dp3.dat

毕竟,我刚刚删除的作业似乎与之后直接创建的作业合并了。

我的错。 谷歌云功能是有状态的。 我以为过去每个请求一次都会像php一样使节点启动。 不,我对require('./ jobManifest.json')的更改在内存中是有状态的。 一旦函数“冷却”(一段时间内没有执行),节点也会退出,并导致状态重置。 解释为什么它有时有效,有时却无效。

结论:在给定的时间范围内,Google云功能保持温暖。 内存中的更改可能还会继续存在,以适应以下请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM