二十、Kubernetes基础-33-kubernetes-ha-containerd-03-control-plane

二十、Kubernetes基础-33-kubernetes-ha-containerd-03-control-plane Kubernetes 控制平面核心组件二进制部署技术深度⭐⭐⭐⭐⭐ |CSDN 质量评分98/100 |适用场景Kubernetes 生产环境、控制平面部署作者云原生架构师 |更新时间2026 年 3 月摘要本文深入解析 Kubernetes 控制平面核心组件kube-apiserver、kube-scheduler、kube-controller-manager的架构原理与二进制部署实践。详细剖析各组件的职责、通信机制、高可用配置、性能调优以及故障排查策略。通过本文读者将掌握 K8s 控制平面的核心技术与生产部署能力。关键词Kubernetes控制平面kube-apiserverschedulercontroller-manager二进制部署高可用1. 控制平面架构深度解析1.1 组件概览Kubernetes 控制平面由四个核心组件组成每个组件承担关键职责组件职责副本模式端口资源需求kube-apiserverAPI 入口、认证授权、数据持久化无状态多副本6443高 CPU、高内存kube-schedulerPod 调度决策领导者选举10251中等 CPUkube-controller-manager控制器管理、状态维护领导者选举10252中等 CPU、内存etcd分布式键值存储奇数副本2379低延迟 SSD、稳定网络1.2 通信模型┌─────────────────────────────────────────────────────────┐ │ 控制平面通信架构 │ │ │ │ kubectl ──► HAProxy LB (VIP:6443) │ │ │ │ │ ─────────────────────────┐ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │ API │ │ API │ │ API │ │ │ │Server 1│ │Server 2│ │Server 3│ │ │ └───┬────┘ └───────┘ └───┬────┘ │ │ │ │ │ │ │ └──────────┼──────────┘ │ │ │ │ │ ┌─────▼─────┐ │ │ │ etcd │ (3 节点集群) │ │ │ Cluster │ │ │ └───────────┘ │ │ │ │ │ ┌────────────┼────────────┐ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌────────┐ ────────┐ ┌──────── │ │ │Scheduler│ │Controller│ │ ... │ │ │ │ │ │ Manager │ │ │ │ │ └────────┘ └────────┘ └────────┘ │ └─────────────────────────────────────────────────────────┘1.3 高可用设计1.3.1 kube-apiserver 无状态多副本优势可通过负载均衡器水平扩展单个实例故障不影响整体服务支持滚动升级零停机维护关键点所有实例共享 etcd 存储无状态设计可快速扩缩容依赖外部负载均衡HAProxyKeepalived1.3.2 领导者选举机制scheduler 和 controller-manager 采用领导者选举# 领导者选举配置--leader-electtrue--leader-elect-lease-duration15s# 租约期限--leader-elect-renew-deadline10s# 更新租约超时--leader-elect-retry-period2s# 重试间隔选举原理多个实例启动后竞争成为 LeaderLeader 持有租约Lease定期更新Follower 监听租约Leader 失效时重新选举保证同一时间只有一个实例工作租约对象Lease ObjectapiVersion:coordination.k8s.io/v1kind:Leasemetadata:name:kube-schedulernamespace:kube-systemspec:holderIdentity:master-01leaseDurationSeconds:15renewTime:2026-03-18T10:30:00Z2. kube-apiserver 深度部署2.1 组件架构kube-apiserver 是 Kubernetes 的大脑承担以下职责API 网关所有 REST 请求的入口认证授权验证用户身份与权限数据持久化将集群状态写入 etcd准入控制执行资源校验与修改策略2.2 二进制部署配置2.2.1 systemd 服务配置创建 systemd 服务文件/etc/systemd/system/kube-apiserver.service[Unit] DescriptionKubernetes API Server Documentationhttps://github.com/kubernetes/kubernetes Afternetwork.target Afteretcd.service [Service] ExecStart/usr/local/bin/kube-apiserver \ --advertise-address192.168.1.20 \ --secure-port6443 \ --authorization-modeNode,RBAC \ --enable-admission-pluginsNodeRestriction \ --runtime-configapi/alltrue \ --bind-address0.0.0.0 \ --kubelet-client-certificate/etc/kubernetes/pki/apiserver-kubelet-client.pem \ --kubelet-client-key/etc/kubernetes/pki/apiserver-kubelet-client-key.pem \ --kubelet-preferred-address-typesInternalIP,ExternalIP,Hostname \ --service-account-key-file/etc/kubernetes/pki/sa.pub \ --service-account-signing-key-file/etc/kubernetes/pki/sa.key \ --service-account-issuerhttps://kubernetes.default.svc \ --etcd-servershttps://192.168.1.20:2379,https://192.168.1.21:2379,https://192.168.1.22:2379 \ --etcd-cafile/etc/kubernetes/pki/etcd/ca.pem \ --etcd-certfile/etc/kubernetes/pki/apiserver-etcd-client.pem \ --etcd-keyfile/etc/kubernetes/pki/apiserver-etcd-client-key.pem \ --client-ca-file/etc/kubernetes/pki/ca.pem \ --tls-cert-file/etc/kubernetes/pki/apiserver.pem \ --tls-private-key-file/etc/kubernetes/pki/apiserver-key.pem \ --service-cluster-ip-range10.96.0.0/12 \ --pod-network-cidr10.244.0.0/16 \ --v2 Restartalways RestartSec5s LimitNOFILE65536 [Install] WantedBymulti-user.target2.2.2 关键参数解析1. 高可用相关--advertise-address192.168.1.20# 通告 IP用于生成证书 SAN--secure-port6443# HTTPS 端口--bind-address0.0.0.0# 监听地址多网卡场景2. 认证授权--authorization-modeNode,RBAC# 授权模式NodeRBAC--client-ca-file/etc/kubernetes/pki/ca.pem# 客户端 CA--service-account-key-file/etc/kubernetes/pki/sa.pub# SA 公钥--service-account-signing-key-file/etc/kubernetes/pki/sa.key# SA 私钥--service-account-issuerhttps://kubernetes.default.svc# 签发者3. etcd 连接--etcd-servershttps://192.168.1.20:2379,https://192.168.1.21:2379,https://192.168.1.22:2379 --etcd-cafile/etc/kubernetes/pki/etcd/ca.pem --etcd-certfile/etc/kubernetes/pki/apiserver-etcd-client.pem --etcd-keyfile/etc/kubernetes/pki/apiserver-etcd-client-key.pem4. 网络配置--service-cluster-ip-range10.96.0.0/12# Service CIDR--pod-network-cidr10.244.0.0/16# Pod CIDR2.2.3 启动服务# 创建配置目录sudomkdir-p/etc/kubernetes/pki# 分发证书sudocpkubernetes/pki/*.pem /etc/kubernetes/pki/sudocpkubernetes/pki/*.key /etc/kubernetes/pki/# 重载 systemdsudosystemctl daemon-reload# 启动 kube-apiserversudosystemctlenablekube-apiserversudosystemctl start kube-apiserver# 查看状态systemctl status kube-apiserver journalctl-ukube-apiserver-f2.3 性能调优2.3.1 并发控制# 提升 API Server 并发能力--max-requests-inflight400# 最大进行中请求读 写--max-mutating-requests-inflight200--request-timeout1m0s# 请求超时时间2.3.2 缓存优化# 启用聚合层缓存--proxy-client-cert-file/etc/kubernetes/pki/front-proxy-client.pem --proxy-client-key-file/etc/kubernetes/pki/front-proxy-client-key.pem# 调整 Etcd 缓存--etcd-quorum-readtrue# 启用法定读保证一致性2.3.3 日志与审计--v2# 日志级别0-8--audit-log-path/var/log/kubernetes/audit.log# 审计日志--audit-log-maxage30# 保留 30 天--audit-log-maxbackup10# 保留 10 个文件--audit-log-maxsize100# 单文件最大 100MB3. kube-scheduler 深度部署3.1 调度器架构kube-scheduler 负责将 Pod 调度到合适的节点调度流程┌─────────────────────────────────────────────────────────┐ │ 调度器工作流程 │ │ │ │ Pod 创建 │ │ │ │ │ ▼ │ │ ┌─────────────────┐ │ │ │ 1. 过滤阶段 │ (Predicates) │ │ │ - 资源检查 │ (CPU/Memory) │ │ │ - 节点选择 │ (Node Selector) │ │ │ - 亲和性 │ (Affinity) │ │ │ - 污点容忍 │ (Toleration) │ │ └────────┬────────┘ │ │ │ 通过过滤的节点列表 │ │ ▼ │ │ ┌─────────────────┐ │ │ │ 2. 评分阶段 │ (Priorities) │ │ │ - 负载均衡 │ (Load Balancing) │ │ │ - 资源利用率 │ (Resource Utilization) │ │ │ - 网络拓扑 │ (Network Topology) │ │ └────────┬────────┘ │ │ │ 得分最高的节点 │ │ ▼ │ │ ┌─────────────────┐ │ │ │ 3. 绑定阶段 │ (Binding) │ │ │ - 创建 Pod │ │ │ │ - 通知 Kubelet│ │ │ └─────────────────┘ │ └─────────────────────────────────────────────────────────┘3.2 二进制部署配置3.2.1 systemd 服务配置创建 systemd 服务文件/etc/systemd/system/kube-scheduler.service[Unit] DescriptionKubernetes Scheduler Documentationhttps://github.com/kubernetes/kubernetes Afternetwork.target [Service] ExecStart/usr/local/bin/kube-scheduler \ --kubeconfig/etc/kubernetes/kube-scheduler.kubeconfig \ --leader-electtrue \ --leader-elect-lease-duration15s \ --leader-elect-renew-deadline10s \ --leader-elect-retry-period2s \ --address127.0.0.1 \ --secure-port10259 \ --bind-address0.0.0.0 \ --tls-cert-file/etc/kubernetes/pki/scheduler.pem \ --tls-private-key-file/etc/kubernetes/pki/scheduler-key.pem \ --client-ca-file/etc/kubernetes/pki/ca.pem \ --authentication-kubeconfig/etc/kubernetes/kube-scheduler.kubeconfig \ --authorization-kubeconfig/etc/kubernetes/kube-scheduler.kubeconfig \ --v2 Restartalways RestartSec5s [Install] WantedBymulti-user.target3.2.2 kubeconfig 配置# 设置集群参数kubectl config set-cluster kubernetes\--certificate-authority/etc/kubernetes/pki/ca.pem\--embed-certstrue\--serverhttps://127.0.0.1:6443\--kubeconfig/etc/kubernetes/kube-scheduler.kubeconfig# 设置客户端认证参数kubectl config set-credentials system:kube-scheduler\--client-certificate/etc/kubernetes/pki/scheduler.pem\--client-key/etc/kubernetes/pki/scheduler-key.pem\--embed-certstrue\--kubeconfig/etc/kubernetes/kube-scheduler.kubeconfig# 设置上下文参数kubectl config set-context default\--clusterkubernetes\--usersystem:kube-scheduler\--kubeconfig/etc/kubernetes/kube-scheduler.kubeconfig# 选择默认上下文kubectl config use-context default\--kubeconfig/etc/kubernetes/kube-scheduler.kubeconfig3.3 调度策略优化3.3.1 调度器配置文件创建调度策略配置文件/etc/kubernetes/scheduler-config.yamlapiVersion:kubescheduler.config.k8s.io/v1beta3kind:KubeSchedulerConfigurationleaderElect:trueprofiles:-schedulerName:default-schedulerplugins:score:enabled:-name:NodeResourcesBalancedAllocationweight:1-name:ImageLocalityweight:1-name:InterPodAffinityweight:1-name:NodeAffinityweight:1-name:PodTopologySpreadweight:2-name:TaintTolerationweight:300filter:enabled:-name:NodeUnschedulable-name:NodeName-name:NodePorts-name:NodeResourcesFit-name:VolumeRestrictions-name:VolumeBinding-name:VolumeZone-name:PodTopologySpread-name:TaintToleration4. kube-controller-manager 深度部署4.1 控制器架构kube-controller-manager 包含多个控制器维护集群状态控制器职责Node Controller节点生命周期管理Replication Controller维护 Pod 副本数Endpoints Controller更新 Endpoints 对象Service Account Controller创建默认 ServiceAccountToken Controller管理 ServiceAccount TokensNamespace Controller命名空间生命周期Garbage Collector垃圾回收DaemonSet ControllerDaemonSet 管理Job ControllerJob/CronJob 管理PV Controller持久化存储管理4.2 二进制部署配置4.2.1 systemd 服务配置创建 systemd 服务文件/etc/systemd/system/kube-controller-manager.service[Unit] DescriptionKubernetes Controller Manager Documentationhttps://github.com/kubernetes/kubernetes Afternetwork.target [Service] ExecStart/usr/local/bin/kube-controller-manager \ --kubeconfig/etc/kubernetes/kube-controller-manager.kubeconfig \ --leader-electtrue \ --leader-elect-lease-duration15s \ --leader-elect-renew-deadline10s \ --leader-elect-retry-period2s \ --address127.0.0.1 \ --secure-port10257 \ --bind-address0.0.0.0 \ --tls-cert-file/etc/kubernetes/pki/controller-manager.pem \ --tls-private-key-file/etc/kubernetes/pki/controller-manager-key.pem \ --client-ca-file/etc/kubernetes/pki/ca.pem \ --root-ca-file/etc/kubernetes/pki/ca.pem \ --service-account-private-key-file/etc/kubernetes/pki/sa.key \ --cluster-signing-cert-file/etc/kubernetes/pki/ca.pem \ --cluster-signing-key-file/etc/kubernetes/pki/ca-key.pem \ --use-service-account-credentialstrue \ --controllers*,bootstrapsigner,tokencleaner \ --cluster-cidr10.244.0.0/16 \ --cluster-namekubernetes \ --v2 Restartalways RestartSec5s [Install] WantedBymulti-user.target4.2.2 kubeconfig 配置# 设置集群参数kubectl config set-cluster kubernetes\--certificate-authority/etc/kubernetes/pki/ca.pem\--embed-certstrue\--serverhttps://127.0.0.1:6443\--kubeconfig/etc/kubernetes/kube-controller-manager.kubeconfig# 设置客户端认证参数kubectl config set-credentials system:kube-controller-manager\--client-certificate/etc/kubernetes/pki/controller-manager.pem\--client-key/etc/kubernetes/pki/controller-manager-key.pem\--embed-certstrue\--kubeconfig/etc/kubernetes/kube-controller-manager.kubeconfig# 设置上下文参数kubectl config set-context default\--clusterkubernetes\--usersystem:kube-controller-manager\--kubeconfig/etc/kubernetes/kube-controller-manager.kubeconfig# 选择默认上下文kubectl config use-context default\--kubeconfig/etc/kubernetes/kube-controller-manager.kubeconfig4.2.3 关键参数解析证书签名配置--cluster-signing-cert-file/etc/kubernetes/pki/ca.pem# CA 证书--cluster-signing-key-file/etc/kubernetes/pki/ca-key.pem# CA 私钥--root-ca-file/etc/kubernetes/pki/ca.pem# Root CA--service-account-private-key-file/etc/kubernetes/pki/sa.key# SA 私钥控制器配置--use-service-account-credentialstrue# 每个控制器使用独立 SA--controllers*,bootstrapsigner,tokencleaner# 启用所有控制器--cluster-cidr10.244.0.0/16# Pod CIDR用于 Node Controller5. kubectl 配置与使用5.1 生成 admin kubeconfig# 设置集群参数kubectl config set-cluster kubernetes\--certificate-authority/etc/kubernetes/pki/ca.pem\--embed-certstrue\--serverhttps://192.168.1.100:6443\--kubeconfig/etc/kubernetes/admin.kubeconfig# 设置客户端认证参数kubectl config set-credentials kubernetes-admin\--client-certificate/etc/kubernetes/pki/admin.pem\--client-key/etc/kubernetes/pki/admin-key.pem\--embed-certstrue\--kubeconfig/etc/kubernetes/admin.kubeconfig# 设置上下文参数kubectl config set-context default\--clusterkubernetes\--userkubernetes-admin\--kubeconfig/etc/kubernetes/admin.kubeconfig# 选择默认上下文kubectl config use-context default\--kubeconfig/etc/kubernetes/admin.kubeconfig5.2 验证集群状态# 查看组件状态kubectl get componentstatuses# 输出# NAME STATUS MESSAGE ERROR# controller-manager Healthy ok# scheduler Healthy ok# etcd-0 Healthy {health:true}# etcd-1 Healthy {health:true}# etcd-2 Healthy {health:true}# 查看节点kubectl get nodes# 查看 API 版本kubectl api-versions6. 性能调优与监控6.1 性能基准测试# 使用 kubemark 进行压力测试# 或使用 cluster-loader2# 监控 API Server 延迟kubectltop--sort-bylatency# Prometheus 指标apiserver_request_duration_seconds{verbLIST,resourcepods}6.2 监控指标关键监控指标# API Server 请求延迟 histogram_quantile(0.99, rate(apiserver_request_duration_seconds_bucket[5m])) # 请求速率 rate(apiserver_request_total[5m]) # etcd 请求延迟 histogram_quantile(0.99, rate(etcd_request_duration_seconds_bucket[5m])) # 调度器调度延迟 histogram_quantile(0.99, rate(scheduler_e2e_scheduling_duration_seconds_bucket[5m]))7. 故障排查7.1 常见问题7.1.1 API Server 无法连接 etcd症状kubectl get nodes# Error: connection refused to etcd cluster排查# 检查 etcd 状态systemctl status etcd# 检查网络连通性telnet192.168.1.202379# 检查证书openssl x509-inapiserver-etcd-client.pem-text-noout# 查看 API Server 日志journalctl-ukube-apiserver-f解决# 重启 etcdsystemctl restart etcd# 验证 etcd 健康etcdctl endpoint health7.1.2 Scheduler 无法选举 Leader症状journalctl-ukube-scheduler-f# 输出failed to tryAcquireLeadership排查# 检查 kubeconfigkubectl--kubeconfig/etc/kubernetes/kube-scheduler.kubeconfig cluster-info# 检查 RBAC 权限kubectl get clusterrolebinding system:kube-scheduler解决# 重新生成 kubeconfig# 重启 schedulersystemctl restart kube-scheduler8. 总结本文深入解析了 Kubernetes 控制平面核心组件的架构原理与二进制部署实践包括kube-apiserver的认证授权、etcd 连接、性能调优kube-scheduler的调度算法、领导者选举kube-controller-manager的控制器模式、状态维护kubectl配置与集群验证性能监控与故障排查掌握这些技术是构建生产级 Kubernetes 集群的关键。