k8s-master组件介绍
-
- 一、控制平面概述
- 二、etcd
-
- [2.1 定义与作用](#2.1 定义与作用)
- [2.2 关键启动参数](#2.2 关键启动参数)
- [2.3 高可用机制](#2.3 高可用机制)
- 三、kube-apiserver
-
- [3.1 定义与作用](#3.1 定义与作用)
- [3.2 关键启动参数](#3.2 关键启动参数)
- [3.3 高可用机制](#3.3 高可用机制)
- 四、kube-controller-manager
-
- [4.1 定义与作用](#4.1 定义与作用)
- [4.2 关键启动参数](#4.2 关键启动参数)
- [4.3 高可用机制](#4.3 高可用机制)
- 五、kube-scheduler
-
- [5.1 定义与作用](#5.1 定义与作用)
- [5.2 关键启动参数](#5.2 关键启动参数)
- [5.3 高可用机制](#5.3 高可用机制)
- 六、组件依赖关系
-
- [6.1 依赖图谱](#6.1 依赖图谱)
- [6.2 核心依赖关系](#6.2 核心依赖关系)
- 七、高可用架构对比
- 八、故障排查要点
-
- [8.1 启动依赖检查顺序](#8.1 启动依赖检查顺序)
- [8.2 常见故障原因](#8.2 常见故障原因)
- 九、总结
一、控制平面概述
Kubernetes 控制平面 由四个核心组件构成,均以静态 Pod 形式部署于 Master 节点:
| 组件 | 角色 | 部署方式 |
|---|---|---|
| etcd | 集群数据存储 | 静态 Pod |
| kube-apiserver | 集群统一入口 | 静态 Pod |
| kube-controller-manager | 控制器集合 | 静态 Pod |
| kube-scheduler | Pod 调度器 | 静态 Pod |
部署路径 :/etc/kubernetes/manifests/
下图是标准k8s下的4个静态pod文件的yaml文件。

二、etcd
2.1 定义与作用
etcd 是 Kubernetes 的分布式键值存储系统 ,作为集群的唯一真相源(Source of Truth),存储所有配置、状态与元数据。
核心特征:
- 分布式:支持集群模式,实现高可用
- 一致性:基于 Raft 协议,保证数据强一致
- 持久性:数据持久化至磁盘
- 唯一依赖 :仅 kube-apiserver 直接读写 etcd
2.2 关键启动参数
yaml
# 下面就是etcd的启动命令
# 这里的参数其实比较少,大部分都是和ip和证书相关。
- command:
- etcd
- --advertise-client-urls=https://192.168.31.211:2379
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --client-cert-auth=true
- --data-dir=/var/lib/etcd
- --experimental-initial-corrupt-check=true
- --initial-advertise-peer-urls=https://192.168.31.211:2380
- --initial-cluster=master01=https://192.168.31.211:2380
- --key-file=/etc/kubernetes/pki/etcd/server.key
- --listen-client-urls=https://127.0.0.1:2379,https://192.168.31.211:2379
- --listen-metrics-urls=http://127.0.0.1:2381
- --listen-peer-urls=https://192.168.31.211:2380
- --name=master01
- --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
- --peer-client-cert-auth=true
- --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
- --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
- --snapshot-count=10000
- --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
| 参数 | 含义 |
|---|---|
--data-dir |
数据存储目录(/var/lib/etcd) |
--name |
节点名称(与 --initial-cluster 对应) |
--initial-cluster |
集群成员列表 |
--listen-client-urls |
客户端监听地址(apiserver 访问) |
--advertise-client-urls |
对外公告的客户端地址 |
--listen-peer-urls |
集群内部通信地址 |
--cert-file/--key-file |
服务端证书 |
--peer-cert-file/--peer-key-file |
集群通信证书 |
--trusted-ca-file |
客户端 CA 证书 |
2.3 高可用机制
etcd 自身集群化:通过多节点组建 etcd 集群,不依赖 Kubernetes。
依赖关系:
plain
etcd ← kube-apiserver
- etcd 异常 → kube-apiserver 无法启动
- 数据正常 → 单节点 etcd 可独立恢复
三、kube-apiserver
3.1 定义与作用
kube-apiserver 是 Kubernetes 集群的统一入口,所有 REST 请求均通过其处理。
核心特征:
- 唯一入口:kubectl、UI、其他组件均与之通信
- 无状态:不持久化数据,所有状态存储于 etcd
- 认证授权:集成认证(Authentication)、鉴权(Authorization)、准入控制(Admission Control)
- 通信枢纽 :其他组件之间不直接通信,均通过 apiserver 交互
3.2 关键启动参数
yaml
# 下面是kube-apiserver的启动参数
- command:
- kube-apiserver
- --advertise-address=192.168.31.211
- --allow-privileged=true
- --authorization-mode=Node,RBAC
- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --enable-admission-plugins=NodeRestriction
- --enable-bootstrap-token-auth=true
- --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
- --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
- --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
- --etcd-servers=https://127.0.0.1:2379
- --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
- --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
- --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
- --requestheader-allowed-names=front-proxy-client
- --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
- --requestheader-extra-headers-prefix=X-Remote-Extra-
- --requestheader-group-headers=X-Remote-Group
- --requestheader-username-headers=X-Remote-User
- --secure-port=6443
- --service-account-issuer=https://kubernetes.default.svc.cluster.local
- --service-account-key-file=/etc/kubernetes/pki/sa.pub
- --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
- --service-cluster-ip-range=10.96.0.0/12
- --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
- --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
| 参数 | 含义 |
|---|---|
--etcd-servers |
etcd 服务器地址(依赖核心) |
--etcd-cafile/--etcd-certfile/--etcd-keyfile |
etcd 客户端证书 |
--advertise-address |
对外公告地址 |
--secure-port |
安全端口(6443) |
--service-cluster-ip-range |
Service ClusterIP 地址池 |
--authorization-mode |
鉴权模式(Node,RBAC) |
--enable-admission-plugins |
启用准入控制器 |
--tls-cert-file/--tls-private-key-file |
API Server 证书 |
--kubelet-client-certificate/--kubelet-client-key |
访问 kubelet 证书 |
3.3 高可用机制
多实例水平扩展 :多个 apiserver 实例同时工作 ,前端通过负载均衡器统一暴露。
依赖关系:
plain
etcd → kube-apiserver
- etcd 正常 → apiserver 可启动
- 证书/时间同步:常见启动失败原因
四、kube-controller-manager
4.1 定义与作用
kube-controller-manager 是所有控制器的集合,持续监控集群状态,驱动实际状态向期望状态收敛。
包含的主要控制器:
| 控制器 | 职责 |
|---|---|
| ReplicationController | 维持 Pod 副本数 |
| Deployment Controller | 管理 Deployment 生命周期 |
| StatefulSet Controller | 管理有状态应用 |
| DaemonSet Controller | 管理守护进程集 |
| Job Controller | 管理批处理任务 |
| Endpoint Controller | 维护 Service 与 Pod 映射 |
| Namespace Controller | 管理命名空间 |
| ServiceAccount Controller | 管理服务账户 |
| Node Controller | 监控节点状态 |
| ... | 数十种控制器 |
4.2 关键启动参数
yaml
# kube-controller-manager的启动参数
- command:
- kube-controller-manager
- --allocate-node-cidrs=true
- --authentication-kubeconfig=/etc/kubernetes/controller-manager.conf
- --authorization-kubeconfig=/etc/kubernetes/controller-manager.conf
- --bind-address=127.0.0.1
- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --cluster-cidr=10.244.0.0/16
- --cluster-name=kubernetes
- --cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt
- --cluster-signing-key-file=/etc/kubernetes/pki/ca.key
- --controllers=*,bootstrapsigner,tokencleaner
- --kubeconfig=/etc/kubernetes/controller-manager.conf
- --leader-elect=true
- --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
- --root-ca-file=/etc/kubernetes/pki/ca.crt
- --service-account-private-key-file=/etc/kubernetes/pki/sa.key
- --service-cluster-ip-range=10.96.0.0/12
- --use-service-account-credentials=true
yaml
# 启用选主
- --leader-elect=true
| 参数 | 含义 |
|---|---|
--kubeconfig |
连接 apiserver 的配置 |
--controllers |
启用的控制器列表(* 表示全部) |
--leader-elect |
是否启用选主(高可用关键) |
--cluster-cidr |
Pod CIDR 范围 |
--service-cluster-ip-range |
Service CIDR 范围 |
--root-ca-file |
根 CA 证书 |
--cluster-signing-cert-file/--cluster-signing-key-file |
集群签名证书 |
4.3 高可用机制
Leader Election(选主):
- 多实例部署时,仅 Leader 实际工作
- 其他实例待命,Leader 故障时自动选举新 Leader
- 参数
--leader-elect=true启用
故障影响:
- 已有业务不受影响
- 集群状态变更无法自动修复(如 Pod 故障不重建)
五、kube-scheduler
5.1 定义与作用
kube-scheduler 负责将未调度的 Pod 分配到合适的节点。
调度依据:
| 维度 | 内容 |
|---|---|
| 资源需求 | CPU、内存 requests/limits |
| 约束条件 | nodeSelector、亲和性、反亲和性 |
| 污点与容忍 | taints & tolerations |
| 优先级 | Pod 优先级抢占 |
| 负载均衡 | 节点资源利用率 |
5.2 关键启动参数
yaml
# Scheduler的启动命令
- command:
- kube-scheduler
- --authentication-kubeconfig=/etc/kubernetes/scheduler.conf
- --authorization-kubeconfig=/etc/kubernetes/scheduler.conf
- --bind-address=127.0.0.1
- --kubeconfig=/etc/kubernetes/scheduler.conf
- --leader-elect=true
| 参数 | 含义 |
|---|---|
--kubeconfig |
连接 apiserver 的配置 |
--leader-elect |
是否启用选主(高可用关键) |
--bind-address |
监听地址 |
5.3 高可用机制
Leader Election(选主):
- 多实例部署时仅 Leader 实际调度
- 参数
--leader-elect=true启用 - 与 controller-manager 独立选主
故障影响:
- 已有 Pod 正常运行
- 新 Pod 无法调度(Pending 状态)
六、组件依赖关系
6.1 依赖图谱
这4个组件就是master的核心组件,
- etcd作为数据库给kube-apiserver使用,
- 而作为核心kube-apiserver又向kube-controller-manager和kube-scheduler提供服务。

6.2 核心依赖关系
| 组件 | 直接依赖 | 被依赖 |
|---|---|---|
| etcd | 无 | kube-apiserver |
| kube-apiserver | etcd | 所有其他组件 |
| kube-controller-manager | kube-apiserver | 无 |
| kube-scheduler | kube-apiserver | 无 |
关键结论:
- etcd 是整个集群的基石
- kube-apiserver 是通信中枢
- kcm 与 scheduler 是 apiserver 的客户端,彼此独立
七、高可用架构对比
| 组件 | 高可用模式 | 工作模式 | 选主机制 |
|---|---|---|---|
| etcd | 集群化 | 全活(Leader/Follower) | Raft 协议 |
| kube-apiserver | 水平扩展 | 全活(均处理请求) | 无(负载均衡) |
| kube-controller-manager | 主备 | 单活(Leader 工作) | --leader-elect=true |
| kube-scheduler | 主备 | 单活(Leader 工作) | --leader-elect=true |
八、故障排查要点
8.1 启动依赖检查顺序
plain
etcd 状态 → apiserver 状态 → kcm/scheduler 状态
命令:
bash
# 检查静态 Pod 是否运行
kubectl get pods -n kube-system | grep -E 'etcd|apiserver|controller|scheduler'
# 查看组件日志
kubectl logs -n kube-system etcd-<node>
kubectl logs -n kube-system kube-apiserver-<node>
kubectl logs -n kube-system kube-controller-manager-<node>
kubectl logs -n kube-system kube-scheduler-<node>
8.2 常见故障原因
| 组件 | 常见故障原因 |
|---|---|
| etcd | 磁盘空间满、数据损坏、证书过期、集群成员变更 |
| kube-apiserver | etcd 不可达、证书错误、时间不同步 |
| kube-controller-manager | apiserver 不可达、证书失效、选主冲突 |
| kube-scheduler | apiserver 不可达、证书失效、选主冲突 |
九、总结
| 组件 | 核心职责 | 依赖 | 高可用方式 | 故障影响 |
|---|---|---|---|---|
| etcd | 存储集群数据 | 无 | 集群化 | 集群不可用 |
| kube-apiserver | 统一入口 | etcd | 多实例+LB | 集群不可访问 |
| kube-controller-manager | 状态收敛 | apiserver | 主备+选主 | 无法自愈 |
| kube-scheduler | Pod 调度 | apiserver | 主备+选主 | 新 Pod 无法调度 |
一句话架构总结:
etcd 是基石,apiserver 是心脏,controller-manager 是大脑,scheduler 是调度官------四者以静态 Pod 形式协同,构成 Kubernetes 控制平面的完整骨架。