将 Kubernetes pod 缩放偏移一秒
offset Kubernetes pod scaling by a second
我有一个想要并行扩展的应用程序,但我希望有一种方法可以在创建每个新 pod 之间进行短暂的暂停。
我需要这个,因为在 pod 创建期间我更新了一个文件,如果在下一个 pod 尝试打开并更新它时文件没有关闭,它将失败。
所以我只需要在 pods 打开和关闭此文件之间有 1 秒的缓冲时间。
现在,如果发生缩放并添加了 1 个以上的新 pod,它们会同时命中该文件。所以一个 pod 会工作,另一个会失败,我必须等待 pod 超时让 k8s 杀死它并重新创建它,此时它会工作,但在我需要的扩展事件中浪费了很多宝贵的时间新 pods 尽快处理负载。
不确定我的搜索措辞是否正确,但无法在 k8s 网站上找到它。任何想法都会有所帮助。
(补充说明,我知道 StatefulSet
默认情况下它会一次扩展 1 个 pod,但是,该方法要求所有 pods 都健康才能继续添加一个节点一段时间,如果任何 pod 变得不健康,它将停止扩展,直到所有 pods 再次健康。在高负载情况下,这并不理想)
您需要做一些工作才能实现它。
几个“hacks/solutions”
1。初始化容器
- 向您的部署添加一个初始容器
- init 容器将 write/delete 目标文件
lock.txt
- init容器会检查这个文件是否存在,如果存在他会等到文件被删除
- 删除文件后,init 容器将退出,因此 pod 将“启动”
2。探测 'PostStart'
- 向您的 pods 添加一个
PostStart
探针,它将读取所需 pods 的当前数量与实际数量的对比,如果需要,执行一个比例
apiVersion: v1
kind: Pod
metadata:
name: lifecycle-demo
spec:
containers:
- name: ...
image: ...
lifecycle:
postStart:
exec:
command: [<get the current number of pods from the replica>
<check to see if you need to restart a new pod>
<scale a new pod if required>]
3。定时作业
- 使用 CronJob 扩展您的 pods,使用文件或配置映射来设置所需的 pods 数量。
- 应用可扩展 pods 的 Cron 作业,当您达到所需 pods 时删除
CronJob
我有一个想要并行扩展的应用程序,但我希望有一种方法可以在创建每个新 pod 之间进行短暂的暂停。
我需要这个,因为在 pod 创建期间我更新了一个文件,如果在下一个 pod 尝试打开并更新它时文件没有关闭,它将失败。
所以我只需要在 pods 打开和关闭此文件之间有 1 秒的缓冲时间。
现在,如果发生缩放并添加了 1 个以上的新 pod,它们会同时命中该文件。所以一个 pod 会工作,另一个会失败,我必须等待 pod 超时让 k8s 杀死它并重新创建它,此时它会工作,但在我需要的扩展事件中浪费了很多宝贵的时间新 pods 尽快处理负载。
不确定我的搜索措辞是否正确,但无法在 k8s 网站上找到它。任何想法都会有所帮助。
(补充说明,我知道 StatefulSet
默认情况下它会一次扩展 1 个 pod,但是,该方法要求所有 pods 都健康才能继续添加一个节点一段时间,如果任何 pod 变得不健康,它将停止扩展,直到所有 pods 再次健康。在高负载情况下,这并不理想)
您需要做一些工作才能实现它。
几个“hacks/solutions”
1。初始化容器
- 向您的部署添加一个初始容器
- init 容器将 write/delete 目标文件
lock.txt
- init容器会检查这个文件是否存在,如果存在他会等到文件被删除
- 删除文件后,init 容器将退出,因此 pod 将“启动”
2。探测 'PostStart'
- 向您的 pods 添加一个
PostStart
探针,它将读取所需 pods 的当前数量与实际数量的对比,如果需要,执行一个比例
apiVersion: v1
kind: Pod
metadata:
name: lifecycle-demo
spec:
containers:
- name: ...
image: ...
lifecycle:
postStart:
exec:
command: [<get the current number of pods from the replica>
<check to see if you need to restart a new pod>
<scale a new pod if required>]
3。定时作业
- 使用 CronJob 扩展您的 pods,使用文件或配置映射来设置所需的 pods 数量。
- 应用可扩展 pods 的 Cron 作业,当您达到所需 pods 时删除
CronJob