网站首页 > java教程 正文
前文:
扩缩容
生产环境中,K8S的扩缩容用的是Horizontal Pod Autoscaler(以下简称HPA),Pod水平扩缩器。与“水平”对应的是“垂直”。
“水平”是指增加或减少Pod。
“垂直”是指增加或减少资源(CPU或内存等)给运行中的Pod。
其原理就是K8S监听Pod的资源利用指标,根据指定的指标&标准,自动进行扩缩容。
具体细节就不介绍了,毕竟本文也不是给专业的K8S运维人员看的,简单的算法就是:
期望副本数=ceil(当前副本数*(当前指标/期望指标))
例如,当前副本数=2,当前指标CPU利用率=100%,期望指标=50%,可得期望副本数=(2*(1/0.5))=4,进行自动扩容。
反之,当前副本数=4,当前指标CPU利用率=50%,期望指标=100%,可得期望副本数=(4*(0.5/1))=2,进行自动缩容。
与之配套的还有很多API、配置,本文就不讲这么复杂的了。在实际生产中,自动扩缩容应用起来还是很慎重的,毕竟指标这个东西,不可控的因素多,配置不好,动不动就扩缩容,反而会造成不稳定。
本文就讲一下怎么用上文的Deployment,手动扩缩容。
其实很简单,修改文件deployment.yml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deploy
spec:
replicas: 3
selector:
matchLabels:
project: k8sdemo
template:
metadata:
labels:
project: k8sdemo
spec:
containers:
- name: web-service
image: 用户名/k8sdemo:1.0
imagePullPolicy: Always
ports:
- containerPort: 8080
将spec.replicas由2改为3,重新执行就扩容了,同理,改为1,就缩容。
滚动更新
这个很实用,我还记得早年间没有K8S,甚至没有Jenkins、Sentinel、Nacos等这些CI/CD工具时,给多个副本升级是一件很手工的事情。先下线1个副本,升级,上线;再下线1个副本,升级,上线......
K8S就省事很多。
我们先把工程升级版本,按照前文的步骤推送镜像到Docker Hub。
修改deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deploy
spec:
replicas: 5
selector:
matchLabels:
project: k8sdemo
minReadySeconds: 20
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 1
template:
metadata:
labels:
project: k8sdemo
spec:
containers:
- name: web-service
image: 用户名/k8sdemo:1.1
imagePullPolicy: Always
ports:
- containerPort: 8080
说明:
滚动更新的目的是:将旧Pod删除至0,新Pod增加至期望副本数。
- 为了演示,事先将期望副本数扩容到了5个。
- 镜像版本改为1.1
- spec.minReadySeconds=20。代表更新一个副本后,强制等待20秒,再更新下一个。
- spec.strategy.type=RollingUpdate。强制要求用滚动更新的方式进行。
- spec.strategy.rollingUpdate.maxUnavailable=0。此次滚动更新过程中,不可用副本数的最大值(或最大比例),值越小,系统就越稳定,升级越平滑。本例设为0,代表滚动更新期间,不可以让副本数小于期望副本数。
- spec.strategy.rollingUpdate.maxSurge=1。此次滚动更新过程中,超过期望副本数的最大值(或最大比例),值越大,更新速度越快。本例设为1,代表滚动更新期间,副本数可以是5+1个。
- maxUnavailable=0,maxSurge=1,代表先增加1个新Pod,再删除1个旧Pod,直到新Pod5个增加完毕,旧Pod删除完毕。
执行命令后,可以通过监测命令看一下状态
kubectl rollout status deployment web-deploy
访问接口:
完结撒花[撒花][撒花]
- 上一篇: java 8项目升级JDK11升级改造步骤
- 下一篇: 干货!微服务全量升级JDK17,踩坑笔记整理
猜你喜欢
- 2024-12-31 深入理解Java锁升级:无锁 → 偏向锁 → 轻量级锁 → 重量级锁
- 2024-12-31 GitHub Copilot最新升级!61%的Java开发者用来摸鱼,效率提升55%
- 2024-12-31 Java批量更新太慢?多线程+List分段完美解决
- 2024-12-31 如何使用Puppet开源配置管理工具更新Java项目?
- 2024-12-31 Java 热更新 Groovy 实践及踩坑指南
- 2024-12-31 什么?Java都更新到19了?Java 19新特性详解!
- 2024-12-31 干货!微服务全量升级JDK17,踩坑笔记整理
- 2024-12-31 java 8项目升级JDK11升级改造步骤
- 2024-12-31 Java 近期更新:OpenJDK JDK Jakarta EE Spring等
- 2024-12-31 nacos配置更新后,java项目无需重启配置就生效
你 发表评论:
欢迎- 04-24Java Collections 工具类集合框架中常用算法解析
- 04-24桶排序的简单理解
- 04-24Java集合框架底层实现原理大揭秘
- 04-24Java 集合框架全面解析:选对数据结构,提升开发效率
- 04-24c#集合排序
- 04-24Java面试中常被问到的集合类深度解读
- 04-24VBA技术资料MF278:对集合进行排序
- 04-24Spring 最常用的 7 大类注解,史上最强整理
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)