Kubernetes 核心概念
在容器规模化之后,出现的问题:
| 问题 | 传统方式 |
|---|---|
| 容器多、机器多 | 手工 SSH |
| 服务挂了 | 人工重启 |
| 扩容缩容 | 人工加机器 |
| 服务发现 | 写 IP |
| 滚动升级 | 手工停机 |
| 多环境隔离 | 约定 |
👉 Kubernetes = 容器的“操作系统”
它解决的是: 容器的自动部署、调度、扩缩容、自愈、网络、存储、升级
+----------------------------+
| 用户 / kubectl |
+-------------+--------------+
|
+-------------v--------------+
| Control Plane |
| apiserver / scheduler |
| controller / etcd |
+-------------+--------------+
|
+-------------v--------------+
| Node |
| kubelet / containerd |
| kube-proxy / CNI |
+----------------------------+
- 所有请求入口(REST API)
- 认证、鉴权、准入
- 唯一和 etcd 通信的组件
👉 没有 apiserver,整个集群就不存在
- 分布式 KV 存储
- 保存 集群所有状态
- 强一致性(Raft)
⚠️ etcd 满磁盘 = 集群瘫痪
- 给 Pod 选择运行的 Node
- 不创建 Pod,只“决策”
流程:
- 过滤节点(Filter)
- 打分(Score)
- 绑定(Bind)
- 一堆控制器的集合
- 保证“期望状态 = 实际状态”
常见控制器:
- Deployment / ReplicaSet
- Node Controller
- Endpoint Controller
- Job Controller
- Node 上的“管家”
- 管理 Pod 生命周期
- 调用 containerd 创建容器
- 定期向 apiserver 汇报状态
- containerd / CRI-O
- 真正运行容器的组件
- Service 的实现者
- 维护 iptables / ipvs 转发规则
- 实现四层负载均衡
- Flannel / Calico / Cilium
- 给 Pod 分配 IP
- 维护 Pod 间通信
Kubernetes 一切皆资源
每个资源都是一个 YAML 对象:
apiVersion
kind
metadata
spec
status
-
一个或多个容器的组合
-
共享:
- IP
- Network namespace
- Volume
- 需要 sidecar
- 需要共享资源
- 调度原子性
👉 Pod 是临时的、短生命周期
| 类型 | 用途 |
|---|---|
| Deployment | 无状态应用 |
| StatefulSet | 有状态服务 |
| DaemonSet | 每节点一个 |
| Job | 一次性任务 |
| CronJob | 定时任务 |
- 管理 ReplicaSet
- 滚动升级
- 回滚
- 稳定网络身份
- 稳定存储
- 顺序部署
- Pod IP 会变
- Pod 会重建
- 需要统一访问入口
- 虚拟 IP(VIP)
- DNS 名称
- 负载均衡
类型:
- ClusterIP
- NodePort
- LoadBalancer
- Headless
- HTTP/HTTPS 路由
- TLS 终止
- 域名转发
Ingress = 规则
Ingress Controller = 实现者(Nginx / Traefik)
- 最简单节点选择
- 更灵活的节点亲和
- Pod 之间关系
- Node 拒绝 Pod
- Pod 声明我能忍
用途:
- master 隔离
- 专用节点
- GPU 节点
- requests -> 调度依据
- limits -> 使用上限
- 基于 CPU / 内存 / 自定义指标
- 需要 metrics-server
| 名称 | 作用 |
|---|---|
| PV | 实际存储 |
| PVC | 存储申请 |
| StorageClass | 动态创建 |
- emptyDir
- hostPath
- NFS
- CSI(云盘)
- 配置文件
- 环境变量
- 密码
- Token
- TLS 证书
- Role / ClusterRole
- RoleBinding
- ServiceAccount
- Pod 网络访问控制
- 依赖 CNI 插件
Pending -> Running -> Succeeded / Failed
- startupProbe
- readinessProbe
- livenessProbe
- Pod 崩溃 -> 重启
- Node 掉线 -> Pod 漂移
- 副本不足 -> 自动补齐
核心设计思想:
- 声明式
- 期望状态
- 控制循环
- 解耦
- 自动化
Kubernetes 是一个 以声明式 API 为核心,
通过 控制器不断对齐期望状态和实际状态,
实现 容器应用自动化管理的平台。