【问题标题】:Container garbage collection in KubernetesKubernetes 中的容器垃圾回收
【发布时间】:2017-10-20 20:56:18
【问题描述】:
我有一个关于 pod 中的容器垃圾收集的问题。我有一个在 pod 中运行的主容器和边车容器。如果主容器完成但 sidecar 仍在运行。 Kubernetes 垃圾会收集主容器吗?我们能保证在 sidecar 完成之前主容器不会被垃圾收集吗?如果没有,有没有办法做到这一点?
MaxPerPodContainer 标志与此有何关系?
【问题讨论】:
标签:
docker
garbage-collection
kubernetes
containers
【解决方案1】:
来自https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy:
PodSpec 有一个 restartPolicy 字段,其可能值为 Always,
OnFailure 和 Never。默认值为Always。 restartPolicy
适用于 Pod 中的所有 Container。
实际上,对于 Pods,这意味着以下内容:
-
restartPolicy: Never: 如果一个容器终止,那么所有其他容器将继续运行
-
restartPolicy: OnFailure:如果一个容器以错误状态终止,则该容器将重新启动;如果它干净地终止(完成),则容器不会重新启动。在这两种情况下,其他容器都会继续运行。如果所有容器都干净地终止,则 Pod 会进入 Completed 状态并保持这种状态。
-
restartPolicy: Always: 如果一个容器以错误状态终止,则该容器将重新启动
但是,您很可能使用 Deployment,它要求在 Pod 模板中使用 restartPolicy: OnFailure。这意味着如果容器终止,则容器将重新启动。不可能有一个只运行几分钟的容器。
根据您要执行的操作,initContainers 可能是一个解决方案。
也许用这样的 Pod 做一些实验:
kind: Pod
metadata:
name: busybox
spec:
restartPolicy: Always
containers:
- name: date
image: busybox
command: ["sh","-c","while date; do sleep 1; done"]
- name: sleep15
image: busybox
command: ["sh","-c","sleep 15; exit 1"]