centos k8s自动扩缩容方法
一、前提条件:安装Metrics Server
HPA(Horizontal Pod Autoscaler)依赖Metrics Server收集Pod的CPU、内存等资源使用数据。在CentOS上安装Metrics Server的步骤如下:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
安装后检查Metrics Server状态,确保其正常运行:
kubectl get pods -n kube-system | grep metrics-server
若未正常运行,可删除对应Pod触发重启:
kubectl delete pod -n kube-system <
metrics-server-pod-name>
二、配置HPA(Horizontal Pod Autoscaler)
HPA是Kubernetes实现Pod水平自动扩缩容的核心资源,以下是详细配置步骤:
1. 创建带资源限制的Deployment
HPA需根据Pod的资源请求(requests
)计算利用率,因此必须在Deployment中定义容器的resources.requests
和resources.limits
。示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1 # 初始副本数,HPA会动态调整
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
resources:
requests: # 调度依据,必须设置
cpu: "100m" # 0.1核
memory: "64Mi"
limits: # 资源上限,防止Pod被OOM Kill
cpu: "200m" # 0.2核
memory: "128Mi"
将上述内容保存为deployment.yaml
,应用到集群:
kubectl apply -f deployment.yaml
2. 创建HPA资源
通过HPA配置自动扩缩容规则,以下是一个基于CPU利用率的示例(支持v2beta2及以上API版本):
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: my-hpa
spec:
scaleTargetRef: # 指定扩缩容目标(Deployment/ReplicaSet/StatefulSet)
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 1 # 最小副本数(避免缩容至0)
maxReplicas: 10 # 最大副本数(集群资源上限)
metrics:
- type: Resource # 资源指标(支持CPU、内存)
resource:
name: cpu # 指标名称(CPU/memory)
target:
type: Utilization # 目标类型(Utilization/AverageValue)
averageUtilization: 50 # 目标利用率(如50%)
将上述内容保存为hpa.yaml
,应用到集群:
kubectl apply -f hpa.yaml
说明:
scaleTargetRef
:指定要扩缩容的对象(如Deployment),需与已有资源名称一致;minReplicas
/maxReplicas
:限制Pod数量范围,避免过度扩缩容;metrics
:可配置多个指标(如CPU+内存),支持Utilization
(利用率)或AverageValue
(绝对值)。
3. 验证HPA状态
使用以下命令查看HPA的当前状态(包括副本数、目标利用率、当前利用率):
kubectl get hpa
输出示例:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
my-hpa Deployment/my-app 30%/50% 1 10 1 2m
TARGETS
:显示当前利用率/目标利用率(如30%表示当前CPU利用率为30%,目标为50%);REPLICAS
:当前Pod副本数。
查看详细信息(包括扩缩容决策记录):
kubectl describe hpa my-hpa
三、测试自动扩缩容
通过模拟负载触发HPA自动调整Pod数量,常用工具如hey
(快速HTTP压测工具):
# 安装hey(若未安装)
wget https://github.com/rakyll/hey/releases/download/v0.0.0/hey_linux_amd64 -O hey
chmod +x hey
mv hey /usr/local/bin/
# 发起压测(向my-app发送10个并发请求,持续30秒)
hey -c 10 -z 30s http://<
my-app-service-ip>
随着负载增加,HPA会根据CPU利用率自动增加Pod副本数(不超过maxReplicas
);负载降低时,自动减少副本数(不低于minReplicas
)。
四、可选:基于自定义指标的自动扩缩容
若需根据非资源指标(如QPS、队列长度)扩缩容,需安装Custom Metrics Adapter(如Prometheus Adapter),并配置HPA使用自定义指标。示例如下:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: my-hpa-custom
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 1
maxReplicas: 20
metrics:
- type: External # 自定义指标
external:
metric:
name: requests_per_second # 自定义指标名称(需与Prometheus Adapter配置一致)
target:
type: Value
value: "100" # 目标值(每秒100个请求)
需提前部署Prometheus Adapter并将自定义指标暴露给Kubernetes集群。
五、注意事项
- 资源请求必须设置:HPA依赖
resources.requests
计算利用率,未设置则无法正常工作; - 避免频繁扩缩容:设置合理的
targetUtilization
(如50%-80%),避免因阈值过低导致频繁扩缩容(可能影响应用稳定性); - 监控HPA行为:通过
kubectl get hpa -w
实时监控HPA状态,或结合Prometheus+Granafa实现可视化; - 集群资源充足:确保集群有足够的节点资源容纳最大副本数(
maxReplicas
),否则可能导致Pod处于Pending状态。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos k8s自动扩缩容方法
本文地址: https://pptw.com/jishu/723890.html