Node.js Kubernetes合并已删除作业和新作业
我有一个谷歌云功能,当一个文件被上传到一个bucket时会被触发。该函数使用连接到kubernetes群集,删除给定命名空间中与标签目的匹配的任何现有作业:“地址迁移”,并创建新作业 更具体地说,这是我的代码:Node.js Kubernetes合并已删除作业和新作业,node.js,kubernetes,google-cloud-functions,Node.js,Kubernetes,Google Cloud Functions,我有一个谷歌云功能,当一个文件被上传到一个bucket时会被触发。该函数使用连接到kubernetes群集,删除给定命名空间中与标签目的匹配的任何现有作业:“地址迁移”,并创建新作业 更具体地说,这是我的代码: const jobsListResponse = await clientInstance.api.batch.v1.jobs.get(); const foundJob = jobsListResponse.body.items.find(job => ( job.met
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);
当函数第一次执行时,之前没有作业,它创建了它并成功运行
但是,当第二次触发该函数时,旧作业似乎与新作业合并
新作业现在应该有一个类似地址迁移的名称-${timestamp}。但它是address-migration-15361359838821536136672927。由于奇怪的原因,新的时间戳被附加到包括旧时间戳在内的现有名称上
此外,还将一个新的环境变量合并到其中。现在,我的清单中有两个DP条目:
- name: DP
value: gs://dpdat/dp2.dat
- name: DP
value: gs://dpdat/dp3.dat
毕竟,我刚刚删除的作业似乎与我随后直接创建的作业合并了。我的错。谷歌云功能是有状态的。我认为它会像旧时代的php一样为每个请求启动一次节点。不,我对require./jobManifest.json的更改在内存中是有状态的。一旦函数冷却,while节点也不会退出执行,从而导致状态重置。解释了为什么它有时有效,有时无效
结论:Google clouds函数在给定的时间跨度内保持温暖。内存中的更改也可能会持续到以下请求