作为一名 IT 承包商,我的任务是解决客户软件中的一个问题,该软件简单地使用第三方库来加密或解密字节字符串。由于与 AWS 临时访问令牌相关的原因,图书馆需要偶尔重新初始化才能获取(通过 AWS EKS)和使用新的访问令牌。
我想出了一个简单的解决方案,其中这个库的初始化和使用被委托给为此目的分叉的子进程,输入和输出字符串通过几个管道以十六进制的方式传递。然后要重新初始化库,父进程可以简单地杀死子进程并派生一个新进程。
看起来很标准的东西,在 Unix 中无处不在。但客户代表表示,这可能会导致 Kubernetes pod 出现问题,涉及访问权限和进程监控等问题。他是对的,还是他(正如我怀疑的那样)是一个过于谨慎的珍珠抓取者?
如果他是对的,会出现什么样的问题,如何避免?
但是客户代表说这可能会导致 Kubernetes pod 出现问题,涉及访问权限和进程监控等。
kubernetes 在子进程和访问权限方面没有什么特别之处。这只是 Unix 进程:子进程使用与父进程相同的凭据运行,并且可以访问与父进程相同的文件和其他资源。
过程监控问题值得更详细地探讨一下。通常,我们说一般的容器——不仅在 Kubernetes 中,而且在 docker/podman 等中——应该有一个入口点。换句话说,您不想创建一个运行多个服务的容器,例如网络服务器和数据库。这是因为在多入口容器中,服务的故障对容器管理工具是隐藏的,因此容器运行时无法销毁和重新创建容器以响应服务故障。
只要您的应用程序能够正确响应子进程的意外死亡——通过调用
wait()
来清理进程条目并在必要时正确地重生它——你的状态就很好。