gpt4 book ai didi

kubernetes - 如何通过 kubernetes 准入 Controller 修补 pod 的容器规范以使用我的 exec 版本启动容器?

转载 作者:行者123 更新时间:2023-12-05 06:55:50 26 4
gpt4 key购买 nike

我正在编写一个准入 Controller ,它负责用我的 exec 版本启动所有容器,比如 myexec

我知道,我可以修改 pod 容器规范中的 command,以 myexec 为前缀。

但是当 pod 的容器规范中没有 command 时,我陷入了困境。在那些情况下,根据我的理解,我必须找到容器要加载的图像的入口点命令/脚本。我需要将 command 设置为 myexec entrypoint.sh

这看起来既棘手又昂贵,因为我必须检查图像、找到入口点,所有这些都在准入 Controller 内。

我想说的是 kubernetes 已经在拉取镜像(以防镜像已经被拉入或预先显式加载到集群中)并且在它们的节点上有 list ,它可能会将这些入口点信息作为容器配置发送,但是我不知道如何在入场时捕捉到这些。

所以我正在寻找一些我不知道的提示、技巧或方法来实现我的目标。

PS:我无法更改图像配置。

最佳答案

有这个项目skopeo这允许您查询任何容器注册表以获取元数据,例如入口点和命令。

可以使用skopeo cmd工具进行测试。

关注this install instructions安装它。

现在尝试以下操作:

$ skopeo inspect --config  docker://nginx:latest

您可能看到的是大量输出。我们的用例不需要其中的大部分。我们感兴趣的是在.config 下。我使用 jq 来查询它。看看:

$ skopeo inspect --config  docker://nginx:latest | jq ".config"
{
"ExposedPorts": {
"80/tcp": {}
},
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.19.5",
"NJS_VERSION=0.4.4",
"PKG_RELEASE=1~buster"
],
"Entrypoint": [
"/docker-entrypoint.sh"
],
"Cmd": [
"nginx",
"-g",
"daemon off;"
],
"Labels": {
"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
},
"StopSignal": "SIGQUIT"
}

注意字段:EntrypointCmd。我相信这就是您要找的。所有这一切都是在不拉取任何图像的情况下完成的。这有多酷?

您可能可以获取源代码(它在 apache 许可下,因此可以随意修改它),从中获取其余服务并让准入 Controller 查询它以获取有关端点/cmds 的信息。

关于kubernetes - 如何通过 kubernetes 准入 Controller 修补 pod 的容器规范以使用我的 exec 版本启动容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65263058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com