我使用 Kubernetes 1.6 和 Docker 来部署微服务的实例/pod。
我有一项服务需要定期从外部存储库中提取持续更新的数据。此更新可以在运行时手动触发,但该服务在此期间无法使用。此外,始终在启动时检索最新数据,以便新启动的服务实例具有最新的外部数据。
因此,我想每小时(或其他频率)自动创建一个新的 pod,然后杀死旧的 pod。
从概念上讲,似乎我应该在部署中为每个 pod 配置一个最大生命周期,以便 Kubernetes 启动一个新实例/pod 并在最大生命周期到期时杀死旧实例/pod,同时确保始终至少有一个 pod跑步。但是,Kubernetes 似乎没有提供最大 pod 生命周期。
此外,由于启动期间的数据更新,启动 Pod 需要 1-2 分钟才能准备就绪。
这本来是作为评论,但可能会成为答案。我将其作为答案发布,以便该方法易于阅读。
所以我有可能对你有用的方法。您运行一个全局下载容器,它将文件下载到特定文件夹中。假设每 1 小时下载一次。因此,您将创建一个类似的文件夹22-08-2017-20-00,并创建名为latest. 该文件的内容latest将是22-08-2017-20-00
下载程序在获取新更新时,将创建一个新文件夹并将数据下载到该文件夹。下载数据后,会将最新文件夹的内容更改为该名称。
现在,您的主应用程序 Pod 将引用此主机卷,读取文件内容并使用该文件夹开始数据处理。
现在您应该运行几个副本。如果您设置 cron 并重新启动 Pod,它们将快速启动(无需下载数据)并获取最新数据。您可以通过更改一个没有影响的假参数来进行滚动更新,并进行滚动更新。
或者您也可以将 Pod 设置为在 1 小时后失败。怎么做?确保您的图像具有超时命令
$ time timeout 2 sleep 12
real 0m2.002s
user 0m0.000s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
现在您不希望所有 pod 同时失败,因此您可以生成一个 50 分钟到 70 分钟之间的随机数,让每个 pod 在不同时间失败并由 k8s 自动重新启动
看看该方法是否有意义
| 归档时间: |
|
| 查看次数: |
5158 次 |
| 最近记录: |