从零搞懂 Kubernetes:架构剖析 + YAML 实战 + 常用命令速查
从零搞懂 Kubernetes架构剖析 YAML 实战 常用命令速查写在前面本文基于 Kubernetes v1.36代号 Haru编写适用于 v1.30 版本集群。文中所有示例均经过实测验证可直接复制使用。一、为什么需要 Kubernetes在容器化时代Docker 解决了应用打包的问题但当规模从几个容器膨胀到成百上千个时运维噩梦才刚刚开始痛点具体场景规模管理手动docker run启动 200 个容器不现实故障自愈容器崩溃后谁来自动拉起滚动更新如何做到零停机发布新版本、出问题秒级回滚负载均衡请求怎么均匀分发到后端多个实例资源调度哪个节点剩余资源最多哪个节点最适合跑这个服务Kubernetes简称 K8s正是为解决上述问题而生的容器编排平台。它的核心价值可以浓缩为四句话声明式管理—— 你只管写我想要什么K8s 负责把现实掰到你想要的样子自动化运维—— 调度、部署、伸缩、自愈全程无需人工干预解耦架构—— 应用逻辑与底层基础设施彻底分离上云下云随意迁移生态可扩展—— 通过 CRD、Operator、Webhook 等机制无限延伸能力边界二、K8s 集群架构全景图K8s 采用经典的控制平面Control Plane 工作节点Worker Node分层架构。控制平面是大脑工作节点是手脚两者通过 API Server 紧密协作。下面逐一拆解每个组件的职责这是面试高频考点建议熟记。2.1 控制平面四大核心 kube-apiserver —— 集群唯一入口暴露 REST API是所有内部和外部通信的唯一通道所有组件kubectl、kubelet、控制器等都必须通过它来读写集群状态无状态设计可以水平扩展多实例负责认证Authentication、授权Authorization、准入控制Admission Control唯一与 etcd 直接对话的组件安全边界非常清晰记忆技巧把 API Server 想象成公司前台——所有访客请求都必须先登记由前台统一转达。 etcd —— 集群唯一真相源高可用的分布式键值存储基于 Raft 共识算法保证强一致性持久化存储所有集群数据Pod、Service、ConfigMap、Secret 等一切对象的配置和状态生产环境建议部署3 / 5 / 7节点的 etcd 集群以保证高可用只有 API Server 能直接访问 etcd简化了安全模型和一致性保证⚠️血的教训etcd 数据务必定期备份它是整个集群的命根子丢了就全完了。 kube-scheduler —— 智能调度器监听 API Server发现未被调度的新 Pod采用“过滤 → 评分”两阶段算法为 Pod 挑选最优 Node考虑因素包括资源需求CPU、内存的 Request 和 Limit亲和性规则NodeSelector、NodeAffinity、PodAffinity/AntiAffinity数据局部性优先调度到已有相关数据的节点干扰度Disruption避免把高负载 Pod 堆到同一节点只做决策不负责执行——实际拉起容器是 kubelet 的活 kube-controller-manager —— 自动驾驶系统运行一系列控制循环Control Loop不断将实际状态向期望状态靠拢每个控制器逻辑上独立但编译为单个二进制文件、运行在一个进程中核心控制器一览控制器职责Node Controller监控节点健康宕机时标记并驱逐 PodReplicaSet Controller确保指定数量的 Pod 副本始终运行Endpoints Controller维护 Service 与 Pod 的映射关系ServiceAccount Controller为新命名空间创建默认账户和 TokenDeployment Controller管理滚动更新和回滚2.2 工作节点三大组件 kubelet —— 节点上的工头与控制平面通信的节点代理监听 API Server 下发的指令管理本节点 Pod 的完整生命周期通过CRI容器运行时接口调用底层运行时拉镜像、启容器定期向 API Server上报节点和 Pod 的状态执行存活探针LivenessProbe和就绪探针ReadinessProbe⚠️ 只管理 K8s 创建的容器不管野生容器 kube-proxy —— 网络代理与负载均衡维护节点上的网络规则实现 Service 的流量转发支持三种模式iptables默认利用内核 netfilter 规则性能不错ipvs推荐基于内核 L4 负载均衡性能更优支持更多算法userspace已废弃早期方案性能差类比就像公司电话总机把打进来的外部电话请求转接到正确的分机Pod Container Runtime —— 容器的真正执行者负责下载镜像、解压、运行容器K8s 通过CRI 标准接口对接多种运行时不绑定某一种常见选择containerd当前主流轻量高效CRI-O专为 K8s 设计极简主义Docker Engine已废弃内置支持内部仍用 containerd三、PodK8s 的最小调度单元3.1 什么是 PodPod 是 K8s 中最小的可部署计算单元。可以把 Pod 理解为一个逻辑主机——它封装了一个或多个应用容器共享的存储卷Volume独立的网络 IP管理容器运行方式的策略关键特性K8s 调度的最小单位是 Pod不是容器Pod 内的容器共享网络命名空间同一 IP、可 localhost 通信Pod 内的容器共享存储卷Pod 内的容器同生共死生命周期一致3.2 单容器 vs 多容器 Pod单容器 Pod最常见一个 Pod 只跑一个应用容器Pod 就是这个容器的壳。多容器 PodSidecar 模式当多个容器需要紧密协作时使用。典型场景日志收集主容器跑业务Sidecar 容器负责采集日志并推送到 ELK服务网格主容器跑应用Sidecar如 Envoy处理流量劫持和治理适配器模式主容器输出非标准格式Sidecar 做格式转换经验法则如果容器之间不需要共享网络/存储就拆成独立 Pod如果必须 localhost 通信或共享文件才放同一个 Pod。四、YAML 资源清单文件详解K8s 的声明式管理依赖 YAML 文件来描述期望状态。一个标准的资源清单包含四个根字段apiVersion:apps/v1# API 版本不同资源对应不同版本kind:Deployment# 资源类型metadata:# 元数据名称、标签、命名空间等name:my-appnamespace:productionspec:# 期望状态核心配置区replicas:3# ... 具体配置因资源类型而异# status: # 当前状态由 K8s 自动维护用户不写4.1 各字段说明字段说明apiVersionAPI 版本号可用kubectl api-resources查看所有资源对应的版本kind资源种类如 Pod、Deployment、Service、ConfigMap、Ingress 等metadata资源的身份标识name必填、namespace默认 default、labels 等spec资源的期望状态描述不同 kind 结构完全不同4.2 一个完整的 Deployment 示例apiVersion:apps/v1kind:Deploymentmetadata:name:nginx-deploymentlabels:app:nginxspec:replicas:3selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:-name:nginx-containerimage:nginx:1.25ports:-containerPort:80env:-name:ENV_VAR_NAMEvalue:productionresources:requests:memory:64Micpu:250mlimits:memory:128Micpu:500mlivenessProbe:httpGet:path:/port:80initialDelaySeconds:5periodSeconds:10readinessProbe:httpGet:path:/port:80initialDelaySeconds:5periodSeconds:10volumes:-name:config-volumeconfigMap:name:nginx-config4.3 探针机制重点探针类型作用失败后果LivenessProbe检测容器是否存活杀死容器并重启ReadinessProbe检测容器是否就绪从 Service 后端摘除不接收流量StartupProbe检测慢启动应用是否就绪在成功前不会执行 liveness 检查三种探针都支持httpGet、tcpSocket、exec三种检测方式。五、kubectl 常用命令速查表kubectl 命令的通用语法kubectl[command][TYPE][NAME][flags]5.1 资源查看类# 查看所有 Pod默认命名空间kubectl get pods# 查看所有命名空间的 Podkubectl get pods-Akubectl get pods --all-namespaces# 查看指定命名空间的服务kubectl get svc-nnamespace# 查看所有 Deploymentkubectl get deployments# 宽格式输出含节点信息kubectl get pods-owide# 查看节点状态kubectl get nodes# 以 YAML 格式导出资源定义常用于备份kubectl get podpod-name-oyaml# 动态监听资源变化类似 tail -fkubectl get pods-w5.2 资源详情与诊断# 查看 Pod 详细信息含事件、IP、状态kubectl describe podpod-name# 查看 Node 详细信息kubectl describenodenode-name# 查看 Deployment 详情kubectl describe deploymentdeployment-name5.3 创建 / 更新 / 删除# 从 YAML 文件创建资源首次创建用kubectl create-fmanifest.yaml# 创建或更新资源声明式推荐日常使用kubectl apply-fmanifest.yaml# 从 URL 直接创建kubectl apply-fhttps://example.com/manifest.yaml# 删除 YAML 定义的资源kubectl delete-fmanifest.yaml# 删除指定 Podkubectl delete podpod-name# 强制删除卡在 Terminating 的 Podkubectl delete podpod-name--force--grace-period0# 删除命名空间下所有 Podkubectl delete pods--all-nnamespace5.4 日志与调试排障利器# 查看 Pod 日志kubectl logspod-name# 多容器 Pod 中查看指定容器日志kubectl logspod-name-ccontainer-name# 实时跟踪日志类似 tail -fkubectl logs-fpod-name# 查看上一次崩溃的日志排障超有用kubectl logs-ppod-name# 进入 Pod 交互式终端kubectlexec-itpod-name-- /bin/bash# 多容器 Pod 中进入指定容器kubectlexec-itpod-name-ccontainer-name-- /bin/sh# 不进入交互模式直接执行命令kubectlexecpod-name--ls/app5.5 端口转发# 本地 8080 → Pod 80kubectl port-forwardpod-name8080:80# 本地 8080 → Service 80kubectl port-forward service/service-name8080:80# 后台运行kubectl port-forwardpod-name8080:805.6 辅助命令# 查看所有资源类型及其 API 版本kubectl api-resources# 查看 YAML 字段含义官方文档内嵌超好用kubectl explain pod.spec.containers# 查看集群信息kubectl cluster-info# 切换命名空间避免每次 -nkubectl config set-context--current--namespacetest-dev六、实战从零部署一个 Nginx 服务理论讲完动手才是王道。下面演示如何在本地 K8s 环境Minikube / Kind / Docker Desktop 均可部署一套完整的 Nginx 服务。6.1 创建命名空间# 01-namespace.yamlapiVersion:v1kind:Namespacemetadata:name:web-demo6.2 创建 Deployment# 02-deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:nginx-deploynamespace:web-demolabels:app:nginxspec:replicas:3selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:-name:nginximage:nginx:1.25ports:-containerPort:80resources:requests:memory:64Micpu:50mlimits:memory:128Micpu:100mlivenessProbe:httpGet:path:/port:80initialDelaySeconds:30periodSeconds:10readinessProbe:httpGet:path:/port:80initialDelaySeconds:5periodSeconds:56.3 创建 Service 暴露服务# 03-service.yamlapiVersion:v1kind:Servicemetadata:name:nginx-svcnamespace:web-demospec:selector:app:nginxports:-protocol:TCPport:80targetPort:80type:ClusterIP6.4 一键部署 验证# 依次创建资源kubectl apply-f01-namespace.yaml kubectl apply-f02-deployment.yaml kubectl apply-f03-service.yaml# 也可以用 --- 分隔符合并到一个文件一条命令搞定kubectl apply-fall-in-one.yaml# 查看部署进度kubectl get pods-nweb-demo-w# 查看 Service 详情和端口映射kubectl get svc-nweb-demo# 进入 Pod 内部验证kubectlexec-it-nweb-demopod-name-- /bin/bash# 查看 Pod 日志kubectl logs-nweb-demopod-name# 端口转发到本地浏览器访问验证kubectl port-forward-nweb-demo svc/nginx-svc8080:80# 浏览器打开 http://127.0.0.1:8080 即可看到 Nginx 欢迎页6.5 合并版 YAML一个文件搞定# all-in-one.yamlapiVersion:v1kind:Namespacemetadata:name:web-demo---apiVersion:apps/v1kind:Deploymentmetadata:name:nginx-deploynamespace:web-demolabels:app:nginxspec:replicas:3selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:-name:nginximage:nginx:1.25ports:-containerPort:80resources:requests:memory:64Micpu:50mlimits:memory:128Micpu:100mlivenessProbe:httpGet:path:/port:80initialDelaySeconds:30periodSeconds:10readinessProbe:httpGet:path:/port:80initialDelaySeconds:5periodSeconds:5---apiVersion:v1kind:Servicemetadata:name:nginx-svcnamespace:web-demospec:selector:app:nginxports:-protocol:TCPport:80targetPort:80type:ClusterIP 使用---分隔符可以在一个 YAML 文件中定义多个资源K8s 会按顺序依次创建。七、排障思路总结当 Pod 出现异常时推荐按以下顺序排查kubectl get pods → 看状态Pending? CrashLoopBackOff? kubectl describe pod pod-name → 看事件镜像拉取失败调度失败 kubectl logs pod-name → 看应用日志 kubectl logs -p pod-name → 看上一次崩溃日志 kubectl exec -it pod-name -- sh → 进容器排查 kubectl get events -n ns → 看命名空间级别事件八、学习建议先跑通再理解用 Minikube 或 Kind 在本地搭一套单节点集群把本文所有命令敲一遍善用kubectl explain这是内置的官方文档比翻网页快得多从 Pod → Deployment → Service的顺序逐步学习不要一上来就搞 Ingress Istio多看官方文档kubernetes.io 的中文文档质量已经很高了参考资源Kubernetes 官方文档https://kubernetes.io/zh-cn/docs/Kubernetes v1.36 Release Noteskubectl api-resources/kubectl explain命令输出

相关新闻

2026年超实用电钢琴大揭秘!究竟哪个质量才是真正的好?

2026年超实用电钢琴大揭秘!究竟哪个质量才是真正的好?

在2026年的电钢琴市场中,消费者面临着众多的选择,如何挑选一款质量好、适合自己的电钢琴成为了关键问题。今天,我们就来深入了解一些市场上的电钢琴品牌,为你提供客观的参考。德国博兰斯勒钢琴集团旗下霍普菲德电钢琴霍普菲德作为…

2026/8/2 5:51:39 阅读更多 →
京华游记之六:在齿轮与钢梁之间,看见另一种北京

京华游记之六:在齿轮与钢梁之间,看见另一种北京

从中国科技馆出来的时候,暮色已经降临。 两个孩子在里面泡了将近整个白天。小女儿在科学乐园里反复玩着“小球大冒险游戏”,每回看见小球弹起来便咯咯地笑,仿佛那里面藏着什么天大的秘密。大儿子则蹲在齿轮墙前,盯着咬合的齿牙看…

2026/8/2 5:51:39 阅读更多 →
域名常见问题集(二十二)——管理WHOIS联系记录

域名常见问题集(二十二)——管理WHOIS联系记录

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

2026/8/2 5:51:39 阅读更多 →

最新新闻

软件工程高效复习指南:从理论到实践,掌握核心模型与建模工具

软件工程高效复习指南:从理论到实践,掌握核心模型与建模工具

1. 项目概述:为什么我们需要系统化复习软件工程?又到了期末季,或者可能是你正在准备考研、求职面试,手边摊开一本厚厚的《软件工程》教材,看着里面瀑布模型、敏捷开发、UML图、DFD图这些名词,是不是感觉头都…

2026/8/2 22:13:32 阅读更多 →
yt-player高级技巧:实现播放速度控制与视频质量切换的完整教程

yt-player高级技巧:实现播放速度控制与视频质量切换的完整教程

yt-player高级技巧:实现播放速度控制与视频质量切换的完整教程 【免费下载链接】yt-player Simple, robust, blazing-fast YouTube Player API 项目地址: https://gitcode.com/gh_mirrors/yt/yt-player yt-player是一款简单、健壮且速度极快的YouTube Player…

2026/8/2 22:13:32 阅读更多 →
从源码到部署:RSKj节点运行全流程(含Docker与Ubuntu方案)

从源码到部署:RSKj节点运行全流程(含Docker与Ubuntu方案)

从源码到部署:RSKj节点运行全流程(含Docker与Ubuntu方案) 【免费下载链接】rskj RSKj is a Java implementation of the Rootstock protocol. 项目地址: https://gitcode.com/gh_mirrors/rs/rskj RSKj是Rootstock协议的Java实现&#…

2026/8/2 22:13:32 阅读更多 →
W5500硬件TCP/IP芯片KeepAlive功能配置与调试实战指南

W5500硬件TCP/IP芯片KeepAlive功能配置与调试实战指南

1. 项目概述:为什么W5500的KeepAlive功能值得深究? 如果你正在用W5500这颗经典的硬件TCP/IP协议栈芯片做网络通信,尤其是涉及长时间稳定连接的应用,比如远程数据采集、物联网设备状态上报或者工业控制,那么“KeepAlive…

2026/8/2 22:13:32 阅读更多 →
哈夫曼算法实战:优先队列与双队列法解决最优合并问题

哈夫曼算法实战:优先队列与双队列法解决最优合并问题

1. 问题引入:从“砍木头”到“最优合并”最近在重温一些经典的数据结构与算法问题,其中“修理牧场”这道题让我印象颇深。它初看之下像是一个简单的模拟题,但深入思考后,会发现其背后是“最优合并”思想的绝佳体现。这道题的核心场…

2026/8/2 22:13:32 阅读更多 →
如何轻松构建离线AI平台?Open WebUI终极指南

如何轻松构建离线AI平台?Open WebUI终极指南

如何轻松构建离线AI平台?Open WebUI终极指南 【免费下载链接】open-webui User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 项目地址: https://gitcode.com/GitHub_Trending/op/open-webui 你是否曾想过拥有一个完全离线的AI助手&#xff0c…

2026/8/2 22:12:31 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →