将静态二进制文件装入Kubernetes pod

ftf50wuq  于 2023-03-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(125)

这是一个非常常见的模式:在运行时将二进制文件(如kubectl,gotemplate)添加到Pod容器中。
要做到这一点,我们可以使用initContainer从互联网上下载文件,然后使用emptyDir卷与主容器共享它。
我想知道是否有更好的方法/最佳实践来实现它?(运营商,artifactory,PVC,HTTP代理?)

z0qdvdin

z0qdvdin1#

我想说,这个问题可以在几个不同的层面上解决。
如果可能的话,我会从container image开始。你可以在构建过程中复制二进制文件,这样它就可以被烘焙,你的图像就不会变。
示例:

FROM docker.io/bitnami/kubectl:1.25.5 AS kubectl

FROM docker.io/jenkins/agent:4.13-3

USER root

COPY --from=kubectl /opt/bitnami/kubectl/bin/kubectl /usr/local/bin/kubectl

RUN usermod --shell /bin/bash jenkins

USER jenkins

ENTRYPOINT ["/usr/local/bin/jenkins-agent"]

如果在构建过程中无法下载所需的二进制文件,我们也可以使用ENTRYPOINT,在那里我们提供一些脚本,将下载一些东西到特定位置或安装一些东西。通过这种方法,我们可以使用环境变量来参数化我们的脚本。
最后一个选项是使用一些k8s资源,如前面提到的initContainerconfigMap
总结一下,从安全的Angular 来看,我建议第一种方法是最好的选择。如果这不可能,你需要选择在哪里放置下载步骤。如果你是应用程序Dockerfile和k8s的所有者,选择最适合你的。如果开发人员是应用程序的所有者,他们正在生产容器映像,我会选择一些k8s资源,因为它会更容易为您管理它。

suzh9iv8

suzh9iv82#

...use initContainer to download
如何维护这样的文件在NFS上,你的容器可以在运行时挂载。这样你就不需要下载每次pod启动,也为你提供了一种方法来预筛选,签名和批准文件,可以在集群中使用。

相关问题