k8s pod概念

Kubernetes Pod 是 Kubernetes 中最小的可部署单元,是一个或多个相互协作的应用容器的集合,它们共享相同的网络命名空间和存储卷。每个 Pod 都有一个唯一的 IP 地址,用于和其他 Pod 进行通信。

Pod 的核心概念如下:

  1. Pod 是一个逻辑主机,它可以包含多个容器,其中pause容器作为其他容器的父容器,同一个Pod的容器 共享同一个网络、 PID、IPC、UTS 命名空间,这意味着容器可以通过 localhost 来相互访问,并且它们可以在同一个命名空间内共享文件系统。
  2. Pod 的网络方案通过 Kubernetes 中的 CNI 插件(如flannel,calico等)来实现,包括隔离、路由、IP 分配等。
  3. Pod 包含了对于应用程序非常关键的卷挂载支持。卷可以是本地磁盘卷,也可以是来自于存储后端的网络磁盘。Kubernetes 支持多种不同的存储卷类型,比如本地磁盘卷、网络存储(例如 NFS 和 iSCSI ),以及分布式存储卷(例如 GCE Persistent Disk 和 Amazon EBS 卷等)。
  4. Kubernetes 控制器(例如 Deployment、Replica Set)负责维护 Pod 的数量,保证运行的 Pod 数目与期望数量一致。控制器确保了 Pod 在节点上的运行状态,以及在节点故障或调度的情况下重新调度 Pod。

涉及和Pod相关的组件有:

  1. Kubelet:Kubelet是Kubernetes集群中每个工作节点上运行的进程。Kubelet负责启动、停止和监视Pod。
  2. Docker:Kubernetes使用Docker来运行容器。Docker是一个容器运行时,提供了一个标准的方式来创建、运行和管理容器。
  3. CRI:容器运行时接口(CRI)是一个抽象层,允许Kubernetes与不同的容器运行时(如Docker)交互。
  4. 网络:Kubernetes中的Pod被分配了它们自己的网络接口。这使得Pod能够互相通信并与外部世界交互。
  5. 存储:Kubernetes中的Pod可以连接到持久存储卷。这使得Pod可以存储数据,即使Pod被重启或删除,数据也能够持久化保存。

Pod的生命周期有:

  1. Pending:Pod已被创建,但尚未分配到节点上。
  2. Running:Pod已被分配到节点上,容器已经在运行中。
  3. Succeeded:Pod中所有容器都已成功地完成了其工作,已经退出。
  4. Failed:Pod中至少有一个容器已经退出,且已经达到了重试限制。
  5. Unknown:由于某种原因,Pod的状态无法确定。

Pod的初始化过程:

  1. 创建 Pod,当用户在 Kubernetes 中创建一个 Pod 时,API Server 会接收到请求,然后创建一个 Pod 的初始对象。
  2. 初始化容器,当 Kubernetes 创建了 Pod 对象后,每个容器都会在其所在的节点上被初始化。初始化容器是同步运行的,只有当所有的初始化容器都成功运行并退出后,才会启动普通的容器。初始化容器可以用来做一些在主容器启动之前必需的准备工作,例如为数据库准备必需的存储目录、下载数据源文件等。
  3. 运行容器启动健康状态监测,一旦所有的初始化容器都成功运行,Pod 就可以开始启动普通容器并检测容器是否启动正常。Pod 中的所有容器都可以同时运行,它们共享 Pod 的网络空间和文件系统,并可以使用 Kubernetes 中的资源管理器适当地 CPU 使用率和内存。
  4. 容器就绪探针,每个容器都有一个就绪探针,用于指示容器是否准备就绪。当容器就绪时,它会让其就绪探针变为 true。如果某个容器的就绪探针为 false,则 Kubernetes 认为该容器没有准备好,它将不会再次被调度或负载均衡器。因此,Pod 中所有容器的就绪探针都为 true 是非常重要的。
  5. Pod 初始化完成,当所有容器都就绪并准备好接收网络流量时,Pod 的初始化过程就完成了。Pod 将开始执行其核心业务逻辑,与本地或网络上的其他服务进行交互,并提供服务。Pod 将继续处理请求并处理容器的生命周期,直到 Pod 或容器终止或从 Kubernetes 中删除
  6. 定期进行存活监测和就绪监测,存活监测失败会导致容器重启,就绪状态监测失败会导致该pod从其属于的service对象中移除。

Pod的提交创建过程组件功能:

  1. 客户端:用户使用 Kubectl、API 网关或其他 Kubernetes 可用的客户端向 Kubernetes API  Server发送 Pod 创建请求。
  2. API Server:API Server 是 Kubernetes 的中央组件,它接收来自用户的请求并处理它们。当一个 Pod 创建请求到达 API Server 时,它将检查用户的请求,创建一个 Pod 对象并将信息存储到etcd。
  3. 调度器:一旦 调度器监测到API Server 创建了 Pod 对象,会负责选择一个合适的节点,并把结果信息发送给API Server。
  4. kubelet:kubelet监测到由调度器绑定到本节点的Pod后,根据配置信息拉取 Pod 所需的镜像并调用运行时,并确保 Pod 按照用户的要求进行管理。
  5. 容器运行时:一旦 kubelet 确定可以在节点上启动 Pod,则容器运行时(例如 Docker)将被用于启动 Pod 中的容器。
  6. etcd:有关 Pod 配置、调度及状态的信息将存储在 etcd 中,以确保此状态仅为集群中的所有节点所共享。
posted @   哪都通临时工  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示