Docker KubernetesNotes

第 09 章:架构全景

zjc 于 2026-01-09 发布

这是《Docker 与 Kubernetes 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 Kubernetes 将集群资源抽象成 API 对象,由控制面声明式驱动,让工作负载自愈、可调度、可扩展。

9.1 控制面组件

组件 职责
kube-apiserver API 入口、认证授权、etcd 读写
etcd 分布式键值存储
kube-scheduler 为待调度 Pod 选择节点
kube-controller-manager 控制器循环
cloud-controller-manager 云厂商集成

9.2 节点组件

组件 职责
kubelet 管理节点上容器生命周期
kube-proxy Service 转发规则
container runtime 运行容器,如 containerd
CNI Pod 网络
CSI 存储接入

9.3 声明式模型

apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: order-service
  template:
    metadata:
      labels:
        app: order-service
    spec:
      containers:
        - name: app
          image: registry.example.com/shop/order-service:1.2.0

控制器不断比较期望状态和实际状态:

Desired: 3 replicas
Actual: 2 replicas
Action: create 1 Pod

9.4 常见对象

对象 作用
Pod 最小调度单元
Deployment 无状态发布
StatefulSet 有状态工作负载
DaemonSet 每节点一个
Job / CronJob 任务
Service 稳定访问入口
Ingress HTTP 路由
ConfigMap 配置
Secret 敏感配置
PVC 存储声明
HPA 自动扩缩容

9.5 控制循环

Watch API objects
  -> Compare desired and observed state
  -> Reconcile
  -> Update status

这种模型适合最终一致系统,但要求应用支持幂等、健康检查和优雅停机。

9.6 API 请求流程

kubectl
  -> authentication
  -> authorization
  -> admission controllers
  -> validation
  -> etcd
  -> controllers / scheduler / kubelet

9.7 Pod 创建流程

提交 Deployment
  -> ReplicaSet 创建 Pod
  -> Scheduler 绑定 node
  -> kubelet 调用 containerd
  -> CNI 分配 IP
  -> 探针通过后接流

本章小结

Kubernetes 的核心是 API、etcd、控制器、调度器和 kubelet 组成的声明式闭环。理解对象职责和控制循环,是后面排查调度、发布、网络和存储问题的基础。

思考题

  1. etcd 挂了会有什么影响?
  2. Scheduler 和 kubelet 分别负责什么?
  3. 声明式和命令式有什么差异?
  4. API 请求经过哪些控制点?
  5. Pod 是什么级别的调度单元?