Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Kubernetes合并已删除作业和新作业_Node.js_Kubernetes_Google Cloud Functions - Fatal编程技术网

Node.js 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

我有一个谷歌云功能,当一个文件被上传到一个bucket时会被触发。该函数使用连接到kubernetes群集,删除给定命名空间中与标签目的匹配的任何现有作业:“地址迁移”,并创建新作业

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

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函数在给定的时间跨度内保持温暖。内存中的更改也可能会持续到以下请求