0

0

Kubernetes是什么_K8s核心组件与作用说明

P粉602998670

P粉602998670

发布时间:2026-01-28 11:19:02

|

663人浏览过

|

来源于php中文网

原创

Kubernetes 是一套分布式控制平面与节点代理协同工作的系统,核心在于各组件基于 etcd 状态异步对齐;API Server 是唯一可信入口,负责认证、鉴权与准入控制,绕过它将导致状态撕裂。

kubernetes是什么_k8s核心组件与作用说明

Kubernetes 不是“一个软件”,而是一套协同工作的分布式控制平面 + 节点代理系统;它本身不运行容器,而是调度、约束、观测和修复容器的生命周期。

API Server 是集群唯一可信入口,所有操作都必须过它

你执行 kubectl get pods、CI/CD 流水线调用 curl -X POST 创建 Deployment、甚至 Helm install 的底层请求,最终都打到 kube-apiserver。它不做业务逻辑判断,只做三件事:认证(如 RBAC)、鉴权(如 ClusterRoleBinding)、准入控制(如 ValidatingWebhook)。绕过它直接改 etcd 或伪造 kubelet 心跳,会导致状态撕裂——比如 Pod 显示 Running,但实际容器已退出且不会重启。

  • 常见错误现象:Forbidden: unable to create new content in namespace "default" —— 不是权限没配全,很可能是 ServiceAccount 没绑定 Role,或命名空间被限制了资源配额
  • 实操建议:调试时优先看 kube-apiserver 日志(journalctl -u kube-apiserver -n 100),而不是先查 Pod 状态;它的 403/404 错误比 kubelet 的 CrashLoopBackOff 更早暴露权限链路问题
  • 性能影响:开启大量动态准入(如 OPA/Gatekeeper)会显著增加 API 延迟,生产环境建议仅对关键资源(Pod/Ingress/Secret)启用

etcd 不是“K8s 的数据库”,而是整个集群状态的单一事实源

etcd 存的不是“数据”,而是“期望状态”与“当前状态”的差值快照。比如你 apply 一个 Deployment,kube-apiserver 写入的是 replicas: 3 和 label selector;Controller Manager 后续读取这个值去比对真实 Pod 数量,再触发创建。删掉 etcd 里某条 key,相当于告诉系统“这个资源从未存在过”——Deployment 控制器会立刻删光所有关联 Pod。

  • 容易踩的坑:用 etcdctl get --prefix /registry 手动清理“残留”key,可能意外删除正在使用的 Lease 或 EndpointsSlice,导致服务中断
  • 备份要点:必须使用 etcdctl snapshot save(而非文件系统 cp),且恢复时要严格匹配 etcd 版本;K8s 1.25+ 集群若用旧版 etcd 快照恢复,可能出现 storage version mismatch
  • 为什么不能换数据库:etcd 的 Raft 协议保证线性一致性,而 MySQL/PostgreSQL 无法在分布式写入下满足 Controller Manager 对“状态变更顺序”的强依赖

kube-scheduler 和 kube-controller-manager 实际上是“状态对齐引擎”

它们不“启动容器”,也不“连网络”。kube-scheduler 只负责给 Pending 状态的 Pod 打上 nodeName: 字段;真正拉起容器的是 kubelet。同理,kube-controller-manager 中的 ReplicaSet 控制器,只是不断 GET /apis/apps/v1/replicasets → 计算副本数差值 → PATCH Pod 数量 → 等待 kubelet 回报新状态。整个过程没有“命令下发”,只有“声明式状态轮询”。

Interior AI
Interior AI

AI室内设计,上传室内照片自动帮你生成多种风格的室内设计图

下载
  • 典型故障场景:节点磁盘满导致 kubelet 停止上报状态 → Controller Manager 仍认为该节点健康 → 新 Pod 被持续调度过去 → 全部 Pending
  • 参数差异:--controllers=* 默认启用全部控制器,但云厂商插件(如 AWS EBS CSI)常要求禁用 service 控制器,否则会和 cloud-controller-manager 冲突
  • 为什么不能合并?调度(决策)和控制(执行)分离是 K8s 可扩展性的根基——你可以用 Karpenter 替换默认 scheduler,但不用动 controller-manager 一行代码

kubelet 不是“Docker 守护进程替代品”,而是 Pod 生命周期的本地仲裁者

kubelet 的核心职责是:确保节点上运行的容器集合,精确匹配 API Server 中对应 Node 对象的 status.conditions 和 PodSpec。它不管理镜像拉取策略(那是 containerd 的事),也不处理跨节点服务发现(那是 kube-proxy 或 CNI 插件的事)。当你看到 ContainerCreating 卡住,大概率是 kubelet 在等 containerd 返回 CreateContainer 响应;而 ImagePullBackOff 则说明它已把拉镜像指令发给了运行时,但运行时失败了。

  • 调试技巧:直接执行 crictl ps -a 查看容器真实状态,比 kubectl describe node 更快定位是否是 runtime 层面卡死
  • 兼容性注意:K8s 1.24+ 彻底移除 dockershim,若仍用 Docker Engine,必须额外部署 cri-dockerd;containerd 则需确认 plugins."io.containerd.grpc.v1.cri".registry 配置了私有仓库证书
  • 最易忽略的一点:kubelet 的 --node-labels 参数一旦设置,节点上线后就无法通过 kubectl label 修改——因为 label 已写入 Node 对象的 immutable 字段,只能删节点重建

真正让 Kubernetes “活起来”的,从来不是某个组件多强大,而是所有组件只基于 etcd 中极简的状态字段做异步对齐——这种松耦合设计,既是它可扩展的底气,也是排障时最烧脑的根源:问题永远不在单点,而在状态流转的缝隙里。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

182

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

229

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

342

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

209

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

394

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

220

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

193

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

396

2025.06.17

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

22

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.9万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 812人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号