【问题标题】:Is it possible to replace executable in a container in a POD while it's running?是否可以在 POD 运行时替换容器中的可执行文件?
【发布时间】:2019-09-09 23:34:03
【问题描述】:

我正在 Ubuntu 上开发一个 Go 可执行文件,并在 minikube 中运行一个 kubernetes 集群。在 minikube 中运行的 pod+container 是基于 Ubuntu 的,我只想替换容器中的可执行文件。或多或少绕过了重新制作容器的需要,因为可执行文件是唯一需要更改的东西。当我的更改“准备好”时,我计划重新制作容器所基于的图像等,但这是在路上。

我真的希望迭代得快一点。

这可能吗?有没有更好的办法?

【问题讨论】:

  • kubernetes 的方法是使用部署代替并更新部署。这样一来,更换吊舱时您就不会停机。根据您的 docker 设置,您可能可以找到一种方法来替换 pod 中的可执行文件,但我认为这不是我认为的前进的好方法,也不是非常“像 kubernetes”。您当前的工作流程有什么问题?更换吊舱应该只需要几秒钟。

标签: go kubernetes containers workflow


【解决方案1】:

仅出于开发目的(相当 hacky 的解决方案),您可以让 Ubuntu-Go 容器运行 tail -f /dev/null 以防止其完成,并使用 hostPath 将包含可执行文件的路径安装到容器中。您可以通过运行 kubectl exec 来运行您的 Go 应用程序,您对主机上的应用程序所做的任何更改都将反映在容器中。您可以在更新可执行文件时再次使用kubectl exec 重新启动应用程序。

Here 是关于如何使用 minikube 的 hostPath 的很好的自述文件。

请记住在生产环境中使用正确的二进制文件重新构建您的容器,定义正确的入口点,并修复您的部署/pod 定义以排除 hostPath。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 2010-12-15
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    相关资源
    最近更新 更多