kubernetes - 父/子 kubernetes pod 通信
问题描述
是否可以通过正在运行的容器生成新的 kubernetes pod?我们想通过对它执行各种操作(如查询、获取、创建和删除)来测试这个 pod。
最初该服务运行在本机 Windows API 和 docker 上,因此我们必须实现一种机制来在每次测试之前和之后重新启动服务。据我所知,kubernetes 默认知道这一点,或者至少这应该不难实现。
父 pod(测试)和子 pod 之间的通信是进程间 (ipc),并且套接字应该驻留在 /tmp/p2/psocket 中(因此它具有不同的套接字)。不幸的是,测试无法连接到 pod 并且没有在磁盘上创建套接字。可能是安装错误?
我有一种感觉,整个概念很糟糕。我想pod之间不应该有父子关系,而是用于测试的多容器pod,其中第一个容器是测试过程本身,另一个是shm。
但问题是“孩子”的寿命不应该与测试吊舱相同。每次测试场景完成它自己的东西时,“孩子”应该重新启动。
我的问题基本上是如何执行这样的事情,或者这种情况有什么最佳实践吗?我对 kubernetes 相当陌生,因此欢迎任何想法或建议。我们使用 docker images 和 kind 来创建集群。
(之前我提到共享内存,但它不是linux共享内存,而是完全不同的东西)。
解决方案
父 pod(测试)和子 pod(shm)之间的通信是进程间(ipc),并且套接字应该驻留在 /tmp/shm2/shmSocket
Pod 无法使用 Unix 套接字或共享内存相互通信。特别值得注意的是,任何两个给定的 Pod 都不能保证在同一个节点上,但是这些机制都不能跨主机边界工作。如果被测服务应该为其他东西提供共享内存接口,那么其他东西很可能需要在同一个容器中运行。
如果被测服务可以提供 TCP 接口(包括 HTTP),那么您可以通过 Kubernetes Service 正常与它通信。没有它,它如何在 Kubernetes 中有效地运行并不明显。
是否可以通过正在运行的容器生成新的 kubernetes pod?[...] 最初,该服务在本机 Windows API 和 docker 上运行...。
如果“父”pod 有一个正确的 Kubernetes ServiceAccount,一个允许它创建 pod 的 Role,并且有一个 RoleBinding 从一个到另一个,那么这是可能的;请参阅 Kubernetes API 概述。这样做的明显缺点是您必须专门使用 Kubernetes SDK 来执行此操作。这将是与 Windows 进程系统、Docker SDK 或 Linux fork
/exec
调用不同的机制。
如果进程的接口真的只是共享内存,您可以构建一个包含测试驱动程序和要测试的进程的单个 pod,并且测试驱动程序可以将应用程序作为子进程启动。具体如何做到这一点取决于您使用的语言;例如,在 Python 中,您将使用该subprocess
模块。此设置并不特定于任何特定的容器运行时,您也可以在没有容器的原生类 Unix 系统上以完全相同的方式运行它。
推荐阅读
- automation - 使用 Automation Anywhere 到达 Google 表格中具有值的最后一个单元格
- excel - 格式化 - 导出为 PDF - Excel VBA
- javascript - 从 mongodb 获取数据时,节点 js javascript 中的 Map.get() 总是返回 undefined
- python - 当给定两个数字在python中给出余数0时,我想打印一些东西。下面的代码是为了演示我想要的,但它没有用
- javascript - 在没有 Graphql 的情况下从 Gatsby src 文件夹中获取图像,同时仍然使用 Graphql 获取其他图像
- sql - 查询显示各部门工资最低的员工
- flutter - Flutter 构建报错:连接服务协议时出错:无法连接到 http://127.0.0.1:51234/v9-zOlh23aE=/
- java - 获取两个带分隔符的数字并打印总和
- javascript - colorbox - 按钮需要点击两次才能触发 onclick
- python - 矢量形式的垂直风可视化