工作负载管理一组Pod, 可以让Pod有自恢复的能力。
Deployment 用于管理运行一个应用负载的一组 Pod,通常适用于不保持状态的负载。

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
strategy:
type: Recreate # 删除旧的Pod,然后再创建新的Pod,默认滚动更新
paused: true #默认false, 当为true时,不是产生一次部署的副本集(rs)
revisionHistoryLimit: 15 # 默认保留十个副本集,修改为15个
progressDeadlineSeconds: 600 # 如果在指定的时间内没有达到预期的更新状态,Kubernetes 将认为更新失败。
replicas: 3 # 副本数
selector: #选择器
matchLabels: #匹配标签
app: nginx
template: #Pod模版
metadata: #元数据
labels: #标签
app: nginx
spec:
containers: #容器
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
# 查看一个deployment产生三个资源
kubectl get pod,deploy,rs
一个deployment产生三个资源
Deployment控制ReplicaSet,ReplicaSet控制Pod的副本数
上述示例中更改nginx:1.14.2为其他版本时,启动新的副本集中的Pod,杀死老的副本集中的Pod。始终保持一次部署中存在可用Pod。
# 修改yml,重新应用。需要让k8s记录此次应用
kubectl apply -f nginx-deployment.yml --record
# yml文件不存在的时候也可以修改资源
kubectl get deploy,rs
kubectl edit deployment.apps/nginx-deployment
# 命令行修改镜像的方式
kubectl set image deploy nginx-deployment nginx=nginx:1.27.1
每次滚动更新都会产生一条ReplicaSet资源(更新的版本就是通过不同的rs资源来控制)
Deployment 每部署一个新版本,就会创建一个新的副本集
rs1 (副本集1)
rs2(副本集2)
……..
rsN(副本集N)
# 查看副本集历史
kubectl rollout history deployment nginx-deployment
# 回滚
kubectl rollout undo deployment nginx-deployment --to-revision=1
# paused: true暂停部署之后恢复部署
kubectl rollout resume deployment nginx-deployment