K8S原来如此简单(五)Metrics Server与HPA
什么是HPA
https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale/
我们前面有通过kubectl scale命令手动扩展我们的服务,生产环境中我们希望k8s能够根据一些指标信息自动扩展服务。
这时我们可以利用k8s的HPA(水平扩展)来根据 CPU利用率等指标自动扩缩Deployment、ReplicaSet 或 StatefulSet 中的 Pod 数量。
HPA原理
HPA控制器通过Metrics Server的API(Heapster的API或聚合API)获取指标数据,基于用户定义的扩缩容规则进行计算,得到目标Pod副本数量。
当目标Pod副本数量与 当前副本数量不同时,HPA控制器就向Pod的副本控制器 (Deployment、RC或ReplicaSet)发起scale操作,调整Pod的副本数量, 完成扩缩容操作。

MetricsServer
在说metricsserver之前,我们来看一个查看资源消耗情况的命令
查看Node资源消耗:
kubectl top node k8s-node1
查看Pod资源消耗:
kubectl top pod k8s-node1
需要注意的是,使用这个命令我们需要安装metrics server,否则会提示:Metrics API不可用。
安装metrics server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
查看metrics安装结果
kubectl get pod --all-namespaces |grep metrics
查看pod资源使用率
kubectl top pod chesterdeployment-75c64cc8b6-k4jqw -n chesterns
安装好之后,我们可以看到已经可以正常使用kubectl top命令了。下面我们开始演示通过hpa来模拟根据cpu自动水平扩展。
仍然使用之前课程的deployment,需要修改deployment的副本数为1
apiVersion: apps/v1
kind: Deployment
metadata:
name: chesterdeployment
namespace: chesterns
labels:
app: chesterapi
spec:
replicas: 1
selector:
matchLabels:
app: chesterapi
template:
metadata:
labels:
app: chesterapi
spec:
containers:
- name: oneapi
image: registry.cn-beijing.aliyuncs.com/chester-k8s/oneapi:latest
ports:
- containerPort: 5000
livenessProbe:
httpGet:
path: /test
port: 5000
应用deployment
kubectl apply -f deployment.yaml
在我们的oneapi里有一个highcpu的接口,可以帮助我们实现高cpu操作
[HttpGet("highcpu")]
public string HighCpu(int minutes)
{
var now = DateTime.Now;
while (DateTime.Now - now <= TimeSpan.FromMinutes(minutes))
{
_logger.LogInformation(DateTime.Now.ToString());
}
return "ok";
}
我们调用这个接口,模拟高消耗cpu操作
curl clusterip:5000/test/highcpu?minutes=1
再次查看pod资源使用率,可以跟调用之前比对,明显发现cpu变高
kubectl top pod chesterdeployment-75c64cc8b6-k4jqw -n chesterns
创建HPA
下面我们创建hpa,让其实现自动扩展
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: chesterhpa
namespace: chesterns
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: chesterdeployment
minReplicas: 1
maxReplicas: 3
metrics:
- type: Resource
resource:
name: cpu
target:
type: AverageValue
averageValue: 200m
重新调用接口模拟高cpu
curl clusterip:5000/test/highcpu?minutes=3
查看hpa状态,即可发现实现了自动扩展
kubectl describe hpa chesterhpa -n chesterns
kubectl get pods --namespace=chesterns
kubectl top pod -n chesterns
K8S原来如此简单(五)Metrics Server与HPA的更多相关文章
- Kubernetes 基于 Metrics Server 与 HPA 的使用
在 Kubernetes 中可以手动通过 kubectl scale 命令或通过修改 replicas 数量,可以实现 Pod 的扩容或缩容.Kubernetes 中还提供了 HPA(Horizont ...
- K8S原来如此简单(七)存储
emptyDir临时卷 有些应用程序需要额外的存储,但并不关心数据在重启后仍然可用. 例如,缓存服务经常受限于内存大小,将不常用的数据转移到比内存慢.但对总体性能的影响很小的存储中. 再例如,有些应用 ...
- K8S原来如此简单(八)ServiceAccount+RBAC
ServiceAccount ServiceAccount是给运行在Pod的程序使用的身份认证,Pod容器的进程需要访问API Server时用的就是ServiceAccount账户. Service ...
- K8S原来如此简单(三)Pod+Deployment
上篇我们已经安装好k8s1.23集群,现在我们开始使用k8s部署我们的项目 Pod Pod 是一组容器集合,是可以在 Kubernetes 中创建和管理的.最小的可部署的计算单元.这些容器共享存储.网 ...
- K8S原来如此简单(四)Service+Ingress
上一篇我们通过deployment实现了pod的横向扩展,但是仍然不能负载,也不能对外提供服务,现在我们来看看如何通过k8s实现负载与外网访问 Service service为一组pod提供一个统一的 ...
- K8S原来如此简单(六)Pod调度
我们前面部署的pod调度取决于kube-scheduler,它会根据自己的算法,集群的状态来选择合适的node部署我们的pod. 下面我们来看下如何来根据我们自己的要求,来影响pod的调度. 定向no ...
- 启用k8s metrics server监控
1.创建aggregator证书 方法一:直接使用二进制源码包安装 $ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 $ chmod +x cfs ...
- k8s搭建监控:安装metrics server和dashboard
安装metrics server 参考:https://github.com/kubernetes-sigs/metrics-server kubectl create -f component ...
- kubeadm1.14.1 安装Metrics Server
Metrics API 介绍Metrics-Server之前,必须要提一下Metrics API的概念 Metrics API相比于之前的监控采集方式(hepaster)是一种新的思路,官方希望核心指 ...
随机推荐
- Spring系列12: `@Value` `@Resource` `@PostConstruct` `@PreDestroy` 详解
本文内容 @Resource实现依赖注入 @Value详细使用 @PostConstruct @PreDestroy的使用 @Resource实现依赖注入 前面章节介绍了使用@Autowired注入依 ...
- [LeetCode]3.无重复字符的最长子串(Java)
原题地址: longest-substring-without-repeating-characters/submissions 题目描述: 示例 1: 输入: s = "pwwkew&qu ...
- design PLL
PLL PLL主要是NCO中通过相位比较器,控制压控振荡器,控制频率.
- SopringBoot2.x整合Redis
1.导入相关依赖 <!-- redis 依赖 --> <dependency> <groupId>org.springframework.boot</grou ...
- RFC2544学习频率“Learning Frequency”详解—信而泰网络测试仪实操
在RFC2544中, 会有一个Learning Frequency的字段让我们选择, 其值有4个, 分别是learn once, learn Every Trial, Learn Every Fram ...
- C# 开始支持动态化编程
在.NET 4.0的运行时进行动态编程时,我们引入了一个新功能:动态语言运行时.可以这样理解,CLR的目的是为静态类型的编程语言提供一个统一的框架或编程模型,而DLR便是在.NET平台上为动态语言提供 ...
- 举例说明EF CORE中模型之间的一对多、多对多关系的实现
该例子是我临时想出来的,不具有任何的实际意义.类图如图1所示. 图1 类代码: [Table("student")] public class Student { public i ...
- Map<String, String> map按key值排序
private static String buildMd5Params(Map<String, String> map) { StringBuilder result = new Str ...
- C#里面操作COM组件
//这种写法是在COM操作里面是很经常见到的 TestDefaultMethod(foo: "test", bar: "test");
- Oracle数据库常用命令整理
转至:https://blog.csdn.net/creativemobile/article/details/8982164 1监听 (1)启动监听 lsnrctl start (2)停止监听 l ...