1.编写一个yaml文件
vi deployment-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
namespace: default
spec:
replicas: 3
progressDeadlineSeconds: 600 #表示在这个时间段内,如果 Deployment 的 Pod 没有完成更新,则认为更新失败。默认值为 600 秒。这个参数主要用于控制 Deployment 更新的超时时间,避免更新过程中出现问题导致一直处于更新中的状态
minReadySeconds: 10 #表示 Deployment 的 Pod 至少需要在这个时间段内处于 Ready 状态,才会被认为是更新成功。默认值为 0 秒。这个参数主要用于控制 Deployment 更新的稳定性。在更新过程中,如果 Pod 的状态不稳定,可能会导致服务不可用。通过设置 minReadySeconds,可以确保更新后的 Pod 状态稳定后再将其纳入服务
strategy:
rollingUpdate:
maxSurge: 1 #参数定义了在滚动更新过程中,允许同时处于正在部署状态的Pod数量与原有多少Pod数量的比例。例如,如果maxSurge设置为50%,则在进行滚动更新时,可以同时部署50%的新版本Pod,剩余的50%仍为旧版本Pod。默认值为25%,也可以使用准确的个数
maxUnavailable: 0 #参数定义了在滚动更新过程中,允许同时处于不可用状态的Pod数量与原有多少Pod数量的比例。例如,如果maxUnavailable设置为25%,则在进行滚动更新时,最多允许25%的Pod处于不可用状态。这个参数可以用来控制滚动更新时对应用程序可用性的影响。默认值为25%,最安全的滚动更新是设置此项为0,maxSurge设置为1,即生成一个新版本的pod之后,再删除一个老版本的pod,所以在更新过程中会存在4个pod,但是这个配置的更新速度是最慢的
type: RollingUpdate #更新模式的配置,一共有两种更新模式,分别是RollingUpdate、Recreate,前者采用滚动更新的方式更新pod,后者则是直接删除所有旧版本的pod,再重建新版本的pod
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.17
imagePullPolicy: IfNotPresent #拉取镜像的策略,表示本地有这个镜像时,直接使用本地镜像,没有时才从镜像源拉取
ports:
- containerPort: 80
resources:
requests:
memory: 50Mi
cpu: 0.5
limits:
memory: 100Mi
cpu: 1
2.使用yaml文件
kubectl create -f deployment-nginx.yaml --record
--record表示记录此版本到deployment的history中,回滚时可以使用
查看一下deployment和pod
kubectl get deployment -o wide -n default
kubectl get pod -n default
现在我们来更新一下nginx的镜像版本,做一个滚动升级,并且查看一下pod和deployment
kubectl set image deployment nginx nginx=nginx:1.18 --record
kubectl get deployment -o wide -n default
kubectl get pod -n default -l app=nginx
可以看到在滚动更新的过程中pod的个数变成了4个,当更新完成后pod的数量恢复成了3个
再来查看一下deployment使用的镜像版本
kubectl get deployment nginx -o wide
接下来介绍一下有关滚动更新的rollout命令
kubectl rollout history deployment nginx -n default
查看历史版本,可以通过历史版本中的revision恢复成指定的版本
kubectl rollout pause deployment nginx -n default
暂停滚动更新
kubectl rollout resume deployment nginx -n default
恢复滚动更新
kubectl rollout status deployment nginx -n default
查看滚动更新的状态
kubectl rollout undo deployment nginx -n defaulre --to-revision=1
恢复到指定的版本
也可以使用以下命令查看
kubectl rollout --help