随笔 - 436  文章 - 0  评论 - 5  阅读 - 7912

k8s中各组件的作用

Kubernetes架构解密:掌握集群组件就像读懂操作系统内核

作为容器编排领域的"操作系统",Kubernetes的组件协同机制直接决定了集群的稳定性和性能。本文将深入剖析各组件在生产环境中的真实作用,并分享运维老兵才知道的实战经验。


一、控制平面:集群的神经中枢

1. API Server —— 集群的"海关总署"
  • 核心职能:统一接入所有REST请求(平均处理时延<500ms)
  • 生产配置要点
    # kube-apiserver 关键参数示例
    --etcd-servers=https://10.0.0.1:2379,https://10.0.0.2:2379
    --request-timeout=30s
    --max-requests-inflight=1500
    --enable-admission-plugins=NodeRestriction,ResourceQuota
    
  • 监控指标
    • 请求QPS/TPS波动
    • 99分位响应时间
    • etcd写操作延迟
2. etcd —— 集群的"记忆中枢"
  • 数据存储结构
    /registry/pods/<namespace>/<podname> → Pod信息
    /registry/services/<namespace>/<servicename> → Service信息
    
  • 生产运维铁律
    • 必须使用SSD磁盘(IOPS >5000)
    • 保持奇数节点(3/5节点集群)
    • 定期快照备份(最少保留7天)
3. Scheduler —— 智能调度大师
  • 调度流程

    1. 过滤不符合条件的节点(资源不足/污点排斥)
    2. 评分排序(资源平衡策略)
    3. 绑定节点(记录到etcd)
  • 自定义调度案例

    func prioritizeNodes(...) {
      // 给SSD磁盘节点额外加10分
      if node.HasSSD() {
        score += 10 
      }
    }
    
4. Controller Manager —— 集群的自动驾驶仪
  • 核心控制器矩阵
控制器类型 检查频率 关键作用
Deployment 每2秒 确保副本数符合预期
Node 每5秒 监控节点健康状态
ServiceAccount 实时 管理命名空间默认账户
PersistentVolume 每30秒 绑定存储卷声明

二、工作节点:业务承载的基石

1. kubelet —— 节点管家
  • 核心职责链

    1. 同步Pod清单(通过API Server)
    2. 调用容器运行时(containerd/CRI-O)
    3. 上报节点状态(CPU/Memory/Disk压力)
  • 关键启动参数

    --max-pods=110          # 单节点最大Pod数
    --eviction-hard=memory.available<500Mi 
    
2. kube-proxy —— 流量指挥官
  • 模式对比
模式 性能 规则更新延迟 适用场景
iptables 高(全量更新) 小于1000 Service
IPVS 低(增量更新) 生产环境首选
userspace 实时 已淘汰
  • IPVS调优示例
    sysctl -w net.ipv4.vs.conn_reuse_mode=0
    sysctl -w net.ipv4.vs.expire_nodest_conn=1
    
3. 容器运行时 —— 底层执行引擎
  • 选型指南
    • containerd:生产环境首选(K8S 1.20+默认)
    • CRI-O:OpenShift/OKD生态优选
    • Docker:仅限开发环境(已弃用dockershim)

三、核心概念:业务视角的抽象层

  1. Pod设计模式

    • Sidecar:日志收集容器与应用容器共存
    • Ambassador:统一处理外部服务访问
    • Adapter:标准化监控指标输出
  2. Service进阶用法

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
    spec:
      publishNotReadyAddresses: true  # 注册未就绪端点
    
  3. Deployment升级策略

    strategy:
      rollingUpdate:
        maxSurge: 25%
        maxUnavailable: 0
      type: RollingUpdate
    

四、生产环境黄金准则

  1. 高可用部署方案

    • API Server:3节点负载均衡
    • etcd:跨AZ部署+定期快照
    • 工作节点:至少跨2个物理机架
  2. 安全加固措施

    • API Server启用RBAC+审计日志
    • kubelet配置证书轮换
    --rotate-certificates=true 
    --cert-dir=/var/lib/kubelet/pki
    
  3. 灾难恢复演练

    • 模拟etcd数据丢失恢复
    • 控制平面节点宕机切换
    • 工作节点批量驱逐测试

五、故障排查工具箱

  1. 组件健康检查

    kubectl get componentstatuses
    
  2. API Server诊断

    # 检查请求延迟分布
    kube-apiserver --logging-format=json | grep 'latency' 
    
  3. kubelet日志分析

    journalctl -u kubelet -n 100 --no-pager | grep -i error
    
  4. 网络连通性测试

    kubectl run net-check --image=alpine --rm -it -- sh
    ping <service-name>.<namespace>.svc.cluster.local
    

架构师启示录
理解Kubernetes组件就像掌握汽车的发动机原理——日常驾驶可能不需要,但遇到性能瓶颈或故障时,这种认知会成为解决问题的关键。建议从以下路径逐步深入:

  1. 开发阶段:重点理解Pod/Deployment/Service的关系
  2. 预发环境:实践节点维护/滚动升级操作
  3. 生产环境:深入监控组件指标,优化调度策略

记住,每个Kubernetes集群都是活生生的有机体,只有真正理解其内部运作机制,才能让这个"云原生操作系统"发挥最大价值。

posted on   Leo-Yide  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示