k8s的pod管理与控制器

发布时间:2026/10/26 22:09:54

k8s的pod管理与控制器 一、pod1.Pod 核心概念Pod 是 K8s 最小调度单元不是容器一个 Pod 可以运行 1 个或多个容器。Pod 内容器共享网络命名空间 (Pod‑IP)、共享存储 (volume)。Pod 生命周期短暂Pod 删除后不能复活重建就是全新 PodPod‑IP 会变。裸 Pod直接 kubectl run /yaml 创建不受控制器管理删除之后不会自动重建。生产几乎不直接创建裸 Pod一般由控制器管理 PodDeployment、ReplicaSet、StatefulSet、DaemonSet、Job、CronJob。2.Pod 生命周期状态状态含义Pending已经存入 etcd还没调度 / 正在拉取镜像ContainerCreating调度完成节点 kubelet 正在创建容器、拉镜像Running容器已经启动正常运行Succeeded一次性任务执行完成正常退出Failed容器异常崩溃退出Unknownapiserver 和节点 kubelet 通信中断常见报错状态ErrImagePull / ImagePullBackOff镜像拉取失败CrashLoopBackOff容器反复启动崩溃3.Pod 常用管理命令[rootk8s-master ~]# kubectl get namespaces #查看命名空间[rootk8s-master ~]# kubectl create namespace llj #创建命名空间[rootk8s-master ~]# kubectl delete namespaces llj #删除命名空间[rootk8s-master ~]# kubectl run llj --image nginx:latest #创建 pod 指定命名空间裸 Pod无控制器[rootk8s-master ~]# kubectl get pods -n llj 查看指定命名空间资源[rootk8s-master ~]# kubectl get pods -o wide #查看 Pod 列表(PodIP、运行在哪个节点)[rootk8s-master ~]# kubectl get pod llj -o yaml #查看pod完整yaml[rootk8s-master ~]# kubectl describe pod llj #查看pod详细事件、状态信息[rootk8s-master ~]# kubectl get pods -w #实时监控pod状态变化[rootk8s-master ~]# kubectl exec -it llj -- /bin/sh #交互式进入容器[rootk8s-master ~]# kubectl logs llj #查看日志[rootk8s-master ~]# kubectl logs -f llj #持续实时日志[rootk8s-master ~]# kubectl attach pod llj #连接到容器标准输出看控制台流attach 实时连接容器logs 读取已生成日志[rootk8s-master ~]# kubectl delete pod llj #按名字删除单个pod[rootk8s-master ~]# kubectl delete pods --all #删除default下所有pod-n指定其他nstips如果 Pod 是 Deployment 管理的删除 Pod 后ReplicaSet 立刻新建一个 Pod 补足副本数Pod 杀不完要么删deployment要么缩副本数为 0或删除 yaml 资源文件[rootk8s-master ~]# kubectl label pod llj envtest #给pod打标签[rootk8s-master ~]# kubectl label pod testpod env- #删除标签[rootk8s-master ~]# kubectl get pods --show-labels #查看所有pod的标签[rootk8s-master ~]# kubectl get pods -l appwebcluster #标签筛选pod二、控制器1.控制器是什么控制器运行在 kube‑controller‑manager负责管理 Pod 的生命周期实现自愈、扩容缩容、滚动更新、任务调度。裸 Podkind:Pod没有控制器管理删除之后不会重建。被控制器管理的 Pod控制器监控实际状态不断向期望状态对齐。2.6 种最常用控制器控制器作用适用场景Deployment无状态应用支持滚动更新、回滚Web 网站myapp、nginx最常用ReplicaSet保证一定数量 Pod 副本存活Deployment 底层依赖一般不直接创建StatefulSet有状态应用Pod 名称、IP 稳定有序MySQL 主从、Redis 集群DaemonSet每一个节点运行 1 个 Pod日志采集、监控代理、flannel 网络Job一次性任务执行完成 Pod 退出就结束备份、一次性脚本任务CronJob定时周期性执行任务每天凌晨备份定时任务(1)Deployment重中之重面试最高频Deployment上层管理者负责版本、滚动更新、回滚ReplicaSet保证副本数量Pod 挂了立刻重建Pod业务容器实例核心能力自愈Pod 崩溃、节点宕机自动重建 Pod扩容缩容修改副本数量滚动更新升级镜像逐步替换旧 Pod业务不中断版本回滚升级失败可以退回旧版本[rootk8s-master ~]# kubectl create deployment webcluster --image myapp:v1 #创建 Deployment[rootk8s-master ~]# kubectl edit deployments.apps webcluster #在线直接编辑 Deployment yaml实时生效edit全量编辑patch局部修改[rootk8s-master ~]# kubectl patch deployment nginx -p {spec:{replicas:2}} #修改副本数增量打补丁局部修改不用改完整 yaml[rootk8s-master ~]# kubectl expose deployment nginx --port80 --target-port80 #给 Pod 套一层访问入口Service外部 / 集群内可以通过 Service 访问 Pod,这条命令等价于手动写一份 Service 的 yaml 然后kubectl apply[rootk8s-master ~]# kubectl cp /tmp/test.txt pod名:/root/ #主机文件传到pod[rootk8s-master ~]# kubectl cp pod名:/root/test.txt /tmp/ #pod文件拷回主机[rootk8s-master ~]# kubectl rollout history deployment nginx #查看更新历史[rootk8s-master ~]# kubectl rollout undo deployment nginx #回滚上一版本[rootk8s-master ~]# kubectl rollout status deployment nginx #查看发布状态tipsrollout 只能用于 Deployment、DaemonSet、StatefulSet[rootk8s-master ~]# kubectl scale deployment nginx --replicas3 #扩缩副本数[rootk8s-master ~]# kubectl scale deployment nginx --replicas0 #扩缩副本数[rootk8s-master ~]# kubectl label deployment nginx envtest #给deployment打标签命令作用对象核心用途create deploymentDeployment创建edit deploymentDeployment全量在线修改 yamlpatch deploymentDeployment局部增量修改expose deploymentDeployment生成 Servicerollout deploymentDeployment滚动更新 / 回滚scale deploymentDeployment扩缩副本label任意资源打标签logsPod查看日志attachPod附着容器控制台execPod进入容器执行命令cpPod容器与主机传文件(2)ReplicaSet作用维持指定副本数量几乎不会单独创建 ReplicaSet由 Deployment 自动创建。如果你直接删 PodReplicaSet 马上新建 Pod 补足数量。kubectl get rs(3)DaemonSet特点集群每个节点上都会启动 1 个 Pod新增节点也会自动部署 Pod。典型例子flannel、监控、日志收集。kubectl get ds(4)StatefulSet有状态应用Deployment 创建出来的 Pod 是无状态随机名字IP 每次重建都会变StatefulSet Pod 名字固定有序mysql‑0、mysql‑1Pod 网络标识稳定不变。适合数据库集群。kubectl get statefulsets(5)Job 一次性任务Pod 执行完任务正常结束不再重启。(6)CronJob 定时任务类似 Linux crontab周期性定时运行 Jobtips: Deployment无状态web 业务滚动更新回滚DaemonSet每个节点跑 1 个 Pod网络插件 flannel 就是 DaemonSetStatefulSet有状态数据库集群Pod 名字固定Job一次性任务CronJob定时任务ReplicaSet 只管副本数没有版本管理能力不能回滚裸 Pod VS 控制器管理 Pod最重要考点1. 裸 Podkind:Pod没有上层控制器删除 Pod → 不会自动重建不会滚动更新、扩容缩容实验测试临时使用生产禁止。2. Deployment最常用无状态 Pod 控制器Deployment → ReplicaSet → PodDeployment 负责版本、滚动更新、回滚ReplicaSet 负责保证指定数量副本 Pod 一直活着直接删除 Deployment级联删除 RS 所有 PodClusterIP 实验的工作原理与完整时序流程图通过Deployment webclusterDeployment不直接创建 Pod只管理 ReplicaSetkubectl apply -f deploy.yaml提交 Deployment 到 APIServerapiserver 校验 yaml 格式把 Deployment 资源存入 etcd 数据库Deployment 控制器发现期望副本replicas:2当前没有ReplicaSet创建一个 ReplicaSet 资源RS 模板完全复制 Deployment 的 pod 模板RS 控制器读取自己的配置spec.replicas:2 期望 2 个 Podspec.selector.matchLabels: app:webcluster 筛选属于自己的 Pod查询 etcd当前没有匹配标签的 Pod于是 RS 按照 template构造 2 个 Pod 对象提交给 apiserver 存入 etcd。kube‑scheduler调度器发现一批 spec.nodeName(主机名 为空的Pending Pod调度算法选出节点把节点名写入Pod.spec.nodeName已经把 Pod 绑定到该节点更新etcd。kubelet 监听 apiserver 的 Pod 资源变化收到事件有一个 Podspec.nodeName 当前节点主机名这个 Pod 归我管理。真正开始在节点构建 Podkubelet 开始干活①拉取镜像 myapp:v1②准备存储、环境变量③调用 CNI‑flannel 分配 PodIP配置 veth‑pair 网络④调用容器运行时 (containerd/docker)↓创建2个Pod给每个Pod的 metadata.labels app:webcluster↓CNI(flannel)给每个Pod分配PodIPPod ReadyTrue↓Endpoints控制器读取Service.spec.selector(app:webcluster)筛选出这两个Pod取出PodIP targetPort(80)↓存入同名Endpoints资源webservice↓Service iptables/ipvs读取Endpoints列表做负载均衡curl ClusterIP → 轮流转发到 10.244.2.8:80 / 10.244.5.95:80service的ipvs模式1.在所有节点中安装ipvsadm工具[rootk8s-master ~]# for name in 100 10 20 254 do ssh -l root 172.25.254.$name dnf install ipvsadm -y done2.配置集群中的kube-proxy[rootk8s-master ~]# kubectl -n kube-system edit cm kube-proxy59 mode: ipvs #修改 kube‑proxy ConfigMap 开启 ipvs 模式tips改完 ConfigMap 不会自动生效ConfigMap 更新了但是现存的 kube‑proxy Pod 不会自动读取新配置必须重建 kube‑proxy Pod新启动的 Pod 才会加载 mode:ipvs[rootk8s-master ~]# kubectl -n kube-system get pods[rootk8s-master ~]# kubectl -n kube-system delete pods kube-proxy-7cjrg kube-proxy-7vpjw kube-proxy-hnrqf #删除所有 kube‑proxy podDeployment会自动重建[rootk8s-master ~]# ipvsadm -Ln #验证是否已经切换 ipvs 模式
延伸阅读

更多相关文章

2026/10/25 20:12:32

alma8.10/anolis8.10中使用gcc13并安装vllm

其实初衷是想在alma中使用vllm。 但是安装编译时提示出错,因为alma中是安装的gcc8.4,所以要想办法解决这个问题。 1、此版本不能再使用crb了,这个已经弃用了,使用powertools。 dnf config-manager --set-enabled powertools2、尝试…

2026/10/25 14:49:33

女主播的“单身人设”到底值多少钱?——2500万打赏背后的法律红线

2500万元。这不是一桩商业并购案的金额,而是一名女主播凭借“单身未婚”人设从三名男粉丝手中获取的打赏总额。近日,95后抖音女主播魏莹被控诈骗一案再度引发舆论热议。这位福建连江籍、拥有近200万粉丝的女主播,2019年入局直播后长期隐瞒已婚…

2026/10/25 11:58:15

mac串流pc游戏方法 mac怎么串流pc游戏

不少Mac用户都面临着游戏适配难题,很多优质PC独占游戏无法在Mac设备上运行,想要突破设备限制,mac串流pc游戏就成了最优解决方案。想要实现稳定、高清、低延迟的mac串流pc游戏,选对工具是核心关键,对比多款串流软件后&a…

2026/10/26 22:07:07

性能测试实战指南:从原理到JMeter应用

1. 性能测试的江湖地位与核心价值性能测试在软件工程领域就像汽车出厂前的极限路测——不把发动机转速拉到红线、不把刹车踩到冒烟,你永远不知道这车在真实路况下会不会关键时刻掉链子。我做了8年性能测试,从电商秒杀到金融交易系统,见过太多…

2026/10/26 22:07:07

程序员成长路径:从语法到架构的进阶指南

1. 程序员的成长路径解析刚入行时,我总在思考一个问题:那些被称作"高手"的程序员,究竟是如何练成的?经过十多年的摸爬滚打,我发现这个问题的答案远比想象中复杂。今天就来聊聊程序员成长过程中的那些关键转折…

2026/10/26 22:07:07

C# WPF与TCP实现网络对战消消乐开发指南

1. 项目概述:基于C# WPF与TCP的开心消消乐实现这个项目本质上是在Windows平台上用C# WPF框架开发一款具备网络对战功能的消消乐游戏。WPF提供了现代化的UI渲染能力,而TCP协议栈则负责处理玩家间的实时数据同步。从技术选型来看,这种组合非常适…

2026/10/26 22:07:07

shttpd CGI源码拆解:嵌入式Web服务器动态请求实现

做嵌入式Web服务器这行的人,多多少少都碰过这样的需求:设备上跑着一个几十KB的HTTP服务,页面是静态的,但偶尔要读一次传感器、查一次配置、点一下重启,静态文件就不够用了。这时候要么塞一个模板引擎进去,要…

2026/10/26 22:07:07

Claude模型本地缓存与内存优化技术解析

我无法根据当前输入生成符合要求的博文内容。原因如下:输入中仅提供了项目标题"claude-mem",以及相关热搜词和空的网络搜索内容(),未提供任何实质性描述、场景说明、功能定义或上下文信息;根据任…

2026/10/26 22:02:03

开源AI项目管理工具选型与实战指南

1. 开源AI项目管理工具的价值与现状在AI项目开发过程中,团队协作和流程管理一直是痛点所在。传统项目管理工具如Jira、Trello虽然功能完善,但缺乏针对AI研发场景的专门优化。而GitHub上涌现的一批开源AI项目管理工具,正逐渐改变这一局面。这些…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/26 0:20:17

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/26 0:00:48

Nested Learning:解决AI灾难性遗忘的分层记忆架构

1. 为什么AI需要"记忆"能力?在传统深度学习模型中,我们常遇到一个根本性问题:模型在处理新任务时,往往会完全遗忘之前学到的知识。这种现象被业界称为"灾难性遗忘"(Catastrophic Forgetting)。想象一下&#…

2026/10/26 0:00:48

企业级大模型应用:OCR预处理、Dify编排与DeepSeek落地实战

1. 这不是“用大模型”,而是重构工作流的起点“大模型的应用和工具”——这八个字现在被贴在无数技术分享、招聘JD、内部立项书的标题栏里,但绝大多数人点进去后看到的,是零散的API调用示例、几个开源UI截图、或者一句“接入LLM就能降本增效”…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑