docker - 如何在运行时将容器添加到 Kubernetes pod

标签 docker kubernetes google-kubernetes-engine

我有几个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/

相关文章:

kubernetes - 调用Kubernetes服务失败

kubernetes - 在同一个 K8S pod 中有两个 envoy 代理是一个好习惯吗?

Kubernetes:如何将自动缩放的 pod 的访问模式更改为 ReadOnlyMany?

gcc - 将 GCC 编译器安装到 Docker 容器上

php - 在 Docker Apache 中使用 PHP

Kubernetes-与服务器本地主机:8080 was refused - did you specify the right host or port?的连接

kubernetes - K8s - 将 kubeadm 添加到现有集群

docker - kubectl版本显示了错误的版本号

Docker 说已经存在一个同名的容器,尽管没有容器

google-cloud-platform - 我们可以打开端口以允许来自 GKE master 的流量吗?