k8s中, deployments 、pods 、replica sets 、services 他们分别是什么?有什么关联?

Kubernetes (K8s) 中 Deployments, Pods, ReplicaSets, 和 Services 这几个核心概念以及它们之间的关联。

  1. Pod
  • 是什么: Pod 是 Kubernetes 中最小的部署和管理单元。它代表集群中运行的一个或多个紧密耦合的容器化进程。Pod 内的容器共享网络 IP、存储卷(Volume)和一些 Linux 命名空间,它们可以像一个整体一样被管理和调度。
  • 特点: Pod 是短暂的(ephemeral),其生命周期不固定。当 Pod 被删除或 Pod 内的容器崩溃时,Pod 就会消失。Kubernetes 不会尝试恢复一个失败的 Pod,而是创建一个新的 Pod 来替代它。
  1. ReplicaSet
  • 是什么: ReplicaSet(副本集)确保任何时候集群中都有指定数量(replicas)的 Pod 副本在运行。它提供了高可用性和伸缩性。
  • 作用: 你告诉 ReplicaSet 你想要 3 个运行 Nginx 的 Pod 副本,ReplicaSet 控制器会持续监控集群中的 Pod 数量。如果某个 Pod 意外终止,ReplicaSet 会自动创建一个新的 Pod 来维持期望的副本数。如果 Pod 数量超过了期望值,它会删除多余的 Pod。
  • 关联: ReplicaSet 直接管理 Pod。它通过标签(Labels)选择器(Selector)来识别和管理它所控制的 Pod。
  1. Deployment
  • 是什么: Deployment 是一个更高级别的抽象,它为 Pod 和 ReplicaSet 提供了声明式的更新能力。它允许你以声明的方式定义应用程序的期望状态(例如,运行多少个副本、使用哪个容器镜像、如何更新等),并由 Deployment 控制器负责将集群的当前状态逐步调整到期望状态。
  • 作用: Deployment 的主要优势在于它支持滚动更新(Rolling Updates)和回滚(Rollback)。你可以通过修改 Deployment 的配置(如镜像版本)来触发更新,Deployment 会按照策略(如一次更新几个 Pod)逐步替换旧的 Pod 为新的 Pod,而无需停机。如果更新出现问题,可以轻松回滚到之前的版本。
  • 关联: Deployment 管理 ReplicaSet。当你创建一个 Deployment 时,它会自动创建一个 ReplicaSet。这个 ReplicaSet 再去管理实际的 Pod。因此,Deployment 是一个两层控制器:Deployment 控制 ReplicaSet,ReplicaSet 控制 Pod。
  1. Service
  • 是什么: Service 定义了一种抽象,它定义了一组 Pod 的逻辑集合和访问这组 Pod 的策略(通常是负载均衡)。Pod 的 IP 地址是动态分配的,当 Pod 因为失败或伸缩而被替换时,其 IP 地址会发生变化。Service 为这些动态的 Pod 提供了一个稳定的网络端点(IP 地址和端口)。
  • 作用: 主要解决 Pod 的网络访问问题。它使得 Pod 之间可以互相发现和通信,也使得集群外部的应用或用户可以访问集群内部的服务。
  • 关联: Service 通过标签(Labels)选择器(Selector)来找到它要访问的 Pod 集合。它不直接管理 Pod,而是根据选择器动态地维护一个 Pod IP 列表,并将流量分发给列表中的 Pod。

它们之间的关联(工作流程)

  1. 定义期望状态: 用户创建一个 Deployment 对象,定义了期望的应用状态(例如,运行 3 个 nginx:1.20 镜像的 Pod)。
  2. 创建 ReplicaSet: Deployment 控制器观察到新的 Deployment,会创建一个 ReplicaSet 对象,其期望副本数为 3。
  3. 管理 Pod: ReplicaSet 控制器观察到新的 ReplicaSet,会创建 3 个 Pod 对象,以满足期望的副本数。ReplicaSet 会持续监控这些 Pod,并确保始终有 3 个健康的 Pod 运行。
  4. 提供网络访问: 用户创建一个 Service 对象,该对象通过标签选择器(例如,app=nginx)关联到这 3 个 Pod。Service 为这组 Pod 提供一个稳定的虚拟 IP (ClusterIP) 和端口。
  5. 流量分发: 集群内外的其他组件或用户可以通过 Service 的 IP 和端口来访问这 3 个 Pod 提供的服务。Service 会自动将流量负载均衡到后端的 Pod 上。
  6. 更新与伸缩: 当用户需要更新应用(如镜像版本)或伸缩副本数时,只需修改 Deployment 对象。Deployment 控制器会相应地创建一个新的 ReplicaSet 来管理新版本的 Pod,并通过控制两个 ReplicaSet 的副本数来实现滚动更新,同时 Service 会自动将流量导向新的和旧的 Pod(在更新过程中),直到更新完成。

总结:

  • Pod: 最小的运行单元,包含一个或多个容器。
  • ReplicaSet: 确保指定数量的 Pod 副本稳定运行。
  • Deployment: 更高级的控制器,管理 ReplicaSet,提供声明式更新(滚动更新、回滚)的能力。
  • Service: 为 Pod 提供稳定的网络访问方式(负载均衡、服务发现)。

层级关系: Deployment -> ReplicaSet -> Pod。Service 通过标签选择器关联到 Pod(通常是由 Deployment/ReplicaSet 管理的 Pod)。

相关推荐
淬炼之火12 小时前
基于Docker Desktop 和 Ubuntu 在 Windows上部署轻量化大模型(Qwen-LLM)
笔记·ubuntu·docker·语言模型·容器
噎住佩奇12 小时前
k8s-控制器
容器·kubernetes
ProgrammerPulse12 小时前
K8s 运维告别 “猜谜游戏”:青云云易捷v6.0对接 K8sGPT,AI 赋能一键解锁智能诊断
云原生
是火云哦12 小时前
打包你的开发环境:Docker 从入门到上瘾
运维·docker·容器
今晚打佬虎13 小时前
精准阻断 Docker 容器映射端口:流量路径诊断与 iptables 配置
运维·docker·容器
星图易码13 小时前
星图云开发者平台功能详解 | 微服务管理器:异构服务零门槛无缝集成
微服务·云原生·架构
yuezhilangniao13 小时前
K8s优化-大规模集群优化-大规模K8S优化-性能优化速查表-优化顺序-先阻塞瓶颈再性能瓶颈
容器·性能优化·kubernetes
小二·14 小时前
Go 语言系统编程与云原生开发实战(第4篇):数据持久化深度实战 —— PostgreSQL、GORM 与 Repository 模式
postgresql·云原生·golang
麦兜*14 小时前
深入解析云原生时代的高性能消息中间件:基于Apache Pulsar与Kafka架构对比的万亿级数据吞吐与低延迟实时处理实战
云原生·kafka·apache
KubeSphere 云原生14 小时前
在 KubeSphere 上运行 Moltbot(Clawdbot):自托管 AI 助手的云原生实践
docker·云原生·容器