我正在使用k8s作业系统来运行有状态作业,它需要保持与DB的同步状态。 但是,当节点执行自动升级或重新安排Pod时,会在完成一个删除操作之前立即创建新Pod。 删除完成意味着在正常关闭时间内完成所有清理。
我尝试将.spec.strategy ==“ Recreate”改为使用Deployment,但它似乎仅适用于更新映像,不适用于Pod强制删除。
这是我用来测试k8s行为的代码。
process.on('SIGTERM', () => {
console.log('Got SIGTERM!');
setTimeout(() => {
console.log('really exit');
process.exit(0);
}, 20 * 1000);
setInterval(() => {
console.log('still alive!', 100);
})
});
setInterval(() => {
console.log('alive')
}, 5000);
还有yaml文件
apiVersion: batch/v1
kind: Job
metadata:
name: testjob
spec:
template:
spec:
containers:
- name: testjob
image: mybuiltimage
imagePullPolicy: Always
restartPolicy: Never
backoffLimit: 2
删除由Job控制器创建的Pod并运行kubectl get pod可以同时显示两个(新旧的)运行:一个是终端,另一个处于运行状态。
testjob-f88449f78-k2spt 1/1 Terminating 0 2m
testjob-f88449f78-rwnwn 1/1 Running 0 14s
如何在创建新的Pod控制器之前确保删除已完成?