K8S水平伸缩器 - 自动伸缩微服务实例数量

作者:justmine

头条号:大数据达摩院

微信公众号:大数据处理系统

创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。

为了方便大家阅读,可以关注头条号或微信公众号,后续所有的文章将在移动端首发,想学习更多云原生知识,请关注我。

前言

k8s已经成为了容器管理和编排的标准,当应用容器化到K8S后,如何根据服务器资源自动伸缩应用,以应对任何的突发流量。

请考虑如何实现以下应用场景?

当服务器高负载时,自动扩容应用服务运行数量;当服务器低负载时,自动缩减应用服务运行数量,以实现“合适规模”的应用部署,从而更好地利用集群资源。

本篇就来演示K8S如何实现上面的场景。

准备工作

安装metrics-server

项目地址:

https://github.com/kubernetes-sigs/metrics-server

Kubernetes Metrics Server 是集群中资源使用情况数据的聚合器。

下载

wget https://github.com/kubernetes-sigs/metrics-server/archive/v0.3.6.tar.gz && tar -xzf v0.3.6.tar.gz;

部署

# Kubernetes 1.7$ kubectl create -f metrics-server-0.3.6/deploy/1.7/# Kubernetes > 1.8$ kubectl create -f metrics-server-0.3.6/deploy/1.8+/

验证

kubectl get deployment metrics-server -n kube-system

演示

1、创建一个简单的 Apache Web 服务器应用程序

kubectl run httpd --image=httpd --requests=cpu=100m --limits=cpu=200m --expose --port=80

向此Apache Web服务器Pod提供100 millicpu和200 MB内存,并在端口80上提供服务。

2、为 httpd 部署创建 Horizontal Pod Autoscaler 资源。

kubectl autoscale deployment httpd --cpu-percent=50 --min=1 --max=10

为Apache Web服务器创建50%CPU利用率的Autoscaler,并设置伸缩参数,如下:

  • min(下限)=1:当平均CPU负载低于50%时,Autoscaler尝试减少部署中的Pod数量,最低1个。

  • max(上限)=10:当平均CPU负载大于50%时,Autoscaler尝试增加部署中的Pod数量,最高10个。

查看Autoscaler详细信息,如下:

命令:kubectl describe hpa/httpd

3、模拟高负载

向Apache Web服务器并发50万请求,命令如下:

kubectl run apache-bench -i --tty --rm --image=httpd -- ab -n 500000 -c 1000 http://httpd.default.svc.cluster.local/

输出:

4、查看Apache Web服务器整个自动伸缩过程

kubectl get horizontalpodautoscaler.autoscaling/httpd --watch

从上面可以看出,当服务器高负载时,Pod数量从1扩容到了10;当服务器低负载时,Pod数量从10又缩减到了1,这就是K8S的水平伸缩过程,也是K8S相对于传统部署方式的突出优势。

总结

本篇演示了K8S的水平伸缩,这种伸缩方式非常适合于无状态服务,那么问题来了,如下:

如何伸缩有状态服务呢?

答案:使用K8S的垂直伸缩器。

当K8S集群资源不够,如何进行集群级别的伸缩呢?

答案:使用K8S的集群伸缩器。

欲知后事如何,请关注下回演示。

工欲善其事,必先利其器,K8S还有很多超能力,想学习更多K8S知识,及相关实践,可以关注我。

参考

https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale

https://github.com/kubernetes/community/blob/master/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md

https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/horizontal-pod-autoscaler.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[蓝桥杯2019初赛]质数-质数筛or 水题

法一&#xff1a; 代码如下&#xff1a; #include <iostream> #include <cmath> using namespace std;bool check(int x) {for (int i 2; i < sqrt(x); i)if (x % i 0)return false;return true; }int main() {int n;int ans 0;for (int i 2; i; i) {if (c…

SqlServer 利用游标批量更新数据

SqlServer 利用游标批量更新数据Intro游标在有时候会很有用&#xff0c;在更新一部分不多的数据时&#xff0c;可以很方便的更新数据&#xff0c;不需要再写一个小工具来做了&#xff0c;直接写 SQL 就可以了Sample下面来看一个实际示例&#xff1a;-- 声明字段变量 DECLARE Re…

math:线性代数之行列式

math&#xff1a;线性代数之行列式 提供解题的方法总结 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢!

[蓝桥杯2019初赛]旋转-找规律

代码如下&#xff1a; #include <iostream> using namespace std; const int N 110; int a[N][N];int main() {int n, m;cin >> n >> m;for (int i 1; i < n; i)for (int j 1; j < m; j)cin >> a[i][j];for (int i 1; i < m; i){for (in…

《ASP.NET Core 微服务实战》-- 读书笔记(第5章)

第 5 章 创建数据服务选择一种数据存储由于我坚持要尽可能的跨平台&#xff0c;所以我决定选用 Postgres&#xff0c;而不用 SQL Server 以照顾 Linux 或 Mac 电脑的读者构建 Postgres 仓储在本节&#xff0c;我们要升级位置服务让它使用 Postgres为了完成这一过程&#xff0c;…

数据结构-拓扑排序

拓扑排序&#xff1a; 因为上一篇有点小问题&#xff08;Stack.base Stack.top 写成了 Stack.base Stack.base&#xff09;导致死循环&#xff0c;最后导致内存溢出&#xff0c;地址访问冲突 参考上一篇的链接&#xff1a; https://blog.csdn.net/qq_43552933/article/deta…

[蓝桥杯2018初赛]分数-找规律

题目描述 1/1 1/2 1/4 1/8 1/16 … 每项是前一项的一半&#xff0c;如果一共有20项,求这个和是多少&#xff0c;结果用分数表示出来。 类似&#xff1a;3/2当然&#xff0c;这只是加了前2项而已。分子分母要求互质。 代码如下&#xff1a; #include <iostream> u…

腾飞答不忘初心的三个问题

去年的时候有同学在微信上问了我3个问题&#xff0c;我觉得非常有代表性&#xff0c;当时没有回答。主要是通过简短的语言无法全面表述可能会产生歧义&#xff0c;所以决定专门写一篇文章来表达一下我的想法&#xff0c;需要说明的是以下内容只是以我个人的经验给大家一些参考。…

wordList04

wordList04 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

dfs递归实现组合型枚举

题目描述 从自然数1&#xff0c;2&#xff0c;…&#xff0c;n&#xff0c;从中任取r个数&#xff0c;输出所有组合。 输入 一行两个自然数n、r(1<n<21&#xff0c;1≤r≤n)。 输出 所有的组合&#xff0c;每一个组合占一行且其中的元素按由小到大的顺序排列&#xff0c;…

用 C# 写一个 Redis 数据同步小工具

用 C# 写一个 Redis 数据同步小工具Intro为了实现 redis 的数据迁移而写的一个小工具&#xff0c;将一个实例中的 redis 数据同步到另外一个实例中。(原本打算找一个已有的工具去做&#xff0c;找了一个 nodejs 的小工具&#xff0c;结果折腾了好久都没装上。。。于是就自己写了…

数据结构----冒泡排序

数据结构----冒泡排序 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> void bubbleSort(int a[], int length) {//冒泡排序for (int i 0; i < length - 1; i) {//趟数for (int j 0; j < length - i - 1; j) {if…

[蓝桥杯2018初赛]乘积尾零-数论

题目描述 如下的10行数据&#xff0c;每行有10个整数&#xff0c;请你求出它们的乘积的末尾有多少个零&#xff1f; 5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 6113 5659 5245 7432 3051 4434 6704 3594 9937 1173 6866 3397 4759 7557 3070 2287 1453 9899…

C#如何安全、高效地玩转任何种类的内存之Span的本质(一)。

前言作为.net程序员&#xff0c;使用过指针&#xff0c;写过不安全代码吗&#xff1f;为什么要使用指针&#xff0c;什么时候需要使用它&#xff0c;以及如何安全、高效地使用它&#xff1f;如果能很好地回答这几个问题&#xff0c;那么就能很好地理解今天了主题了。C#构建了一…

数据结构------选择排序

数据结构------选择排序 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> void simpleSelectSort(int a[], int length) {//选择排序int j;for (int i 0; i < length - 1; i) {int k i;//每趟排序中找到最小的元素…

[蓝桥杯2018初赛]第几个幸运数-数论+枚举

代码如下&#xff1a; #include <iostream> #include <cmath> using namespace std; typedef long long LL; LL n 59084709587505; LL ans 0;int main() {for (int i 0; pow(3, i) < n; i)for (int j 0; pow(5, j) < n; j)for (int k 0; pow(7, k) <…

向大厂看齐!为自己的程序增加自动转储的功能!

如果你还不清楚什么是转储文件&#xff0c;不知道什么时候需要转储文件&#xff0c;请参考转储文件系列文章的第一篇 —— 转储文件知多少。前言不知道各位小伙伴有没有遇到过 微信 或者 QQ 崩溃的情况。它们在崩溃的时候都会自动弹出一个对话框&#xff0c;提示用户上传相关文…

sqlite3 c++ VS编译生成静态库

官网 https://www.sqlite.org/download.html 下载sqlite-amalgamation和x86版本下载sqlite-dll-win32-x86、x64位版本sqlite-dll-win64-x64 解压 SQLITE-AMALGAMATION包含 shell.csqlite3.csqlite3.hsqlite3ext.hsqlite-dll-win32-x86包含 sqlite3.def sqlite3.dll建立一个空…

数据结构----单源最短路径Dijkstra

数据结构----单源最短路径Dijkstra 原理&#xff1a;参考趣学数据结构 代码&#xff1a; stack.h 栈代码 #pragma once #include<stdio.h> #define maxSize 100 typedef struct stack {int * base;int * top; }stack; bool init(stack & Stack) {//栈的初始化Stack.b…

在.NET中执行Async/Await的两种错误方法

微信公众号&#xff1a;架构师高级俱乐部关注可了解更多的编程&#xff0c;架构知识。问题或建议&#xff0c;请公众号留言;如果你觉得此文对你有帮助&#xff0c;欢迎转发在.NET中执行异步/等待的两种错误方法 在应用开发中&#xff0c;我们为了提高应用程序的吞吐能力或者异步…