7.k8s-master组件介绍

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 是通信中枢
  • kcmscheduler 是 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 控制平面的完整骨架。

相关推荐
识途老码8 小时前
5.k8s的pod介绍
k8s·pod
识途老码12 小时前
6.k8s-静态(static)pod介绍
k8s·静态pod
没有bug.的程序员13 小时前
容器网络深度探究:从 CNI 插件选型内核到 K8s 网络策略安全防护实战指南
java·网络·安全·kubernetes·k8s·cni·容器网络
研究司马懿5 天前
【云原生】Gateway API高级功能
云原生·go·gateway·k8s·gateway api
Harvey9035 天前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
logocode_li7 天前
OCI/CRI 双标准下:从 dockerd 到 containerd 的 K8s 运行时迭代史
docker·云原生·容器·k8s
人间打气筒(Ada)7 天前
k8s:CNI网络插件flannel与calico
linux·云原生·容器·kubernetes·云计算·k8s
回忆是昨天里的海8 天前
k8s整体架构及核心组件
架构·k8s
没有bug.的程序员8 天前
Docker 与 K8s 生产级实战:从镜像极致优化到集群自动化部署全流程
spring cloud·docker·kubernetes·自动化·k8s·镜像·集群自动化