深入掌握k8s核心概念--Pod(一)
深入探索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.name | Pod 名称 | 必填 | - |
metadata.namespace | Pod 命名空间 | default | - |
metadata.labels | Pod 标签 | - | - |
spec.containers | Pod 中的容器列表 | 必填 | - |
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 | 容器端口协议 | TCP | TCP, UDP |
spec.restartPolicy | Pod 重启策略 | Always | Always, Never, OnFailure |
spec.schedulerName | Pod 调度使用的调度器名称 | default | - |
spec.nodeSelector | Pod 调度到节点的选择器 | - | - |
spec.affinity | Pod 的亲和性规则 | - | - |
spec.tolerations | Pod 的容忍度规则 | - | - |
spec.volumes | Pod 使用的卷 | - | - |
spec.volumes.name | 卷名称 | 必填 | - |
spec.volumes.hostPath.path | 主机路径卷挂载路径 | - | - |
spec.volumes.emptyDir.medium | 空目录卷存储介质 | - | Memory, None |
status.conditions | Pod 的条件列表 | - | - |
status.conditions.type | 条件类型 | Ready, Running, etc. | - |
status.conditions.status | 条件状态 | True, False | - |
status.conditions.reason | 条件原因 | - | - |
status.containerStatuses | Pod 中每个容器的运行状态 | - | - |
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.hostIP | Pod 所在节点的 IP 地址 | - | - |
status.podIP | Pod 的 IP 地址 | - | - |
status.startTime | Pod 的创建时间 | - | - |
原文地址:https://blog.csdn.net/lhq1363511234/article/details/137653667
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!