我们需要确保k8s中的pod具有最新版本。 实现此目的的最佳方法是什么??
第一个想法是在某个点之后杀死吊舱,知道新的吊舱将会拉出最新的图像。这是what we found so far。仍然不知道该怎么做。
另一个想法是每隔5小时按间隔执行rolling-update
。有没有办法做到这一点?
答案 0 :(得分:2)
如@svenwltr所述,使用activeDeadlineSeconds
是一个简单的选择,但可能会立即失去所有pod。为了降低这种风险,我使用deployment
来管理pod及其推出,并配置一个小的第二个容器以及实际的应用程序。可以像这样配置小助手(following the official docs):
apiVersion: v1
kind: Pod
metadata:
name: app-liveness
spec:
containers:
- name: liveness
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep $(( RANDOM % (3600) + 1800 )); rm -rf /tmp/healthy; sleep 600
image: gcr.io/google_containers/busybox
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
- name: yourapplication
imagePullPolicy: Always
image: nginx:alpine
使用此配置,每个pod将在配置的时间范围内(此处介于30到90分钟之间)随机中断,这将触发新pod的启动。然后imagePullPolicy: Always
将确保在该周期内更新图像。
这当然假设您的应用程序版本始终以相同的名称/标签提供。
答案 1 :(得分:1)
要使用关联功能,您只需在广告连播中指定activeDeadlineSeconds
。
未经测试的例子:
apiVersion: v1
kind: Pod
metadata:
name: "nginx"
spec:
activeDeadlineSeconds: 3600
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: Always
这样做的缺点是,您无法控制截止日期何时开始。这意味着可能会发生,您的所有pod都会同时被杀死,整个服务都会脱机(这取决于您的应用程序)。< / p>
答案 2 :(得分:1)
另一种选择是使用deployment
并让控制器处理滚动输出。更具体一点:如果您更新image
yaml中的deployment
字段,它会自动更新每个广告连播。 IMO是最干净的方式,但它有一些要求:
latest
标记。假设当图像标签发生变化时,容器只需要更新。答案 3 :(得分:0)
我尝试使用Pagid的解决方案,但遗憾的是我的观察和subsequent research表明他断言失败的容器将重启整个pod是不正确的。事实证明,只有失败的容器才会重新启动,这显然没有多大帮助,因为要点是以随机的间隔重新启动容器中的其他容器。
好消息是我有一个似乎有效的解决方案,这个解决方案基于他的答案。基本上,您不是写入/ tmp / healthy,而是写入已安装pod中每个容器的共享卷。您还需要将活动探针添加到每个pod中。以下是基于我正在使用的示例:
volumes:
- name: healthcheck
emptyDir:
medium: Memory
containers:
- image: alpine:latest
volumeMounts:
- mountPath: /healthcheck
name: healthcheck
name: alpine
livenessProbe:
exec:
command:
- cat
- /healthcheck/healthy
initialDelaySeconds: 5
periodSeconds: 5
- name: liveness
args:
- /bin/sh
- -c
- touch /healthcheck/healthy; sleep $(( RANDOM % (3600) + 1800 )); rm -rf /healthcheck/healthy; sleep 600
image: gcr.io/google_containers/busybox
volumeMounts:
- mountPath: /healthcheck
name: healthcheck
livenessProbe:
exec:
command:
- cat
- /healthcheck/healthy
initialDelaySeconds: 5
periodSeconds: 5