【kubernetes】--controller(deployment)
文章目录
- 场景
- 基本概念
- 核心组件关系
- 主要特性
- 1. 滚动更新(Rolling Update)
- 2. 回滚(Rollback)
- 3. 版本历史
- 4. 扩缩容
- 典型 YAML 示例
- 常用命令
场景
Deployment 非常适合管理无状态应用,如:
- Web 服务器
- API 服务
- 前端应用
- 其他可以水平扩展的服务
对于有状态应用,建议使用 StatefulSet 控制器
基本概念
Deployment 控制器主要实现了以下功能:
- 声明式更新:只需描述期望状态,Deployment 会自动将实际状态调整为期望状态
- 滚动更新:支持零停机部署,逐步用新版本替换旧版本
- 回滚:可以轻松回退到之前的版本
- 扩缩容:可以方便地增加或减少 Pod 副本数量
简化了应用的部署和更新过程
核心组件关系
Deployment → ReplicaSet → Pod
一个 Deployment 管理一个或多个 ReplicaSet,每个 ReplicaSet 又管理一组相同配置的 Pod。
主要特性
1. 滚动更新(Rolling Update)
默认更新策略,特点:
- 逐步创建新 Pod 并删除旧 Pod
- 保证应用在更新期间始终可用
- 可以配置更新速度(maxUnavailable, maxSurge)
先创建新pod,然后删除旧pod
kubectl set image deployment web nginx=nginx:xxx
2. 回滚(Rollback)
如果更新后出现问题:
# 还原到上一个版本
kubectl rollout undo deployment <deployment-name>
3. 版本历史
查看更新历史:
kubectl rollout history deployment <deployment-name>
4. 扩缩容
手动调整副本数:
kubectl scale deployment <deployment-name> --replicas=5
或通过修改 YAML 文件中的 replicas
字段。
典型 YAML 示例
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80
常用命令
-
创建 Deployment:
kubectl apply -f deployment.yaml
-
查看 Deployment 状态:
kubectl get deployments
-
查看滚动更新状态:
kubectl rollout status deployment <deployment-name>
-
暂停/恢复更新:
kubectl rollout pause deployment <deployment-name> kubectl rollout resume deployment <deployment-name>