这是《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 组成的声明式闭环。理解对象职责和控制循环,是后面排查调度、发布、网络和存储问题的基础。
思考题
- etcd 挂了会有什么影响?
- Scheduler 和 kubelet 分别负责什么?
- 声明式和命令式有什么差异?
- API 请求经过哪些控制点?
- Pod 是什么级别的调度单元?