Kubernetes 核心组件架构详解

Kubernetes 核心组件架构详解

Kubernetes 是一个由多个核心组件组成的分布式系统,这些组件协同工作以提供容器编排能力。以下是 Kubernetes 的核心组件及其功能:

一、控制平面组件 (Control Plane)

1. kube-apiserver

功能:集群的统一入口和前端

  • 暴露 Kubernetes API
  • 处理 REST 操作请求
  • 验证和配置数据
  • 是所有其他组件通信的中枢

2. etcd

功能:分布式键值存储

  • 保存集群所有配置数据和状态
  • 采用 Raft 算法保证一致性
  • 默认只运行在 master 节点
  • 关键数据包括:Nodes, Pods, Configs, Secrets

3. kube-scheduler

功能:资源调度器

  • 监听未调度的 Pod
  • 根据资源需求、策略等选择合适 Node
  • 考虑因素:
    调度决策 资源需求 亲和/反亲和 数据位置 污点和容忍

4. kube-controller-manager

功能:运行各种控制器

  • Node Controller:监控节点状态
  • Replication Controller:维护 Pod 副本数
  • Endpoint Controller:维护 Service-Endpoint 关联
  • Service Account & Token Controller:管理命名空间账户

5. cloud-controller-manager (可选)

功能:与云平台交互

  • 对接云提供商 API
  • 管理负载均衡器、路由等
  • 实现节点控制器、路由控制器

二、节点组件 (Node Components)

1. kubelet

功能:节点代理

  • 管理 Pod 生命周期
  • 挂载 Pod 所需 Volume
  • 执行容器健康检查
  • 向 master 报告节点状态

2. kube-proxy

功能:网络代理

  • 维护节点网络规则

  • 实现 Service 的 VIP 转发

  • 工作模式:

    bash 复制代码
    # 查看当前模式
    ps aux | grep kube-proxy | grep -- --proxy-mode
    • iptables (默认)
    • ipvs (高性能)
    • userspace (已废弃)

3. 容器运行时 (Container Runtime)

常见实现

  • Docker
  • containerd
  • CRI-O
  • Mirantis Container Runtime

三、插件组件 (Addons)

1. DNS 服务

  • CoreDNS (默认)

    yaml 复制代码
    # 查看部署
    kubectl get deployment -n kube-system coredns

2. 网络插件

常见选择

  • Calico
  • Flannel
  • Weave Net
  • Cilium

3. Dashboard

  • Web 管理界面

    bash 复制代码
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

4. Ingress Controller

常见实现

  • Nginx Ingress
  • Traefik
  • HAProxy Ingress
  • Istio Ingress Gateway

四、组件交互关系

kubectl 注册/心跳 拉取配置 获取规则 User api-server etcd Scheduler Controller kubelet kube-proxy

五、组件部署方式对比

组件 典型部署位置 高可用方案
api-server Master 多实例 + LB
etcd Master 3/5节点集群
scheduler Master 多实例 leader选举
controller Master 多实例 leader选举
kubelet 所有Node -
kube-proxy 所有Node -

六、关键配置文件位置

  1. 组件配置

    • /etc/kubernetes/manifests/ (静态Pod方式)
    • /etc/systemd/system/kubelet.service.d/
  2. 认证文件

    • /etc/kubernetes/pki/ (CA证书)
    • /etc/kubernetes/kubelet.conf
  3. 网络配置

    • /etc/cni/net.d/ (CNI配置)
    • /var/lib/kubelet/ (kubelet数据)

七、组件健康检查

bash 复制代码
# 检查控制平面组件
kubectl get componentstatuses

# 详细检查
kubectl get --raw='/readyz?verbose'

理解这些核心组件及其交互关系,是掌握 Kubernetes 架构的基础。实际部署时,根据集群规模和使用场景,可能需要对这些组件进行特定的配置和优化。

相关推荐
一个向上的运维者8 分钟前
Kubernetes(k8s)的API Server 组件原理与结合生产实战教程
云原生·容器·kubernetes
Cleo_Gao12 小时前
交我算使用保姆教程:在计算中心利用singularity容器训练深度学习模型
人工智能·深度学习·容器·计算中心
马井堂13 小时前
马井堂-区块链技术:架构创新、产业变革与治理挑战(马井堂)
架构·区块链
海鸥8114 小时前
在K8S迁移节点kubelet数据存储目录
java·kubernetes·kubelet
王五周八15 小时前
基于策略模式实现灵活可扩展的短信服务架构
架构·策略模式
乌旭15 小时前
RISC-V GPU架构研究进展:在深度学习推理场景的可行性验证
人工智能·深度学习·架构·transformer·边缘计算·gpu算力·risc-v
Lw老王要学习16 小时前
Linux架构篇、第1章_02源码编译安装Apache HTTP Server 最新稳定版本是 2.4.62
linux·http·架构·云计算·apache
东风微鸣16 小时前
运维员工离职交接清单
docker·云原生·kubernetes·可观察性
元气满满的热码式17 小时前
云原生 | K8S中数据存储之StorageClass
云原生·容器·kubernetes