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 控制平面的完整骨架。

相关推荐
菜地里的小菜鸟6 天前
failed to get imageFs info: non-existent label “docker-images
k8s·failedtogetimagefsin·k8s报错
菜地里的小菜鸟8 天前
kubectl debug
k8s·kubectldebug
腾飞开源10 天前
01_K8s干货笔记之认识K8s
运维·笔记·云原生·容器·kubernetes·k8s·容器化部署
小匠石钧知12 天前
02_在多个RockyLinux10虚拟机上安装k8s集群
云原生·容器·kubernetes·k8s
ShirleyWang01219 天前
让headlamp控制台能访问
linux·服务器·python·k8s·k3s
spider_xcxc19 天前
K8s 部署学习笔记
docker·容器·kubernetes·云计算·k8s
ShirleyWang01219 天前
Day02 K3s NGF(Nginx Gateway Fabric)单 Worker 环境网关更新与故障处置 SOP
linux·服务器·python·k8s·k3s
ShirleyWang01219 天前
DAY01 K3s 私有化部署排障复盘与 SOP
linux·服务器·k8s·k3s·企业部署
XUHUOJUN22 天前
AKS 不是安装在 Windows Server 上,而是运行在 Windows Server 之上的 Azure 平台能力
windows·架构·k8s·azure local·azure stack
Geek-Chow22 天前
Connecting kubectl to a Private EKS Cluster Over an Internal Domain
kubernetes·k8s·aws