企业cms建站,佛山 详情公布,网站的开发流程分为,wordpress 文章选择器在传统的应用升级时#xff0c;通常采用的方式是先停止服务#xff0c;然后升级部署#xff0c;最后将新应用启动。这个过程面临一个问题#xff0c;就是在某段时间内#xff0c;服务是不可用的#xff0c;对于用户来说是非常不友好的。而kubernetes滚动更新#xff0c;…在传统的应用升级时通常采用的方式是先停止服务然后升级部署最后将新应用启动。这个过程面临一个问题就是在某段时间内服务是不可用的对于用户来说是非常不友好的。而kubernetes滚动更新将避免这种情况的发生。
对于Kubernetes集群来说一个service可能有多个pod滚动升级RollingUpdate就是指每次更新部分Pod直至所有的Pod更新完成达到平滑升级的效果而不是在同一时刻将该Service下面的所有Pod停止。
参数配置
spec: strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 字段含义 type设置更新策略。有两个可选项recreate和RollingUpdate默认。Recreate表示全部重新创建RollingUpdate表示滚动更新。 maxSurge升级过程中最多可以比原先设置多出的POD数量可以是数字也可以是比例。例如maxSurage1replicas5,则表示升级过程中最多会有51个POD。 升级过程中最多允许有多少个POD处于不可用状态。maxUnavailable 1 表示升级过程中最多会有一个pod可以处于无法服务的状态在这里就是至少要有5-1个pod正常。 说明maxSurge和maxUnavaible在更新策略为RollingUpdate时才需要设置。
测试demo
# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx-deploy name: nginx-deploy spec: replicas: 5 revisionHistoryLimit: 10 minReadySeconds: 5 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 selector: matchLabels: app: nginx-deploy template: metadata: labels: app: nginx-deploy spec: restartPolicy: Always containers: - name: mynginx image: nginx:1.23 imagePullPolicy: IfNotPresent 举例
[rootk8s-master ~]# kubectl apply -f deployment.yaml deployment.apps/nginx-deploy created [rootk8s-master ~]#
使用nginx:1.23版本启动了5个pod。如下所示 现在我们进行升级使用nginx:1.23.1。我这里使用命令行写到yaml中也可以。
kubectl set image deployment/nginx-deploy mynginxnginx:1.23.1 --record
通过命令kubectl get pod -w我们可以看到整个清晰地过程即创建一个pod再删除一个pod直至所有的pod被更新完成。 查看下yaml
[rootk8s-master ~]# kubectl get deploy nginx-deploy -o yaml apiVersion: apps/v1 kind: Deployment ... spec: containers: - image: nginx:1.23.1 imagePullPolicy: IfNotPresent name: mynginx ... [rootk8s-master ~]#
可以发现nginx已经被更新为1.23.1版本更新成功。
版本回退
有版本升级就会有对应的版本回退。我们可以通过以下命令来完成版本回退。
# 历史记录 [rootk8s-master ~]# kubectl rollout history deployment/nginx-deploy deployment.apps/nginx-deploy REVISION CHANGE-CAUSE 1 none 2 kubectl set image deployment/nginx-deploy mynginxnginx:1.23.1 --recordtrue [rootk8s-master ~]#
VERSION1表示最初始的版本。VERSION2表示一次升级的版本依次类推...
# 查看某个版本历史详情 kubectl rollout history deployment/nginx-deploy --revision1 # 回滚(回到上次) kubectl rollout undo deployment/nginx-deploy
# 回滚(回到指定版本) kubectl rollout undo deployment/nginx-deploy --to-revision2
说明这些命令中的nginx-deploy是部署的名称换成自己的即可。前面数字表示版本。
注意点 1、更新策略 我们这里使用的是滚动更新RollingUpdate。如何使用Recreate会和传统的升级方法一样先停掉所有的pod然后重建pod。
2、参数设置 当maxSurge设置为0的时候maxUnavailable不能设置为0。maxSurge0时先删除后启动maxSurge!0时先启动后删除。
3、两个字段说明 spec: revisionHistoryLimit: 10 minReadySeconds: 5 revisionHistoryLimit表示保留的版本数。 minReadySeconds表示pod启动后经过多少秒pod才开始对外提供服务。
这两个字段一般都需要设置。