根据实践学习K8S--7.使用Deployment进行不停机升级和回滚以及手动扩缩容

在现网情况下,业务升级常常需要停机,下面我们使用Deployment来进行不停机升级和回滚.

1.先使用创建多个nginx的pod

[root@node-1 pod]# cat nginx_deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
[root@node-1 pod]# 
[root@node-1 pod]# kubectl create -f nginx_deployment.yaml 
[root@node-1 pod]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-54f57cf6bf-lh2rv   1/1     Running   0          74s
nginx-deployment-54f57cf6bf-psbqx   1/1     Running   0          74s
nginx-deployment-54f57cf6bf-tgtms   1/1     Running   0          74s

2.现在我们对镜像从nginx:1.7.9升级到nginx:1.9.1

方法1:直接使用命令行修改镜像:
[root@node-1 pod]# kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
deployment.apps/nginx-deployment image updated
方法2:使用kubectl edit deployment命令修改deployment的配置信息
[root@node-1 pod]# kubectl edit deployments.apps nginx-deployment 

在这里插入图片描述

使用kubectl rollout status查看进度,正在

[root@node-1 pod]# kubectl rollout status deployment nginx-deployment 
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
deployment "nginx-deployment" successfully rolled out

实际上deployment操作是的rs,nginx-deployment-54f57cf6bf 是旧的rs,nginx-deployment-56f8998dbc是新的deployment

[root@node-1 pod]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
centos-56d49f9c64             0         0         0       7d4h
centos-6b68465d79             1         1         1       7d4h
nginx-deployment-54f57cf6bf   0         0         0       11m
nginx-deployment-56f8998dbc   3         3         3       6m58s

3.系统如何升级的说明
更新的过程中,系统会创建临时的deployment对象,先把旧的deployment的replicas减1,新的deployment加1,直到旧的deployment的副本为0,升级完成.
使用kubectl edit deployments命令,你可以看到spec下的strategy一些关于升级的默认策略.

spec:
  strategy:
    rollingUpdate:
      maxSurge: 25% #新旧副本pod的总数不超过配置数的比率,如果100个pod,那么运行中的和升级中的pod总和不超过125.
      maxUnavailable: 25% #升级过程中不可用状态pod的上限,意思就是升级过程中确保处于running状态的pod是75%以上,再继续更新.
    type: RollingUpdate#以滚动更新的方式逐个更新pod,如果是Recreate,系统会杀死所有的pod,重建pod.

4.回滚
现网中,如果发现新版本存在问题,需要回退,需要一系列的操作还原,还需要进行详细的测试,防止回退时配置错误.
deployment记录了升级前的配置,通过deployment,我们更容易将版本进行回退.

首先查看更新记录

[root@node-1 pod]# kubectl rollout history deployment nginx-deployment 
deployment.apps/nginx-deployment 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

我们发现没有记录更新信息,原因是因为我们在创建deployment的时候没有配置记录命令.创建的时候加上–record参数

[root@node-1 pod]# kubectl create -f nginx_deployment.yaml --record
deployment.apps/nginx-deployment created
[root@node-1 pod]#
#为了模拟版本的问题,我们升级的镜像选择一个不存在的版本
[root@node-1 pod]# kubectl set image deployment/nginx-deployment nginx=nginx:2020
#查看状态,发现由于找不到镜像,会一直卡在这里
[root@node-1 pod]# kubectl rollout status deployment nginx-deployment 
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...

#查看RS状态,发现新的RS一直在创建第一个pod,
[root@node-1 pod]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-54f57cf6bf   3         3         3       2m47s
nginx-deployment-569cb44c46   1         1         0       80s
#查看pod,发现有一个pod拉取镜像失败.
[root@node-1 pod]# kubectl get pod
NAME                                READY   STATUS             RESTARTS   AGE
centos-6b68465d79-5w9df             1/1     Running            0          7d5h
nginx-deployment-54f57cf6bf-2dfh8   1/1     Running            0          3m57s
nginx-deployment-54f57cf6bf-57plj   1/
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值