Kubernetes:最大的荚期

我使用Kubernetes 1.6和Docker来部署微服务的实例/豆荚。

我有一个服务,需要定期从外部存储库中不断更新的数据。 此更新可以在运行时手动触发,但在此期间该服务不可用。 此外,在启动时总是检索最新的数据,以便新启动的服务实例具有最新的外部数据。

因此,我想每隔一小时(或其他频率)自动创build一个新的吊舱,然后杀死旧的吊舱。

从概念上讲,似乎我应该在部署中configuration每个容器的最大生命周期,以便Kubernetes启动一个新的实例/容器,并在最大生命周期过期的情况下杀死旧容器,同时确保总是至less有一个容器运行。 但是, Kubernetes似乎没有提供最大的豆荚寿命 。

另外,由于启动期间的数据更新,在准备就绪之前启动吊舱需要1-2分钟。

这意味着作为一个评论,但可能成为一个答案。 我发布它作为一个答案,使这种方法很容易阅读。

所以我有可能的方法,可能会为你工作。 您运行一个全局下载窗口,将文件下载到特定的文件夹。 我们假设下载每1小时发生一次。 所以你将创build一个像22-08-2017-20-00这样的文件夹,并创build一个名为latest文件。 这个latest文件的内容将是22-08-2017-20-00

下载器在获取新更新时将创build一个新文件夹并将数据下载到该文件夹​​。 数据下载完成后,会将最新文件夹的内容更改为该名称。

现在,您的主应用程序窗格会引用此主机卷,读取文件内容并使用该文件夹启动数据处理。

现在你应该运行几个副本。 如果您安装了一个cron并重新启动这个窗格,它们将会快速启动(无需下载数据)并获取最新的数据。 您可以通过更改假冒参数而不影响滚动更新来执行滚动更新。

或者你也可以设置你的豆荚1小时后失败。 怎么做? 确保你的图像有超时命令

 $ time timeout 2 sleep 12 real 0m2.002s user 0m0.000s sys 0m0.000s 

现在你不希望所有的豆荚同时出现故障,所以你可以生成一个在50分钟到70分钟之间的随机数,让每个豆荚在不同的时间失效,并自动重新启动k8s

看看这个方法是否有意义

这里有一个例子可以帮助你: https : //kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/

 apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec spec: containers: - name: liveness args: - /bin/sh - -c - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 image: gcr.io/google_containers/busybox livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5 

使用健康检查,你可以强制一段时间后重新安排容器。 我认为这可能适合你的情况。