合作机构:阿里云 / 腾讯云 / 亚马逊云 / DreamHost / NameSilo / INWX / GODADDY / 百度统计
Kubernetes Pod 是 Kubernetes 应用的基本执行单元。可以把它想象成应用程序运行的独特环境,封装了一个或多个应用容器以及共享的存储/网络资源。Kubernetes 有很多封装服务、端点和其他实体的概念,但归根结底一个 Pod 是你的代码运行的地方。
从概念上来说,Pod 可以和 Docker Compose 中的容器进行比较。在与 Docker Compose 相比时,Pod 在 Kubernetes 中扮演的角色与容器在 Docker Compose 中扮演的角色相同,但 Pod 实际上是一种对一个或多个容器的抽象,具有相关的网络和存储配置。Pod 可以包含几个容器,但是最佳实践是有一个运行应用代码的主容器,以及 0 个或多个提供应用额外功能(如日志、监控和网络)的支持容器,这种方式称为 Sidecar,这些支持容器称为 sidecar 容器。
节点是 Kubernetes 中的工作器,Pod 就是在节点上运行。节点可以是虚拟的,例如 AWS EC2 实例,或者物理的计算机服务器。Pod 被分配到节点上,并在这些节点上运行,消耗节点提供给集群的容量。Pod 并非明确绑定到节点,它们是由 Kubernetes 控制平面分配的,如果有必要可以从一个节点移动到另一个节点。
集群本质上是一组提供容量的节点、一组运行应用程序的 Pod 以及其他配置(如服务或入口控制器),所有这些都由 Kubernetes 控制平面管理。从概念上讲,Pod 可以被视为 Kubernetes 运行应用程序的方式。
Pod 是在主容器(运行我们代码的容器)之上的一层抽象,以及零个或多个支持或 sidecar 容器。除了容器之外,Pod 在 Kubernetes 集群中还有一个身份和几个配置。
Pod 在其生命周期中可以经历几个阶段:
一个 Pod 可以封装多个容器,确保它们共享相同的存储和网络命名空间。这使我们可以将应用程序帮助进程与主应用程序耦合在一起,而不必处理它们之间的网络配置。在同一个 Pod 中运行的容器共享本地网络和存储。这通常用于 sidecar 容器,例如日志记录、监控或网络配置。例如,这样配置一个具有多个容器的 Pod:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
- name: log-container
image: busybox
command: ['sh', '-c', 'tail -f /dev/null']
TOP