Kubernetes 允许容器在不重启 pod 的情况下退出
Kubernetes allow container to exit without pod restart
我看到 docker 的一个相当常见的设置是让容器旋转起来执行任务然后退出。
这是我经常用 docker-compose 做的事情,我有一个执行构建过程的节点容器,一旦构建了静态文件就不需要熬夜。
在这些情况下,如果我查看 docker-compose ps
输出,而我的其他容器已启动并暴露在端口上,则节点容器状态将为 "Exit 0"。
尽管如果我需要访问此容器,它会处于休眠状态,但可以启动它。
将此设置转换为 Kubernetes 的最佳做法是什么?
我最初的方法是将所有内容都放在一个 pod 中,但容器退出会导致 CrashLoopBackOff,并且由于 pod 重启策略,pod 不断重启。
如果我要保留此设置,我只希望 pod 在其他容器之一发生故障时重新启动。它已经将构建静态文件移动到其他容器可以访问的卷中。
是否应该将此容器移动到另一个不重启的 pod 中?似乎这会使部署变得不必要地复杂化。
通常,要防止 POD 重述使用 restartPolicy: Never
(more on Restart Policy)。
此外,对于您想要 运行 "to completion" 的东西,请使用名为 Job
(more on Job) 的 k8s 组件:
apiVersion: batch/v1
kind: Job
metadata:
name: <job_name>
spec:
template:
spec:
containers:
<...>
到运行作业直到第一次成功(即exit code 0
)设置restartPolicy: OnFailure
.
a node container that performs a build process and doesn't need to stay up once the static files have been built
这听起来很像 init container 的定义:"They always run to completion. Each one must run successfully before the next one is started."
在您的部署规范中,在 Pod 模板部分,您将有一个单独的 initContainers:
部分,其中包含单独的仅构建容器。它与包含主应用程序的 containers:
部分具有完全相同的格式,但 运行 首先,直到完成,一次。您可能需要在 Pod 的上下文中创建一个卷以与主容器共享内容,但这可能类似于没有实际持久存储的 emptyDir:
类型的 pod。
如果你真的是"building"某种意义上的东西运行宁宁像 Webpack 这样主要生成静态文件的工具,最好还是把这个过程移到 Dockerfile 中,这样你就可以运行 部署时未进行更多构建的未修改映像。
我看到 docker 的一个相当常见的设置是让容器旋转起来执行任务然后退出。
这是我经常用 docker-compose 做的事情,我有一个执行构建过程的节点容器,一旦构建了静态文件就不需要熬夜。
在这些情况下,如果我查看 docker-compose ps
输出,而我的其他容器已启动并暴露在端口上,则节点容器状态将为 "Exit 0"。
尽管如果我需要访问此容器,它会处于休眠状态,但可以启动它。
将此设置转换为 Kubernetes 的最佳做法是什么?
我最初的方法是将所有内容都放在一个 pod 中,但容器退出会导致 CrashLoopBackOff,并且由于 pod 重启策略,pod 不断重启。 如果我要保留此设置,我只希望 pod 在其他容器之一发生故障时重新启动。它已经将构建静态文件移动到其他容器可以访问的卷中。
是否应该将此容器移动到另一个不重启的 pod 中?似乎这会使部署变得不必要地复杂化。
通常,要防止 POD 重述使用 restartPolicy: Never
(more on Restart Policy)。
此外,对于您想要 运行 "to completion" 的东西,请使用名为 Job
(more on Job) 的 k8s 组件:
apiVersion: batch/v1
kind: Job
metadata:
name: <job_name>
spec:
template:
spec:
containers:
<...>
到运行作业直到第一次成功(即exit code 0
)设置restartPolicy: OnFailure
.
a node container that performs a build process and doesn't need to stay up once the static files have been built
这听起来很像 init container 的定义:"They always run to completion. Each one must run successfully before the next one is started."
在您的部署规范中,在 Pod 模板部分,您将有一个单独的 initContainers:
部分,其中包含单独的仅构建容器。它与包含主应用程序的 containers:
部分具有完全相同的格式,但 运行 首先,直到完成,一次。您可能需要在 Pod 的上下文中创建一个卷以与主容器共享内容,但这可能类似于没有实际持久存储的 emptyDir:
类型的 pod。
如果你真的是"building"某种意义上的东西运行宁宁像 Webpack 这样主要生成静态文件的工具,最好还是把这个过程移到 Dockerfile 中,这样你就可以运行 部署时未进行更多构建的未修改映像。