【问题标题】:Can Pods be thought of as Namespaces?可以将 Pod 视为命名空间吗?
【发布时间】:2018-12-18 21:21:06
【问题描述】:

我的理解是,既然 pod 被定义为一组容器,这些容器在这些容器之间提供存储和网络等共享资源,那么是否可以将其视为工作节点中的命名空间,也就是说,不同的 pod 代表不同的工作节点机器中的命名空间?

或者 pod 实际上是一个由部署首先启动(或运行或执行)然后启动其中的容器的进程? 我可以通过 ps 命令看到吗? (我确实试过了,只有 docker 容器在运行,所以我排除了 pod 是一个进程)

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    如果我们从基础开始

    什么是命名空间(以通用方式)?

    命名空间是一个声明性区域,它为其中的标识符(类型、函数、变量等的名称)提供范围。命名空间用于将代码组织成逻辑组并防止可能发生的名称冲突,尤其是当您的代码库包含多个库时。

    什么是 Pod(在 K8s 中)?

    Pod 是一组一个或多个容器(例如 Docker 容器),具有共享存储/网络,以及如何运行容器的规范。一个 pod 的内容总是共同定位和共同调度,并在一个共享的上下文中运行。 Pod 为特定于应用程序的“逻辑主机”建模——它包含一个或多个相对紧密耦合的应用程序容器——在容器前世界中,在同一物理或虚拟机上执行意味着在同一逻辑主机上执行.

    虽然 Kubernetes 支持的容器运行时不仅仅是 Docker,但 Docker 是最常见的运行时,它有助于用 Docker 术语来描述 pod。

    pod 的共享上下文是一组 Linux 命名空间、cgroup 和可能的其他隔离方面 - 与隔离 Docker 容器的东西相同。在 pod 的上下文中,各个应用程序可能应用了进一步的子隔离。 Some deep dive into Pods

    什么是命名空间(在 k8s 中)?

    命名空间旨在用于多个用户分布在多个团队或项目中的环境。

    命名空间为名称提供了一个范围。资源名称在命名空间内必须是唯一的,但跨命名空间则不能。

    命名空间是在多个用户之间划分集群资源的一种方式。

    所以我认为它足以说明:

    是的 Pod 有命名空间

    Pod 代表一个命名空间,但在容器级别(它们共享相同的网络上下文、卷/存储仅在一组容器之间)

    但是命名空间(就 K8s 而言)是更高级别的隔离——在集群级别上,由所有容器(服务、部署、dns 名称、IP、配置映射、机密、角色等)共享.

    你也应该看到这个link

    希望这能消除这个问题上的一点迷雾。

    【讨论】:

    • 我认为 OP 是在谈论 Linux Kernel 命名空间,而不是 Kubernetes 命名空间。或者我误解了他们。
    • 非常好的深思熟虑的答案:+1:
    • 是的,我说的是 Linux 内核命名空间。
    【解决方案2】:

    是的,您可以说 pod 是由容器共享的命名空间。使用 Docker 执行器时,会创建一个 pause 容器,该容器为后续容器建立网络、文件系统和进程命名空间。

    这是因为 Docker 不将 pod 理解为第一类原语,并且您不会看到 pause 容器与其他运行时。

    【讨论】:

    • 所以如果我遇到像 pod is running/executed 这样的术语,那么这是否意味着正在准备隔离环境,即容器在其中运行并最终运行的命名空间那些容器?
    • 如果 pod 正在运行,则意味着 Linux 命名空间已创建,并且一个或多个容器现在正在该环境中运行;是的。
    猜你喜欢
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2010-11-12
    • 2010-10-03
    • 2012-02-23
    • 2016-03-24
    相关资源
    最近更新 更多