我有几个Jobs 在 k8s 上运行。
这些作业运行一个自定义代理,该代理复制一些文件并为用户(受信任)提供的容器设置运行环境。 该代理在用户容器一侧运行,捕获日志,等待容器退出并处理生成的结果。
为了实现这一点,我们挂载 Docker 的套接字 /var/run/docker.sock
并作为特权容器运行,并在代理中使用 docker-py与用户容器交互(设置、运行、捕获日志、终止)。
这几乎可以正常工作,但我认为这是一个 hack。由于用户容器是通过直接在节点上调用 docker 创建的,因此 k8s 不知道它的存在。由于我们的监控工具与 K8s 交互,并且无法查看这些独立的用户容器,因此这一直造成麻烦。这也使得 pod 调度更难管理,因为用户容器的限制(cpu/内存)不计入对 pod 的请求。
我知道init containers但是这些不太适合这个用例,因为我们希望保持代理运行并监视用户容器直到它完成。
在 Pod 上运行的容器是否可以请求 Kubernetes 将其他容器添加到代理正在运行的同一个 Pod 中?如果是这样,代理是否也可以请求 Kubernetes 随意删除用户容器(例如满足某些自定义条件)?
最佳答案
来自 this GitHub issue ,似乎答案是不可能向 pod 添加或删除容器,因为 pod 规范中的容器列表是不可变的。
关于docker - 如何在运行时将容器添加到 Kubernetes pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51376051/