Kubernetes--自动扩缩容

一. 前言

我们可以通过–replicas的方式来扩缩容,或者是通过dashboard的方式界面化的扩缩容。其实都需要手动,如果kubernetes可以通过当时容器使用情况来自动的扩缩容,其实有的可以进行预知,有的根本就是不确定的,纯手工去做也是不现实的人海战术。
Horizontal Pod Autoscaling,简称HPA, Kubernetes通过HPA的设定,实现了容器的弹性伸缩功能。对于Kubernetes中的POD集群来说,HPA可以实现很多自动化功能,比如当POD中业务负载上升的时候,可以创建新的POD来保证业务系统稳定运行,当POD中业务负载下降的时候,可以销毁POD来减少资源的浪费。当前的弹性伸缩的指标包括:CPU,内存,并发数,包传输大小。HPA控制器默认每隔30秒就会运行一次,一旦创建的HPA,我们就可以通过命令查看获取到的当前指标信息。

二. 原理

metrics-server 通过 kube-apiserver 发现所有节点,然后调用 kubelet APIs(通过 https 接口)获得各节点(Node)和 Pod 的 CPU、Memory 等资源使用情况。因为k8s的api-server将所有的数据持久化到了etcd中,显然k8s本身不能处理这种频率的采集,而且这种监控数据变化快且都是临时数据,因此需要有一个组件单独处理他们,k8s版本只存放部分在内存中,于是metric-server的概念诞生了。

三. Metrics-Server部署

1. 查看官网指导说明

在这里插入图片描述

2. 下载components.yaml文件

wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

3. 修改配置文件components.yaml

在这里插入图片描述

4. 执行

kubectl apply components.yaml

在这里插入图片描述

5. 查看

kubectl top node

在这里插入图片描述

kubectl top pods -n kube-system

在这里插入图片描述

kubectl cluster-info

在这里插入图片描述

四. 自动扩容

1. 在docker-project的代码中增加测试用例,重新打包镜像,上传到伺服

在这里插入图片描述

2. 修改docker-project.yaml配置文件,增加资源限制

在这里插入图片描述

3. 运行

kubectl apply -f docker-project.yaml

在这里插入图片描述

4. 创建自动扩容的hpa

kubectl autoscale deployment docker-project --min=1 --max=3

在这里插入图片描述

5. 查看hpa

kubectl get hpa

在这里插入图片描述

6. cpu测试

通过shell脚本调用:http://192.168.214.128:31000/api/testCpu

#!/bin/bash
int=1
while(( $int<=10000 ))
do
    let "int++"
    curl "http://192.168.214.128:31000/api/testCpu";
done

观察hpa的变化:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五. 常见错误

1. Error: error creating self-signed certificates: mkdir apiserver.local.config: read-only file system

在这里插入图片描述
解决办法:设置对应的证书目录
在这里插入图片描述

2. Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)

在这里插入图片描述
解决办法:/etc/kubernetes/manifests/kube-apiserver.yaml中增加- --enable-aggregator-routing=true,重启kubelet即可
在这里插入图片描述

3. 如果资源限制部分设置的参数过大时,导致一个pod占用node的资源过多,其他副本就不能放在此节点上了,如果系统只配置了一个node节点,那么其他副本就只能处于pending状态,并且分配不到ip地址; 如果资源限制设置过小的话,放不下一个容器,导致服务本身都无法启动。

在这里插入图片描述

4. 允许master节点作为工作节点

使用kubeadm初始化的集群,出于安全考虑Pod不会被调度到Master Node上,也就是说Master Node不参与工作负载。
允许master节点部署pod,使用命令如下:

kubectl taint nodes --all node-role.kubernetes.io/master-

输出如下错误:(可以忽略)
node/master132 untainted
error: taint “node-role.kubernetes.io/master” not found

禁止master部署pod

kubectl taint nodes master132  node-role.kubernetes.io/master=true:NoSchedule
Pod 的自动扩缩容是通过 Kubernetes 中的 Horizontal Pod Autoscaler (HPA) 实现的。HPA 可以根据 Pod 的 CPU 使用率或自定义指标来自动调整副本数量,以满足应用程序的负载需求。以下是配置 HPA 的步骤: 1. 首先,确保你的集群已经启用了自动扩缩容功能。 2. 创建一个 Deployment 或 ReplicaSet,它将成为 HPA 的目标对象。例如,创建一个名为 my-app 的 Deployment: ``` kubectl create deployment my-app --image=my-image ``` 3. 创建一个 HPA 对象,并指定目标对象的名称和资源指标。例如,设置 CPU 使用率的目标为 50%: ``` kubectl autoscale deployment my-app --cpu-percent=50 --min=2 --max=5 ``` 上述命令将创建一个 HPA 对象,并将 my-app Deployment 的副本数量保持在 2 到 5 之间,以使 CPU 使用率保持在 50%。 4. 验证 HPA 是否生效。可以使用以下命令检查 HPA 的状态: ``` kubectl get hpa ``` 如果一切正常,你应该看到 HPA 对象的相关信息,包括当前副本数量、目标指标和目标使用率。 5. 测试自动扩缩容。可以通过模拟负载或增加负载来测试 HPA 的自动扩缩容功能。当 Pod 的资源使用率达到或超过 HPA 设置的目标使用率时,HPA 将自动增加 Pod 的副本数量。 请注意,HPA 的配置可以根据你的需求进行调整,例如,你可以使用自定义指标、设置副本数量的最小和最大值等。详细的配置选项可以参考 Kubernetes 官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

victor-维克特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值