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) |
| Ingress | HTTP/HTTPS 路由规则 |
| NetworkPolicy | Pod 间网络访问控制(相当于防火墙) |
配置与存储
| 资源 | 用途 |
|---|---|
| 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 实现多租户隔离。