8.k8s-node组件介绍

k8s-node组件介绍

    • 一、节点组件概述
    • 二、kubelet
      • [2.1 定义与作用](#2.1 定义与作用)
      • [2.2 部署方式](#2.2 部署方式)
      • [2.3 核心配置(/var/lib/kubelet/config.yaml)](#2.3 核心配置(/var/lib/kubelet/config.yaml))
    • 三、kube-proxy
      • [3.1 定义与作用](#3.1 定义与作用)
      • [3.2 部署方式](#3.2 部署方式)
      • [3.3 工作模式](#3.3 工作模式)
    • 四、集群通信架构
      • [4.1 通信协议](#4.1 通信协议)
      • [4.2 架构全景图](#4.2 架构全景图)
      • [4.3 关键架构特征](#4.3 关键架构特征)
    • 五、第三方控制器与扩展机制
      • [5.1 需求背景](#5.1 需求背景)
      • [5.2 扩展方式](#5.2 扩展方式)
      • [5.3 架构位置](#5.3 架构位置)
    • 六、节点组件故障排查
      • [6.1 kubelet 常见问题](#6.1 kubelet 常见问题)
      • [6.2 kube-proxy 常见问题](#6.2 kube-proxy 常见问题)
    • 七、总结

一、节点组件概述

Kubernetes 节点(Node) 包含两个核心组件,分别负责容器生命周期管理与网络流量转发:

组件 部署方式 核心职责
kubelet 二进制进程(yum安装) Pod 生命周期管理
kube-proxy DaemonSet Service 网络代理与负载均衡

注:Master 节点同时也是特殊 Node,同样运行 kubelet 与 kube-proxy。


二、kubelet

2.1 定义与作用

kubelet 是运行在每个节点上的 Kubernetes 代理进程,负责与 Master 通信并管理节点上的容器化工作负载。

核心职责:

职责 说明
Pod 生命周期管理 创建、启动、停止、删除 Pod 中的容器
状态上报 定期向 apiserver 报告节点与 Pod 状态
健康检查 执行 livenessProbe、readinessProbe
资源监控 采集节点与容器的 CPU、内存使用数据
Volume 管理 挂载和卸载 Pod 声明的存储卷
静态 Pod 管理 监控 staticPodPath 目录,自动创建/删除静态 Pod

2.2 部署方式

二进制进程:

bash 复制代码
# 通过 yum 安装,systemd 管理
yum install -y kubelet
systemctl enable kubelet
systemctl start kubelet

yum安装的kubelet是二进制方式运行的。

2.3 核心配置(/var/lib/kubelet/config.yaml)

配置项 作用 典型值
staticPodPath 静态 Pod 监控目录 /etc/kubernetes/manifests
cgroupDriver cgroup 驱动,必须与容器运行时一致 systemd
clusterDNS 集群 DNS 服务 IP(CoreDNS) 10.96.0.10
clusterDomain 集群域名后缀 cluster.local
authentication 与 apiserver 双向 TLS 认证 使用 CA 证书
authorization 鉴权模式 Webhook
rotateCertificates 证书自动轮转 true

关键文件:

  • /etc/kubernetes/kubelet.conf:连接 apiserver 的 kubeconfig 文件
  • /etc/kubernetes/pki/ca.crt:集群根 CA 证书
  • /var/lib/kubelet/pki/:kubelet 自身证书
shell 复制代码
# 查看 连接 apiserver 的 kubeconfig 文件
cat /var/lib/kubelet/config.yaml
yaml 复制代码
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 0s
    enabled: true
  x509:
    clientCAFile: /etc/kubernetes/pki/ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 0s
    cacheUnauthorizedTTL: 0s
cgroupDriver: systemd
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
cpuManagerReconcilePeriod: 0s
evictionPressureTransitionPeriod: 0s
fileCheckFrequency: 0s
healthzBindAddress: 127.0.0.1
healthzPort: 10248
httpCheckFrequency: 0s
imageMinimumGCAge: 0s
kind: KubeletConfiguration
logging:
  flushFrequency: 0
  options:
    json:
      infoBufferSize: "0"
  verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 0s
nodeStatusUpdateFrequency: 0s
rotateCertificates: true
runtimeRequestTimeout: 0s
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /etc/kubernetes/manifests
streamingConnectionIdleTimeout: 0s
syncFrequency: 0s
volumeStatsAggPeriod: 0s

三、kube-proxy

3.1 定义与作用

kube-proxy 是运行在每个节点上的网络代理组件,实现 Kubernetes Service 的抽象。

核心职责:

职责 说明
Service 后端负载均衡 将访问 ClusterIP 的流量转发至后端 Pod
服务发现 监听 Service 与 Endpoints 变化,动态更新转发规则
对外暴露服务 NodePort、LoadBalancer 类型的流量入口

本质:kube-proxy 不是网络插件,不负责 Pod 跨主机通信(Pod 网络由 CNI 实现)。

3.2 部署方式

DaemonSet:

bash 复制代码
# kubeadm 部署的集群,kube-proxy 以 DaemonSet 形式运行
kubectl get daemonset -n kube-system kube-proxy

优势:

  • 声明式管理:只需配置一次,新增节点自动运行
  • 故障自愈:Pod 异常时 DaemonSet 自动重建
  • 统一版本:全集群 kube-proxy 版本一致

3.3 工作模式

模式 原理 优缺点
iptables(默认) 维护 iptables NAT 规则 稳定可靠,大规模集群规则数庞大
IPVS 使用内核 IPVS 虚拟服务器 高性能,支持更复杂的负载均衡算法
userspace(已弃用) 用户态代理 性能差,仅作历史参考

规则恢复机制:

bash 复制代码
# 删除 kube-proxy Pod 将触发重建,自动恢复 iptables 规则
kubectl delete pod -n kube-system kube-proxy-<xxx>

四、集群通信架构

4.1 通信协议

Kubernetes 集群所有组件间通信均采用 HTTPS + 双向 TLS 认证。

通信链路 证书类型 特点
kubelet ↔ apiserver 客户端证书 双向验证
kube-proxy ↔ apiserver 客户端证书 双向验证
apiserver ↔ etcd 客户端证书 双向验证
apiserver ↔ kubelet 客户端证书 apiserver 访问 kubelet 获取 metrics/logs
controller-manager/scheduler ↔ apiserver 客户端证书 双向验证

与传统 HTTPS 区别:

  • 单向 TLS:仅客户端验证服务端证书
  • 双向 TLS(mTLS):服务端与客户端互相验证证书,Kubernetes 采用此模式

4.2 架构全景图

plain 复制代码
                           ┌─────────────────────┐
                           │       etcd          │
                           │   (静态 Pod)      │
                           └──────────┬──────────┘
                                      │
                                      ▼
                           ┌─────────────────────┐
                           │   kube-apiserver    │◄────┐
                           │   (静态 Pod)      │     │
                           └──────────┬──────────┘     │
                                      │                │
              ┌───────────────────────┼────────────────┼───────────────┐
              │                       │                │               │
              ▼                       ▼                ▼               │
    ┌─────────────────┐    ┌─────────────────┐  ┌─────────────────┐   │
    │      kcm        │    │ kube-scheduler  │  │   各种第三方    │   │
    │ (静态 Pod)    │    │ (静态 Pod)    │  │   Controller   │   │
    └─────────────────┘    └─────────────────┘  └─────────────────┘   │
              │                       │                │               │
              └───────────────────────┼────────────────┘               │
                                      │                                │
                                      ▼                                │
                           ┌─────────────────────┐                    │
                           │      Node(s)        │                    │
                           │  ┌───────────────┐  │                    │
                           │  │   kubelet     │──┘                    │
                           │  │ (二进制)    │  HTTPS(mTLS)          │
                           │  └───────────────┘  ▲                    │
                           │  ┌───────────────┐  │                    │
                           │  │  kube-proxy   │──┘                    │
                           │  │ (DaemonSet) │  HTTPS(mTLS)          │
                           │  └───────────────┘                       │
                           │  ┌───────────────┐                       │
                           │  │     CNI       │(Pod 网络,非 mTLS)  │
                           │  │   (DaemonSet) │                       │
                           │  └───────────────┘                       │
                           └─────────────────────────────────────────┘

4.3 关键架构特征

特征 说明
apiserver 为中心 所有组件只与 apiserver 通信,组件间不直接通信
双向 TLS 全链路 mTLS 加密认证
声明式 API 所有组件均为 apiserver 的客户端,通过 watch 机制获取状态变更
可扩展性 通过 CRD + 第三方 Controller 扩展平台能力

五、第三方控制器与扩展机制

5.1 需求背景

内置控制器(Deployment、StatefulSet 等)仅能管理 Kubernetes 原生资源。

业务需求:

  • 云服务商集成(ALB Ingress、云盘自动挂载)
  • 自定义业务编排逻辑
  • 外部系统联动

5.2 扩展方式

扩展点 实现方式 示例
自定义资源(CRD) 定义新的 API 对象 VirtualMachineDatabase
自定义控制器 监听 CRD 变化,驱动实际状态 云盘控制器、负载均衡器控制器
Operator CRD + 自定义控制器封装 etcd-operator、prometheus-operator

5.3 架构位置

第三方控制器与 kube-controller-manager 并列:

  • 均作为 apiserver 的客户端
  • 均遵循控制器模式(Reconcile Loop)
  • 均支持 Leader Election 实现高可用

六、节点组件故障排查

6.1 kubelet 常见问题

现象 排查命令 常见原因
kubelet 未运行 systemctl status kubelet 未启动、cgroup 驱动不匹配
Node 状态 NotReady journalctl -u kubelet -f 网络插件未就绪、证书过期
Pod 无法创建 kubectl describe pod 磁盘压力、内存压力、静态 Pod 路径错误

6.2 kube-proxy 常见问题

现象 排查命令 常见原因
Service ClusterIP 无法访问 `iptables -t nat -L -n grep `
NodePort 无法访问 kubectl logs -n kube-system kube-proxy-<xxx> 内核模块未加载(IPVS)
部分后端不可达 kubectl get endpoints <service> Endpoints 未正确更新

iptables 规则恢复:

bash 复制代码
kubectl delete pod -n kube-system -l k8s-app=kube-proxy

七、总结

组件 部署形态 核心依赖 职责边界
kubelet 二进制进程 无(独立管理静态 Pod) Pod 生命周期
kube-proxy DaemonSet apiserver Service 网络代理
CNI 插件 DaemonSet Pod 跨主机通信

核心结论:

  1. kubelet 是节点的"心脏"------以二进制形式常驻,独立于集群控制平面
  2. kube-proxy 是 Service 的"翻译官"------将虚拟 IP 转化为具体转发规则
  3. Pod 跨主机通信 ≠ kube-proxy------这是 CNI 的职责,常见混淆点
  4. 全链路 mTLS------Kubernetes 安全架构的基石
  5. 控制器模式可扩展------第三方 Controller 与核心控制器平等协作

一句话架构:

kubelet 管死活,kube-proxy 管流量,CNI 管连通,三者合一构成节点运行时的完整能力。

相关推荐
没有bug.的程序员2 小时前
容器网络深度探究:从 CNI 插件选型内核到 K8s 网络策略安全防护实战指南
java·网络·安全·kubernetes·k8s·cni·容器网络
人间打气筒(Ada)2 小时前
k8s:认证、授权、准入控制
云原生·容器·kubernetes·云计算·k8s认证·k8s授权·k8s准入控制
青及笄13 小时前
node_moudle无权限
node.js·node
A-刘晨阳20 小时前
K8S 之 DaemonSet
运维·云原生·容器·kubernetes·daemonset
切糕师学AI1 天前
Kubernetes 中的 Volume(存储卷)
云原生·容器·kubernetes
ghostwritten1 天前
worker01 NotReady 排查与修复步骤
云原生·kubernetes
zmjjdank1ng2 天前
创建 NodePort 类型的 Service
运维·kubernetes
努力搬砖的咸鱼2 天前
Kubernetes Service :ClusterIP、NodePort、LoadBalancer
微服务·云原生·容器·架构·kubernetes
文静小土豆2 天前
K8s Gateway API 全面指南:从入门到实践
kubernetes·gateway