自学内容网 自学内容网

深入掌握k8s核心概念--Pod(一)


激动人心的时刻到了,终于到核心概念这一步了,前面的知识是有点“干燥了”。不急后面会看见代码,可以多像金山打字一样打一打代码,熟悉一下yaml格式

Pod 在 Kubernetes 架构中的位置和实现原理

Pod 在架构中的位置

Pod 位于 Kubernetes 架构的核心中,是构建应用的最小单元。Pod 可以用来运行各种类型的应用,包括 Web 应用程序、数据库、缓存、批处理作业等。
在这里插入图片描述

在这里插入图片描述

Pod 具体实现

  • 容器: Pod 中的容器是 Pod 的基本组成单元,每个容器都是一个独立的运行环境。
  • 共享资源: Pod 中的容器共享网络、IPC 和存储资源,这使得 Pod 内部的容器之间可以进行高效的通信和数据交换。
  • 调度: Kubernetes 会根据 Pod 的调度策略将其调度到合适的节点上运行。
  • 管理: Kubernetes 会对 Pod 进行生命周期管理,包括创建、运行、重启、终止等操作。

Pod 的实现依赖于 Kubernetes 的几个核心组件:

  • API Server: Kubernetes 的 API Server 是一个 RESTful API,用于管理 Kubernetes 集群中的所有资源,包括 Pod。
  • Scheduler: Kubernetes 的 Scheduler 负责将 Pod 调度到合适的节点上运行。
  • Kubelet: Kubelet 是运行在每个节点上的代理,负责在节点上管理 Pod 的生命周期。

Pod 为什么在 Kubernetes 中很重要

Pod 在 Kubernetes 中扮演着重要的角色,主要有以下几个原因:

  • Pod 提供了一种简单易用的方式来部署和管理容器。 Pod 可以将多个容器作为一个单元进行管理,简化了操作和维护。
  • Pod 可以提高资源利用率。 Pod 可以将多个容器调度到同一个节点上运行,从而提高资源利用率。
  • Pod 可以提高应用的可靠性。 Pod 可以通过重启策略来保证应用的可靠性。

Pod 的最佳实践

在使用 Pod 时,尽量遵循以下实践:

  • 每个 Pod 仅包含一个容器。 除非有特殊需求,否则每个 Pod 应仅包含一个容器,以简化管理和维护。
  • 使用合理的资源配置。 为 Pod 分配合理的资源,既要满足应用需求,又要避免资源浪费。
  • 定义端口配置。 为容器定义端口配置,以便其他 Pod 或服务可以访问容器。
  • 使用 Pod 扩缩容。 根据应用需求,使用 Pod 扩缩容策略来动态调整 Pod 数量。

为什么Kubernetes会设计出一个全新的Pod的概念并且Pod有这样特殊的组成结构?

  • 原因之一:在一组容器作为一个单元的情况下,我们难以简单地对“整体”进行判断及有效地行动。

    比如,一个容器死亡了,此时算是整体死亡么?是N/M的死亡率么?引入业务无关并且不易死亡的Pause容器作为Pod的根容器,以它的状态代表整个容器组的状态,就简单、巧妙地解决了这个难题。

  • 原因之二:Pod里的多个业务容器共享Pause容器的IP,共享Pause容器挂接的Volume

    这样既简化了密切关联的业务容器之间的通信问题,也很好地解决了它们之间的文件共享问题。

Pod 概述

Pod 是 Kubernetes 中的核心概念,代表了一组并置的容器。 Pod 中的容器共享网络、IPC 和存储资源,并作为单个单元进行调度和管理。Pod 可以包含一个或多个容器,但通常情况下,每个 Pod 仅包含一个容器。

Pod 类型

类型描述典型应用场景详细说明
普通 Pod运行应用程序Web 应用程序、数据库、缓存适用于任何类型的应用程序,可以根据需要进行定制。
守护进程 Pod确保 Pod 始终运行监控代理、日志收集器即使节点发生故障,也能确保 Pod 始终运行。
无状态 Pod不保留任何数据Web 服务器、负载均衡器Pod 终止后,所有数据都会丢失。
有状态 Pod保留数据数据库、缓存、存储使用持久卷存储数据,即使 Pod 终止后,数据仍然存在。
批处理 Pod执行一次性任务数据处理、机器学习、分析适用于需要并行执行的任务,完成后自动销毁。

Pod 特性

特性描述优势详细说明
可移植性在不同集群间迁移提高部署灵活性可以轻松地在不同的 Kubernetes 集群之间迁移 Pod,无需修改配置。
可扩展性按需扩缩容满足流量变化需求可以根据需要动态扩缩容 Pod,以满足应用流量的变化。
资源隔离容器间相互隔离提高资源利用率,确保应用稳定性每个容器都拥有自己的资源配额,互不影响。
故障恢复自动重启提高应用可靠性Pod 失败后可以自动重启,确保应用始终可用。

Pod 生命周期

阶段描述详细说明
Pending等待调度Pod 尚未被分配到节点上。
Running正在运行Pod 已经运行在节点上。
Succeeded成功完成Pod 已经成功完成了任务。
Failed失败Pod 运行失败。
Unknown状态未知Pod 的状态无法确定。

Pod 重启策略

策略描述适用场景详细说明
Always始终重启持续运行应用Pod 失败后会一直尝试重启,直到成功。
OnFailure因错误失败时重启可容忍短暂中断应用只有当 Pod 因错误而失败时才会重启。
Never不重启不需要自动恢复应用Pod 失败后不会自动重启。

总结

Pod 是 Kubernetes 中的核心概念,理解 Pod 的工作原理和配置方式对于使用 Kubernetes 进行应用部署至关重要。
这里放一张yaml格式的资源定义代码图片

在这里插入图片描述

Pod 常见属性

属性说明默认值可选值
apiVersion指示 Pod 使用的 Kubernetes API 版本v1-
kind指示资源类型Pod-
metadata.namePod 名称必填-
metadata.namespacePod 命名空间default-
metadata.labelsPod 标签--
spec.containersPod 中的容器列表必填-
spec.containers.name容器名称必填-
spec.containers.image容器镜像必填-
spec.containers.command容器启动命令--
spec.containers.args容器启动参数--
spec.containers.resources.limits.cpu容器 CPU 资源限制--
spec.containers.resources.limits.memory容器内存资源限制--
spec.containers.resources.requests.cpu容器 CPU 资源请求--
spec.containers.resources.requests.memory容器内存资源请求--
spec.containers.ports.name容器端口名称--
spec.containers.ports.containerPort容器端口号必填-
spec.containers.ports.protocol容器端口协议TCPTCP, UDP
spec.restartPolicyPod 重启策略AlwaysAlways, Never, OnFailure
spec.schedulerNamePod 调度使用的调度器名称default-
spec.nodeSelectorPod 调度到节点的选择器--
spec.affinityPod 的亲和性规则--
spec.tolerationsPod 的容忍度规则--
spec.volumesPod 使用的卷--
spec.volumes.name卷名称必填-
spec.volumes.hostPath.path主机路径卷挂载路径--
spec.volumes.emptyDir.medium空目录卷存储介质-Memory, None
status.conditionsPod 的条件列表--
status.conditions.type条件类型Ready, Running, etc.-
status.conditions.status条件状态True, False-
status.conditions.reason条件原因--
status.containerStatusesPod 中每个容器的运行状态--
status.containerStatuses.name容器名称--
status.containerStatuses.image容器镜像--
status.containerStatuses.containerID容器 ID--
status.containerStatuses.state.running容器运行状态--
status.containerStatuses.state.terminated.reason容器终止原因--
status.containerStatuses.state.terminated.exitCode容器退出码--
status.hostIPPod 所在节点的 IP 地址--
status.podIPPod 的 IP 地址--
status.startTimePod 的创建时间--

原文地址:https://blog.csdn.net/lhq1363511234/article/details/137653667

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!