核心工作单元:跑应用的“载体”

1. Pod:K8s最小部署单元,含1个或多个紧密关联的容器(共享网络/存储)。

例:像“一个快递盒”,里面可能装“商品(主应用)”和“泡沫(辅助工具,如日志收集器)”,盒子拆了(Pod销毁),里面的东西也没了。

2. 控制器(管理Pod的“管家”)

Deployment::管理无状态应用(如Web服务),确保指定数量的Pod始终运行,支持更新/回滚。

:像“奶茶店店长”,保证始终有3个员工(Pod)在岗,员工离职了立刻招新的,换配方(更新应用)不影响营业。

StatefulSet::管理有状态应用(如数据库),Pod有固定身份(名称/网络),数据持久化。

:像“银行服务器”,每个机器有固定编号,数据不能乱换,重启后身份不变。

DaemonSet:确保所有节点都运行同一个Pod(如监控工具)。

:像“每个办公室都装一个监控摄像头”,新办公室(节点)建好就自动装。

网络与访问:应用“通信”的规则

Service:为一组Pod提供固定访问地址,实现负载均衡(Pod IP变了也能访问)。

Ingress:管理外部访问规则(如用域名/路径区分服务),相当于集群“大门”。

例:像“小区门卫”,访客说“找3栋201”(域名+路径),门卫指引到对应住户(服务)。

配置与存储:应用“吃喝”的保障

ConfigMap/Secret:存储配置信息(ConfigMap存非敏感数据,如地址;Secret存敏感数据,如密码)。

:像“便利贴(记普通信息)”和“带锁笔记本(记密码)”,应用按需查看。

PV/PVC:PV是集群“共享存储”(如硬盘),PVC是Pod的“存储申请单”(申请多大空间)。
例:像“仓库货架(PV)”和“领货单(PVC)”,应用凭单领货架放东西,不怕丢。

管理工具:资源“分类”的方法

Namespace:集群内的“逻辑分区”,隔离不同环境(如开发/生产)。

例:像“公司的不同部门”,研发部(开发环境)和销售部(生产环境)各用各的资源。

标签(Label):给资源贴“键值对标签”(如app=web),用于筛选和管理。

:像“文件上的便利贴标签”,标上“重要”“项目A”,方便查找。

总结:K8s像个“智能工厂”

控制平面是“指挥中心”,节点是“车间”;Pod是“最小工件”,控制器是“车间主任”;Service/Ingress是“内外通信线”,ConfigMap/存储是“物料库”。这些部分配合,让K8s能自动管理成百上千个应用,稳定又高效。

什么是 Pod

Pod是调度和运行的最小单元,它包含一个或多个容器,并共享网络和存储资源。

Pod的创建流程

k8s创建Pod的流程本质是多组件协同工作的过程,核心围绕API Server、etcd、Scheduler、kubelet和容器运行时展开,共分为6个关键步骤。

提交创建请求并完成认证授权

  • API Server首先对请求进行认证(确认请求者身份,如Token、证书)。
  • 接着进行授权(检查请求者是否有创建Pod的权限,基于RBAC规则)。
  • 最后进行准入控制(通过Admission Controller插件校验配置合法性,如资源限制是否合理)。

存储Pod配置到etcd

  • etcd是k8s的唯一数据存储,负责保存所有集群资源的终态数据。
  • 此时Pod的状态被标记为Pending,表示请求已接收但尚未调度

Scheduler调度Pod到目标节点

过滤    

打分

绑定

kubelet启动Pod容器

  • kubelet调用容器运行时(如containerd、CRI-O),根据Pod配置拉取镜像、创建容器网络(如CNI插件配置Pod网络)、挂载存储卷(如CSI插件挂载PV)。
  • 容器启动后,kubelet会持续监控容器状态,并将状态(如RunningError)通过API Server更新到etcd。

健康检查与状态维护

pod启动 k8s会根据pod配置的探针进行健康检查

存活探针(Liveness Probe):判断容器是否存活,失败则重启容器。

就绪探针(Readiness Probe):判断容器是否可提供服务,失败则将Pod从Service endpoints中移除。

状态会实时同步到API Server和etcd,用户可通过kubectl get pods查看最新状态。

流程结束:Pod进入Running状态

当所有容器启动成功、健康检查通过后,Pod状态最终变为Running,整个创建流程完成。

Pod 的网络

  • 每个Pod被分配了唯一的IP地址,该Pod内的所有容器共享一个网络空间,包括IP和端口。

Pod的生命周期

Pod的生命周期是指Pod从创建到终止的整个过程。

Pending( Pending):在这个阶段,Pod已经被Kubernetes系统接受,但一个或多个容器图像尚未创建。这意味着调度已经完成,但容器尚未启动。

Running(运行中):当Pod中的所有容器都已成功启动,并且至少有一个容器仍在运行时,Pod进入Running状态。在这个状态下,Pod是活跃的,并且可以处理请求。

Succeeded(已完成):当Pod中的所有容器都已成功完成执行,并且不会再次启动时,Pod进入Succeeded状态。这通常发生在批处理作业或一次性任务完成后。

Failed(失败):如果Pod中的所有容器都已退出,但至少有一个容器因为非零退出状态而失败,则Pod进入Failed状态。这表示任务未能成功完成。

Unknown(未知):当Kubernetes无法获取Pod的状态时,例如由于与节点的通信故障,Pod进入Unknown状态。

  • Initialized:所有初始化容器都已经成功执行。
  • Ready:Pod已准备就绪,可以响应请求。
  • ContainersReady:所有容器都已经成功启动。
  • PodScheduled:Pod已经调度到某个节点上。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐