kubernetes之rollout命令详解

avatar 2022年3月11日18:17:56 评论 10,136 次浏览

kubernetes中rollout命令主要是针对资源进行管理,比如服务回滚,服务暂停,资源状态,查看历史等等。不过这里用的比较多的就是回滚版本,暂停资源,重新部署等下,下面看看在什么情况下会使用到这些命令,如何使用等等。

rollout可用的资源包括deployments(无状态)和daemonsets(有状态),但是如果针对服务更新就需要用到资源滚动的速率,这里不在详细阐述,后期会有一个新的章节针对maxSurge的解释。看一下rollout有哪些命令:

kubectl rollout history  ------(查看历史版本)  
kubectl rollout pause  ------(暂停资源) 
kubectl rollout resume  ------(恢复暂停资源) 
kubectl rollout status  ------(查看资源状态) 
kubectl rollout undo  ------(回滚版本) 
kubectl rollout restart ------(重新部署)

下面针对不通的命令举例说明:

[root@www.wulaoer.org ~]# kubectl rollout history -n wulaoer deployment wulaoer-service
deployment.apps/wulaoer-service
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
3         <none>
4         <none>
5         <none>
6         <none>
7         <none>
8         <none>
[root@www.wulaoer.org ~]# kubectl rollout history -n wulaoer deployment wulaoer-service --revision=2
deployment.apps/wulaoer-service with revision #2
Pod Template:
  Labels:	app=wulaoer-service
	pod-template-hash=9fb4b4458
	release=qa
  Containers:
   wulaoer-service:
    Image:	registry-vpc.cn-beijing.aliyuncs.com/reatil-harb/wulaoer-service-qa:6
    Port:	<none>
    Host Port:	<none>
    Limits:
      cpu:	1
      memory:	2560Mi
    Requests:
      cpu:	1
      memory:	2560Mi
    Readiness:	http-get http://:80/actuator/info delay=30s timeout=30s period=10s #success=1 #failure=10
    Environment:
      aliyun_logs_log-wulaoer-service:	stdout
    Mounts:	<none>
  Volumes:	<none>

两者的区别是一个查看服务的所有历史版本,一个是查看某一个版本的详细内容

[root@www.wulaoer.org ~]# kubectl rollout resume -n wulaoer deployment wulaoer-service
deployment.apps/wulaoer-service resumed
[root@www.wulaoer.org ~]# kubectl rollout pause -n wulaoer deployment wulaoer-service
deployment.apps/wulaoer-service paused
[root@www.wulaoer.org ~]# kubectl rollout status -n wulaoer deployment wulaoer-service
deployment "wulaoer-service" successfully rolled out

一个暂停一个恢复,这里没有看到暂停和恢复到效果,可以自己创建一个pod,然后副本大一些,创建后暂停你会发现要求的副本没有创建完,等你恢复时,副本会继续创建。

kubectl rollout undo --dry-run=true -n wulaoer deployment wulaoer-service
kubectl rollout undo -n wulaoer deployment wulaoer-service --to-revision=8

两者的区别是一查看上个版本的历史,一个是回滚到自定版本。

扩展部分:

以上是针对roolout的基础部分,上面有暂停有恢复,也有重新部署,你一定能想到restart,是的你猜对了,如果重新部署就是用的restart,这里要说明一下如果使用delete也可以实现重新部署但是delete的效果和restart不一样的,delete是直接删除,根据pod的restartPolicy会自动重新拉取,但是直接删除会影响到正在使用的请求,所以使用restart和更新是一样的,可以轮询更新,看下面的例子:

[root@www.wulaoer.org ~]# kubectl get pod -n wulaoer | grep wulaoer-service
wulaoer-service-77b6db7778-hhqn7                   1/1     Running   0          13m
wulaoer-service-77b6db7778-r88fz                   1/1     Running   0          95s
wulaoer-service-77b6db7778-rp85c                   1/1     Running   0          83s
[root@www.wulaoer.org ~]# kubectl rollout restart  -n wulaoer deployment wulaoer-service | grep wulaoer-service
deployment.apps/wulaoer-service restarted
[root@www.wulaoer.org ~]# kubectl get pod -n wulaoer | grep wulaoer-service
wulaoer-service-77b6db7778-hhqn7                   1/1     Running   0          13m
wulaoer-service-77b6db7778-r88fz                   1/1     Running   0          2m7s
wulaoer-service-77b6db7778-rp85c                   1/1     Running   0          115s
wulaoer-service-785c5d5d84-7tgvc                   0/1     Running   0          2s

重新部署是3个副本增加了一个,先创建后删除,所以在重新部署时不会影响到用户的使用。在很多时候需要重启但是白天又不弄重启,所以使用restart重新部署可以使用定时任务,这样也不用熬夜了。

注意,我这是新版本,如果是老版本deployment wulaoer-service 就会改成deployment/wulaoer-service

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: