前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubectl Rollout 回滚Autoscale自动扩容

Kubectl Rollout 回滚Autoscale自动扩容

作者头像
kubernetes中文社区
发布2019-06-24 15:43:58
9800
发布2019-06-24 15:43:58
举报

Kubernetes 中采用ReplicaSet(简称RS)来管理Pod。如果当前集群中的Pod实例数少于目标值,RS 会拉起新的Pod,反之,则根据策略删除多余的Pod。Deployment正是利用了这样的特性,通过控制两个RS里面的Pod,从而实现升级。

滚动升级是一种平滑过渡式的升级,在升级过程中,服务仍然可用。

1. 创建deployment

代码语言:javascript
复制
kubectl create deploy nginx-test --image=nginx:1.14

2. scale 副本数量

代码语言:javascript
复制
kubectl scale deployment nginx-test --replicas 10

如果集群支持 horizontal pod autoscaling 的话,还可以为Deployment设置自动扩展:

代码语言:javascript
复制
kubectl autoscale deployment nginx-test --min=10 --max=15 --cpu-percent=80

3. 更新 deployment

更新镜像

代码语言:javascript
复制
kubectl set image deployment/nginx-test nginx=nginx:1.15

回滚到上一个版本:

代码语言:javascript
复制
kubectl rollout undo deployment/nginx-test

也可以使用 --revision参数指定某个历史版本:

代码语言:javascript
复制
kubectl rollout undo deployment/nginx-test --to-revision=2

4. 历史记录

代码语言:javascript
复制
kubectl rollout history deployment/nginx-test

创建 Deployment 的时候使用了--record参数可以记录命令,我们可以很方便的查看每次 revision 的变化。查看单个revision 的详细信息:

代码语言:javascript
复制
kubectl rollout history deployment nginx-test --revision=1

5. 验证发布

代码语言:javascript
复制
kubectl rollout status deploy/nginx-test

6. 回滚发布

代码语言:javascript
复制
kubectl rollout undo deployments/nginx-test

想回滚到指定版本呢?答案是k8s完美支持,并且还可以通过资源文件进行配置保留的历史版次量

代码语言:javascript
复制
kubectl rollout undo deployment/nginx-test --to-revision=<版次>

原理

k8s分批次有序地进行着滚动更新,直到把所有旧的副本全部更新到新版本。实际上,k8s是通过两个参数来精确地控制着每次滚动的pod数量:

maxSurge 滚动更新过程中运行操作期望副本数的最大pod数,但不能为0;也可以为百分数(eg:10%)。默认为25%。

maxUnavailable 滚动更新过程中不可用的最大pod数,但不能为0;也可以为百分数(eg:10%)。默认为25%。

重要参数 maxSurge与maxUnavailable

maxSurge: 1 表示滚动升级时会先启动1个pod

maxUnavailable: 1 表示滚动升级时允许的最大Unavailable的pod个数

由于replicas为3,则整个升级,pod个数在2-4个之间

剖析部署概况

DESIRED 最终期望处于READY状态的副本数

CURRENT 当前的副本总数

UP-TO-DATE 当前完成更新的副本数

AVAILABLE 当前可用的副本数

滚动过程是通过控制两个副本集来完成的

使用 autoscaler 自动设置在kubernetes集群中运行的pod数量(水平自动伸缩)。

指定Deployment、ReplicaSet或ReplicationController,并创建已经定义好资源的自动伸缩器。使用自动伸缩器可以根据需要自动增加或减少系统中部署的pod数量。

代码语言:javascript
复制
$ autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]

示例

使用默认的自动伸缩策略,指定目标CPU使用率,使其Pod数量在2到10之间。

代码语言:javascript
复制
kubectl autoscale deployment/nginx-test --min=2 --max=10

使其Pod的数量介于1和5之间,CPU使用率维持在80%。

代码语言:javascript
复制
kubectl autoscale deploy/nginx-test --max=5 --cpu-percent=80

原文地址:https://blog.csdn.net/zhonglinzhang/article/details/81119068

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 kubernetes中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档