Kubernetes 和 Docker 的关系

Kubernetes and Docker Relationship

Docker 和 Kubernetes 之间的关系的本质是什么?假设在 Pod 内完成的所有 Docker 操作都会将 Pod 视为普通主机是否安全?

例如,如果我使用 Python Docker SDK,附加到 /var/run/docker.sock,并创建一个卷,这个卷是否只存在于 Pod 中?

我主要担心的是我知道 Pod 是虚拟化的,因此如果我通过 Docker.

等其他虚拟化工具挖掘得太深,可能无法很好地发挥作用

如果 Kubernetes 是 运行 Docker(不保证)那么 /var/run/docker.sock 将是主机的 Docker插座;没有额外的虚拟化层。

您不应尝试在 Kubernetes 中的应用程序 运行 中使用 Docker 原语。您描述的方法可能导致数据丢失,即使您尝试在节点上创建 Docker-native 卷,但随后集群自动缩放器或其他一些任务破坏了该节点。如果您需要创建存储或其他容器,您可以使用 Kubernetes API 创建 PersistentVolumeClaims、作业和其他 Kubernetes-managed 对象。

了解每个概念的职责很重要。

  • 一个Docker容器本质上是主机OS和来宾OS之间的边界,允许进程运行 孤立 (docs).
  • Kubernetes 是一个用于 运行 此类容器 (docs) 的编排平台。
  • 最后,Pod 是一个 kubernetes 对象,它描述了 docker 容器如何成为 运行 (docs)。

有了这些知识,我们可以回答您的一些问题;

What is the nature of the relationship between Docker and Kubernetes?

Kubernetes 可以像您的计算机一样 运行 docker 容器,但它已针对此特定目标进行了优化。 Kubernetes 也是一个抽象(或编排)层,为您处理网络功能、磁盘 space 和 cpu 周期等资源。

Is it safe to assume that ALL Docker operations done within a Pod will treat the Pod as if it is a normal host machine?

A Pod 无论如何都不是主机。它只是描述一个 docker 个容器(或多个)应该如何 运行。任何生成的容器 运行 都在 kubernetes 节点创建的虚拟 space 中。

For example, if I were to use the Python Docker SDK, attach to the /var/run/docker.sock, and create a volume, will this volume only exist within the Pod?

这是您可以在本地计算机上执行的操作,虽然从技术上讲您也可以在您的节点上执行此操作,但这不是一个常见的用例。

请注意,docker 容器与任何外部因素隔离,如挂载或网络套接字(仅在 运行 时发生,并且不会更改容器本身的状态).但是,您可以配置容器(使用 Pod 对象)以在集群上重新创建相同的条件。