0

出于安全原因,目前是否可以根据时间或条件从 Kubernetes 中的复制控制器“重新铺设”或重新生成 Pod 或容器?希望每隔 x 分钟/小时或由于条件(如tripwire)根据计划重新创建容器。我知道这可以在外部完成,只是好奇它是否是现有功能,或者是否有聪明的方法来实现这个目标。

4

3 回答 3

0

不是直接在 Kubernetes 中构建的东西,但是您可以通过利用Liveness probe来解决这个问题。如果 Pod 中的任何容器被安排在特定条件下(基于时间或事件)“失败”,Kubernetes 将自动重启 Pod,即重新创建失败的容器。

于 2016-08-26T08:08:14.467 回答
0

另一种解决方案是使用Brendan Burn 的 ksql 脚本来定位目标 pod。我在我公司的部署 CI 工作中使用它。SQL 搜索正在运行我刚刚重建的映像的所有 pod,将结果传递到 BASHwhile循环中,在该循环中我一个一个地销毁受影响的 pod。

#!/bin/bash

# Build the ksql query
QUERY="SELECT pods.metadata->name, pods.metadata->namespace "
QUERY="${QUERY} FROM pods LEFT JOIN containers USING uid "
QUERY="${QUERY} WHERE image LIKE '%/${CONTAINER_NAME}:${CONTAINER_TAG}'"

exec 5>&1  # Duplicate stdout on #5 so we can display the 
           # results of the query and use them at the same time

# Delete every pod matching QUERY. The `sed` and `awk` calls break down the formatted table
while read line; do
  namespace=`echo $line | cut -d' ' -f4`
  pod=`echo $line | cut -d' ' -f2`
  kubectl delete --namespace=$namespace pod $pod
done < <(echo "$QUERY" | node node_modules/ksql/ksql.js | tee >(cat - >&5) | sed -n 'p;n' | tail -n +3)

它当然不是世界上最优雅的解决方案,但它可以很简单地将这个逻辑嵌入到集群中运行的容器中。

这种技术的优点是它非常灵活和可扩展。

于 2016-08-26T21:51:26.897 回答
0

pod.spec.activeDeadlineSeconds你想做的事吗? http://kubernetes.io/docs/api-reference/v1/definitions/#_v1_podspec

于 2016-08-31T21:53:13.770 回答