Kubernetes 核心

返回 云原生

Kubernetes 是云原生架构的底座,提供容器编排、自动扩缩容、服务发现、滚动更新等能力。

整体架构

┌─────────────────────────────────────────┐
│           Control Plane(主节点)        │
│                                         │
│  ┌──────────────┐   ┌────────────────┐  │
│  │ kube-apiserver│   │ etcd           │  │
│  │ 所有请求入口  │   │ 集群状态存储   │  │
│  └──────┬───────┘   └────────────────┘  │
│         │                               │
│  ┌──────┴───────┐   ┌────────────────┐  │
│  │  scheduler   │   │controller-mgr  │  │
│  │  调度决策    │   │ 控制器管理器   │  │
│  └──────────────┘   └────────────────┘  │
└─────────────────────────────────────────┘
            │ 管理
            ▼
┌─────────────────────────────────────────┐
│           Worker Node(工作节点)        │
│                                         │
│  kubelet(与 APIServer 通信,管理 Pod)  │
│  kube-proxy(维护 iptables / IPVS 规则)│
│  Container Runtime(containerd / CRI-O)│
│                                         │
│  ┌──────────────────────────────────┐   │
│  │              Pod                 │   │
│  │  ┌────────────┐ ┌─────────────┐ │   │
│  │  │ app-container│ │  sidecar   │ │   │
│  │  └────────────┘ └─────────────┘ │   │
│  └──────────────────────────────────┘   │
└─────────────────────────────────────────┘

控制平面组件

kube-apiserver

集群唯一入口,所有操作(kubectl、控制器、kubelet)都通过 apiserver。

  • RESTful API,操作 etcd 中的资源对象
  • 认证(Authentication)→ 鉴权(RBAC)→ 准入控制(Admission)→ 持久化

etcd

分布式 KV 存储,保存集群全部状态(Pod、Service、ConfigMap 等)。

  • 基于 Raft 协议保证强一致性
  • 生产环境建议 3 或 5 节点集群
  • 定期备份,是集群恢复的唯一来源

scheduler(调度器)

决定 Pod 运行在哪个 Node 上。

调度流程:

待调度 Pod
   │
   ▼
过滤(Predicate):去掉资源不足、污点不匹配的节点
   │
   ▼
打分(Priority):选出最优节点
   │
   ▼
绑定(Bind):写入 etcd,kubelet 拉起 Pod

controller-manager

运行各类控制器,持续将集群实际状态驱动到期望状态(Reconcile Loop)。

控制器职责
Deployment Controller维护 ReplicaSet 副本数
ReplicaSet Controller维护 Pod 副本数
Node Controller检测节点健康,驱逐故障节点上的 Pod
Service Controller为 LoadBalancer 类型 Service 调用云厂商 API
HPA Controller根据指标自动扩缩容

Worker Node 组件

kubelet

每个 Node 上的 Agent,负责:

  • 向 apiserver 注册本节点
  • 拉取 Pod Spec,调用 CRI 启动容器
  • 上报 Pod 状态、节点资源
  • 执行存活/就绪探针

kube-proxy

维护节点上的网络规则(iptables 或 IPVS),实现 Service 的负载均衡。

Container Runtime

实际运行容器的引擎,通过 CRI(Container Runtime Interface)与 kubelet 通信。

Runtime特点
containerd主流,Docker 底层,轻量
CRI-O专为 K8s 设计,极简
Docker已不推荐直接作为 K8s Runtime

核心资源对象

工作负载

资源用途特点
Pod最小调度单元,包含一或多个容器不直接使用,通过上层资源管理
Deployment无状态服务支持滚动更新、回滚
StatefulSet有状态服务(DB、MQ)固定 Pod 名称、有序部署、持久存储
DaemonSet每个 Node 跑一个副本日志采集、监控 Agent
Job / CronJob一次性 / 定时任务完成即退出

服务发现与网络

资源用途
Service为一组 Pod 提供稳定的访问入口(ClusterIP / NodePort / LoadBalancer)
IngressHTTP/HTTPS 路由规则
NetworkPolicyPod 间网络访问控制(相当于防火墙)

配置与存储

资源用途
ConfigMap非敏感配置(环境变量、配置文件)
Secret敏感配置(密码、Token、证书),Base64 编码
PersistentVolume (PV)集群级持久化存储
PersistentVolumeClaim (PVC)Pod 申请存储的声明
StorageClass动态 PV 供给,定义存储类型

自动扩缩容

类型说明
HPA(Horizontal Pod Autoscaler)根据 CPU / 内存 / 自定义指标水平扩缩 Pod
VPA(Vertical Pod Autoscaler)自动调整 Pod 的 CPU/内存 Request/Limit
KEDA基于事件驱动扩缩容(如 Kafka 消费积压量)
Cluster Autoscaler自动增删 Node

Pod 生命周期

Pending(调度中)
   │
   ▼
Init Containers(初始化容器,顺序执行)
   │
   ▼
Running(主容器运行)
   │
   ├── 存活探针(liveness):失败则重启容器
   ├── 就绪探针(readiness):失败则从 Service 摘除
   └── 启动探针(startup):慢启动保护
   │
   ▼
Succeeded / Failed / Unknown

Namespace 隔离

cluster
  ├── namespace: prod      # 生产环境
  ├── namespace: staging   # 预发布
  ├── namespace: dev       # 开发
  └── namespace: monitoring # 监控组件

通过 RBAC + NetworkPolicy 实现多租户隔离。