news 2026/9/3 12:40:47

Kubernetes控制平面如何启动?Kubernetes The Hard Way手把手引导kube-apiserver、Scheduler与Controller Manager

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kubernetes控制平面如何启动?Kubernetes The Hard Way手把手引导kube-apiserver、Scheduler与Controller Manager

Kubernetes控制平面如何启动?Kubernetes The Hard Way手把手引导kube-apiserver、Scheduler与Controller Manager

【免费下载链接】kubernetes-the-hard-wayBootstrap Kubernetes the hard way. No scripts.项目地址: https://gitcode.com/GitHub_Trending/ku/kubernetes-the-hard-way

想搞懂Kubernetes 控制平面是怎么启动的吗?开源教程 Kubernetes The Hard Way 全程不用任何脚本,手把手带你手动拉起kube-apiserverkube-schedulerkube-controller-manager三大核心组件。这篇指南拆解控制平面启动的完整流程:先传二进制文件,再配 systemd 服务,最后验证集群 API,适合零基础新手快速建立 Kubernetes 架构认知 🚀。

为什么选择 Kubernetes The Hard Way 学习?

大多数人用 kubeadm 或托管服务一键拉起集群,但这意味着"看不见"控制平面的真实启动过程。Kubernetes The Hard Way(直译为"硬核方式")恰恰反其道而行:

  • 📌零脚本:每一个证书、每一个 systemd 单元文件都由你亲手放置
  • 📌全手动:从 etcd 到 API Server 再到控制器,每个组件的依赖关系一目了然
  • 📌强理解:理解kube-apiserver为什么依赖 etcd、为什么必须先于其他组件就绪

教程的完整章节导航在 README.md 中,控制平面启动对应第 8 章 docs/08-bootstrapping-kubernetes-controllers.md。

官方说明:本教程面向想理解 Kubernetes 基础原理和核心组件协作方式的读者,学习成果不用于生产环境。

控制平面三大组件:各司其职

启动前,先建立对三大组件的认知地图:

组件职责一句话理解
kube-apiserver集群唯一入口,所有请求的网关大管家,认证授权都在这里
kube-scheduler为新 Pod 挑选合适的节点调度员,决定"住哪儿"
kube-controller-manager内置控制器集合,维持期望状态巡检员,发现偏差就修正

三者都部署在server机器(控制节点)上,由 systemd 管理生命周期。

启动前置:传输二进制与配置文件

整个流程的第一步是把控制平面所需的东西从 jumpbox 拷贝到 server。核心操作包含三类文件:

  1. 二进制文件kube-apiserverkube-controller-managerkube-schedulerkubectl
  2. systemd 服务文件:定义每个组件如何被操作系统托管
  3. 配置与凭证:CA 证书、TLS 证书、kubeconfig、加密配置

对应的 systemd 单元文件在仓库中都有现成模板:

  • units/kube-apiserver.service
  • units/kube-scheduler.service
  • units/kube-controller-manager.service

二进制统一安装到/usr/local/bin/,这是 Linux 的惯例路径,保证PATH可直接找到。

逐步启动:三个组件的配置要点

1️⃣ kube-apiserver:最复杂的启动项

kube-apiserver的启动参数最多,打开 units/kube-apiserver.service 可以看到关键参数:

  • --etcd-servers=http://127.0.0.1:2379:API Server 的数据存储在本地 etcd,这解释了为什么教程第 7 章要先启动 etcd
  • --authorization-mode=Node,RBAC:开启基于角色的访问控制,这是集群安全的核心
  • --audit-log-*系列参数:审计日志保留 30 天、最多 3 个备份,合规审计必备
  • --tls-cert-file/--tls-private-key-file:API 通信全程 HTTPS,证书来自前序章节生成的 CA
  • --encryption-provider-config:指向 configs/encryption-config.yaml,保证 Secret 落盘加密

一个易被忽视的细节:Restart=on-failureRestartSec=5让服务崩溃后 5 秒自动重启,这是生产级服务的标配写法。

2️⃣ kube-scheduler:最简洁的启动项

调度器的配置反而最干净。它通过 YAML 配置文件驱动,模板见 configs/kube-scheduler.yaml:

  • clientConnection指向 kube-scheduler 的 kubeconfig,说明它是个"API 客户端"
  • leaderElect: true开启领导者选举——如果将来多实例部署,只有一个调度器工作,避免重复调度

启动命令见 units/kube-scheduler.service,核心只有--config一个参数,体现了"配置即代码"的理念。

3️⃣ kube-controller-manager:集群的"巡检员"

units/kube-controller-manager.service 中的参数揭示了它的工作范围:

  • --cluster-cidr=10.200.0.0/16--service-cluster-ip-range=10.32.0.0/24:分别为 Pod 网络和 Service 网络预留地址段,后续网络插件必须在此范围内分配 IP
  • --cluster-signing-cert-file:使用集群 CA 为组件签发证书
  • --kubeconfig:同样以 API 客户端身份工作,周期性读取集群状态

💡理解关键点:调度器和控制器都不直接存储数据,它们通过 API Server 读状态、写结果。API Server 才是"唯一事实来源"。

一键拉起:systemd 管理三个服务

三个组件的单元文件就位后,启动序列很简单:

  1. systemctl daemon-reload:让 systemd 重新读取单元文件
  2. systemctl enable kube-apiserver kube-controller-manager kube-scheduler:设置开机自启
  3. systemctl start kube-apiserver kube-controller-manager kube-scheduler:立即启动

教程特别提醒:API Server 完全初始化需要最多 10 秒。启动后可以用systemctl is-active kube-apiserver检查状态,用journalctl -u kube-apiserver查看日志排错——这套排查思路适用于所有控制平面组件。

验证启动成功:两个关键检查

检查一:kubectl 连通性

kubectl cluster-info --kubeconfig admin.kubeconfig

看到Kubernetes control plane is running at https://127.0.0.1:6443即表示 API Server 已就绪。

检查二:HTTP 版本探针

curl --cacert ca.crt https://server.kubernetes.local:6443/version

能返回 JSON 版本信息(如v1.32.x),说明 TLS 链路和 API 路由全部工作正常。

进阶一步:Kubelet 授权的 RBAC 配置

控制平面启动后,教程还教你为 API Server 配置访问各工作节点 Kubelet 的权限,模板文件是 configs/kube-apiserver-to-kubelet.yaml。

这一步的意义:Kubelet 的--authorization-mode设置为Webhook,即每次访问都通过 API Server 的 SubjectAccessReview 接口鉴权。没有这个 ClusterRole,你就无法获取 Pod 日志、执行kubectl exec等常见操作。

常见问题排查清单

症状可能原因排查手段
API Server 启动失败etcd 未运行或端口被占先确认systemctl status etcd
curl 版本接口报错CA 证书路径错误检查--cacert是否指向有效 ca.crt
kubectl 超时kubeconfig 未传对位置确认admin.kubeconfig所在路径
日志中看到证书错误组件间证书不匹配核对前序章节生成的证书清单

所有服务文件的Restart=on-failure意味着偶发崩溃会自动恢复,持续失败才需要人工介入。

总结:控制平面启动的核心认知

通过Kubernetes The Hard Way的第 8 章,你可以沉淀出三个核心认知:

  1. 依赖顺序:etcd → kube-apiserver → kube-scheduler / kube-controller-manager,数据存储先行
  2. 统一模式:三大组件都是 systemd 服务 + TLS 证书 + kubeconfig 客户端,套路高度一致
  3. 安全纵深:审计日志、RBAC 授权、数据加密三者在启动参数中就已就位

🎯 下一步建议:继续阅读 docs/09-bootstrapping-kubernetes-workers.md 启动工作节点,再配合 docs/12-smoke-test.md 部署测试 Pod,完成从"控制平面"到"完整集群"的跨越。

【免费下载链接】kubernetes-the-hard-wayBootstrap Kubernetes the hard way. No scripts.项目地址: https://gitcode.com/GitHub_Trending/ku/kubernetes-the-hard-way

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 12:39:35

知名GEO系统哪个好怎么选才不踩坑从技术底座到落地效果的全景对比

随着生成式人工智能在搜索领域的全面渗透,传统搜索引擎的“蓝链”时代正迅速让位于AI生成的直接答案。2026年9月中国GEO市场规模已达30亿元,三年内实现了35倍的爆发式增长。目前,超过68%的中大型企业已将生成式引擎优化纳入年度核心预算&…

作者头像 李华
网站建设 2026/9/3 12:39:15

如何识别AD549换皮OPA128SM?静电计运放鉴伪实战指南

在二手电子元器件市场里,有一类货长期被当作“金矿”来炒:军工级拆机板。整板收回来之后,玩家或商家会把上面的贵价芯片拆下来单卖,其中最容易出故事的就是静电计级运放。这次要聊的,就是把AD549 打磨/重印后伪装成 OP…

作者头像 李华
网站建设 2026/9/3 12:32:53

树莓派实时仰卧起坐计数系统:离线轻量级动作识别全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 12:32:33

mysql安装及基础设置

关系型数据库 MySQL是一种关系型数据库管理系统,采用了关系模型来组织数据的数据库,关系数据库将数据保存在不同的表中,用户通过查询 sql 来检索数据库中的数据。 yum 方式安装 mysql 安装默认版本的 mysql # yum -y install mysql-server…

作者头像 李华
网站建设 2026/9/3 12:31:25

QtScrcpy 手机投屏实操指南:3 步投屏、无线连接与多设备控制

QtScrcpy 手机投屏实操指南:3 步投屏、无线连接与多设备控制 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 把手机接上电脑后想"看到"屏幕不难,难…

作者头像 李华
网站建设 2026/9/3 12:29:20

校园电竞赛事全流程策划指南:从赛制设计到现场执行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华