Kubernetes 核心
K8s 的核心思想:声明期望状态,控制器对账实现。面试必考三件套:Pod、Deployment、Service。
核心对象
| 对象 | 作用 |
|---|---|
| Pod | 最小调度单位(一个或多个容器) |
| Deployment | 管理 Pod 副本:滚动更新、自愈、扩缩 |
| Service | 稳定的访问入口:负载均衡、服务发现 |
| Namespace | 资源隔离分组 |
| ConfigMap/Secret | 配置与密钥 |
Pod 与 Deployment
Deployment 对账: 期望 3 副本, 挂了自动补
- Pod:容器 + 共享网络/存储(同 Pod 容器共享 localhost)。Pod 是“逻辑主机”
- Deployment:声明
replicas: 3+ 镜像版本,控制器保证实际 = 期望(自愈) - 更新:Deployment 滚动更新(新版 Pod 逐个替换,见发布策略篇)
Service 与服务发现
Pod 的 IP 是临时的(重建就变)。Service 提供稳定入口:
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
selector:
app: myapp # 选 Pod
ports:
- port: 80
targetPort: 8000- Service 有稳定的 ClusterIP + DNS 名(
myapp.namespace.svc),Pod 变化不影响访问 - 负载均衡:Service 把请求分到匹配的 Pod
- 类型:ClusterIP(集群内)、NodePort(节点端口)、LoadBalancer(云负载)
控制器模式
所有 K8s 对象都靠控制器对账:
期望状态(yaml)→ API Server 存储 → 控制器 watch → 实际状态 → 对账修复- 声明式:你只声明“要 3 个副本”,控制器管怎么达到
- 自愈:Pod 挂、节点挂、镜像拉取失败,控制器自动处理
配置:ConfigMap 与 Secret
- ConfigMap:非敏感配置(环境变量、配置文件)
- Secret:敏感数据(base64 只是编码,不是加密;生产配加密)
- 挂载方式:环境变量 / 文件卷
面试追问
- Pod 是什么? 最小调度单位:一个或多个容器共享网络和存储。Pod 是逻辑主机
- Deployment 干什么? 声明副本数 + 镜像版本,控制器对账自愈 + 滚动更新
- Service 解决什么? Pod IP 会变:Service 提供稳定入口 + 负载均衡 + DNS
- 控制器模式? 期望状态 → 对账 → 实际状态。声明式管理
- Pod 挂了会怎样? Deployment 控制器重建(新的 Pod 新 IP)。Service 自动摘除旧 Pod