【问题标题】:What is --pod-infra-container-image meant for?--pod-infra-container-image 是什么意思?
【发布时间】:2017-10-08 11:05:15
【问题描述】:

kubernetes 中 pod-infra-container-image 的用途是什么?

官方文档只说:

每个 pod 中的 network/ipc 命名空间容器将使用的镜像。 (默认“gcr.io/google_containers/pause-amd64:3.0”)

但我不完全了解它的作用以及它的详细工作原理。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    使用--pod-infra-container 标志选择映像的暂停容器,以便可以在一个 pod 中启动多个容器,同时共享资源。它通常什么都不做,除非你有很好的理由用自定义的东西替换它,否则你不应该这样做。它主要调用pause 系统调用(因此得名),但它也执行具有 PID 1 并确保没有僵尸进程存在的重要功能。

    一篇关于can be found here主题的非常完整的文章,我还无耻地从那里偷走了下面这张说明暂停容器所在位置的图片:

    【讨论】:

      【解决方案2】:

      暂停容器是从 https://github.com/kubernetes/kubernetes/tree/master/build/pause 构建的。该过程本身什么也不做,因此您可以将其替换为您选择的另一个同样不做任何事情的容器(使用kubelet--pod-infra-container-image 参数)。

      此容器作为每个 pod 的一部分启动。 Kubernetes 正在使用这个众所周知的永不掉落的容器来为 pod 设置网络命名空间,并确保命名空间永远不会为空(pod 中的所有其他容器都可能失败)。但同样,容器进程本身什么也不做,它只是一个占位符。

      【讨论】:

      • 但是为什么 Kubernetes 需要这样的容器呢?不能自己设置网络吗?
      • 我不完全理解你的问题。简短的回答是这个容器是技术上的必需品(当使用 Docker 和 Kubernetes 时),但你不需要关心。运行这个容器几乎不需要任何资源,而且一个节点无论如何也不会运行超过 100 个左右的 pod,这意味着每个 pod 运行这个额外的容器(什么都不做)占用的任何资源几乎是零成本。
      • 我不关心成本。我只是想了解它是如何工作的。来自不需要这种东西的 docker swarm 环境,我试图找出需要这种容器的原因,并想知道它是如何工作的详细信息。对我来说最终的选择是查看代码,但我希望找到更快的答案,而不是通过这么多代码。
      • 这是必需的,因为 pod 中的多个容器共享一个 Linux 网络命名空间(以及可选的存储卷)——主要用于服务网格等或其他代理中使用的“sidecar”容器。暂停容器只是为了保持网络命名空间(和其他一些)始终存在,即使所有其他容器都死了。见linchpiner.github.io/k8s-multi-container-pods.html
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      • 2017-11-28
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 2011-08-12
      • 2017-06-11
      相关资源
      最近更新 更多