1. 首页 > Linux教程 > 正文

Linux教程FG450-Kubernetes自动扩缩容

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

本文档介绍

风哥提示:

Kubernetes自动扩缩容的配置方法。

Part01-自动扩缩容概述

1.1 扩缩容类型

# Kubernetes自动扩缩容
[root@k8s-master ~]# cat > /root/k8s-autoscaling.txt << 'EOF' Kubernetes自动扩缩容 ==================== 1. HPA (Horizontal Pod Autoscaler) - 基于CPU/内存自动扩缩Pod数量 - 支持自定义指标 - 适用于无状态应用 2. VPA (Vertical Pod Autoscaler) - 自动调整Pod资源请求 - 优化资源分配 - 需要重启Pod 3. CA (Cluster Autoscaler) - 自动增减节点数量 - 基于资源需求 - 云环境支持 4. 扩缩容策略 - 最小/最大副本数 - 扩缩容阈值 - 冷却时间 EOF

Part02-HPA配置

2.1 创建HPA

# 安装Metrics Server
[root@k8s-master ~]# kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.更多视频教程www.fgedu.net.cnrbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created

# 验证Metrics Server
[root@k8s-master ~]# kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-master 200m 5% 1024Mi 12%
k8s-node1 150m 3% 512Mi 6%
k8s-node2 150m 3% 512Mi 6%

# 创建测试Deployment
[root@k8s-master ~]# cat >更多学习教程公众号风哥教程itpux_com fgedu-app-deployment.yaml << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: fgedu-web namespace: fgedu-prod spec: replicas: 2 selector: matchLabels: app: fgedu-web template: metadata: labels: app: fgedu-web spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80 resources: requests: cpu: 100m memory: 128Mi limits: cpu: 500m memory: 512Mi EOF [root@k8s-master ~]# kubectl apply -f fgedu-app-deployment.yaml deployment.apps/fgedu-web created # 创建HPA [root@k8s-master ~]# cat > fgedu-hpa.yaml << 'EOF' apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: fgedu-web-hpa namespace: fgedu-prod spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: fgedu-web minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 80 EOF [root@k8s-master ~]# kubectl apply -f fgedu-hpa.yaml horizontalpodautoscaler.autoscaling/fgedu-web-hpa created # 查看HPA状态 [root@k8s-master ~]# kubectl get hpa -n fgedu-prod NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE fgedu-web-hpa Deployment/fgedu-web 5%/70%, 10%/80% 2 10 2 1m # 查看HPA详情 [root@k8s-master ~]# kubectl describe hpa fgedu-web-hpa -n fgedu-prod Name: fgedu-web-hpa Namespace: fgedu-prod Labels:
Annotations:
CreationTimestamp: Sat, 04 Apr 2026 18:00:00 +0800
Reference: Deployment/fgedu-web
Metrics: ( current / target )
resource cpu on pods (as a percentage of request): 5% (5m) / 70%
resource memory on pods (as a percentage of request): 10% (13Mi) / 80%
Min replicas: 2
Max replicas: 10
Deployment pods: 2 current / 2 desired
Conditions:
Type Status Reason Message
—- —— ——- ——-
AbleToScale True ScaleDownStabilized recent recommendations were higher than current one, applying the highest recent result
ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request)
ScalingLimited False DesiredWithinRange the desired count is within the acceptable range
Events:

Part03-压力测试验证

3.1 模拟负载

# 创建负载测试Pod
[root@k8s-master ~]# kubectl run -i –tty load-generator –rm –image=busybox –restart=Never — /bin/sh -c “while sleep 0.01; do wget -q学习交流加群风哥QQ113257174 -O- http://fgedu-web.fgedu-prod.svc.cluster.local; done”
If you don’t see a command prompt, try pressing enter.

# 另开终端查看HPA状态
[root@k8s-master ~]# kubectl get hpa -n fgedu-prod -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
fgedu-web-hpa Deployment/fgedu-web 5%/70% 2 10 2 5m
fgedu-web-hpa Deployment/fgedu-web 85%/70% 2 10 2 6m
fgedu-web-hpa Deployment/fgedu-web 85%/70% 2 10 4 6m
fgedu-web-hpa Deployment/fgedu-web 75%/70% 2 10 4 7m
fgedu-web-hpa Deployment/fgedu-web 72%/70% 2 10 6 7m
fgedu-web-hpa Deployment/fgedu-web 68%/70% 2 10 6 8m

# 查看Pod扩容情况
[root@k8s-master ~]# kubectl get pods -n fgedu-prod
NAME READY STATUS RESTARTS AGE
fgedu-web-abc12-xyz789 1/1 Running 0 10m
fgedu-web-abc12-abc12 1/1 Running 0 10m
fgedu-web-abc12-def34 1/1 Running 0 2m
fgedu-web-abc12-ghi56 1/1 Running 0 2m
fgedu-web-abc12-jkl78 1/1 Running 0 1m
fgedu-web-abc12-mno90 1/1 Running 0 1m

# 停止负载后查看缩容
[root@k8s-master ~]# kubectl get hpa -n fgedu-prod
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
fgedu-web-hpa Deployment/fgedu-web 5%/70% 2 10 2 20m

Part04-VPA配置

4.1 安装VPA

# 安装VPA
[root@k8s-master ~]# git clone https://github.com/kubernetes/autoscaler.git
Cloning into ‘autoscaler’…
remote: Enumerating objects: 12345, done.
remote: Counting objects: 100% (1234/1234), done.
remote: Compressing objects: 100% (567/567), done.
remote: Total 12345 (delta 667), reused 1111 (delta 555), pack-reused 11111

[root@k8s-master ~]# cd autoscaler/vertical-pod-autoscaler/hack
[root@k8s-master hack]# ./vpa-up.sh
Installing VPA…
customresourcedefinition.apiextensions.k8s.io/verticalpodautoscalers.autoscaling.k8s.io created
customresourcedefinition.apiextensions.k8s.io/verticalpodautoscalercheckpoints.autoscaling.k8s.io created
clusterrole.rbac.authorization.k8s.io/system:metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:vpa-actor created
clusterrole.rbac.authorization.k8s.io/system:vpa-checkpoint-actor created
clusterrole.rbac.authorization.k8s.io/system:vpa-target-reader created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-reader created
clusterrolebinding.rbac.authorization.k8s.io/system:vpa-actor created
clusterrolebinding.rbac.authorization.k8s.io/system:vpa-checkpoint-actor created
clusterrole.rbac.authorization.k8s.io/system:vpa-evictionter created
clusterrolebinding.rbac.authorization.k8s.io/system:vpa-evictionter-binding created
serviceaccount/vpa-admission-controller created
serviceaccount/vpa-recommender created
serviceaccount/vpa-updater created
clusterrole.rbac.authorization.k8s.io/system:vpa-admission-controller created
clusterrolebinding.rbac.authorization.k8s.io/system:vpa-admission-controller created
clusterrole.rbac.authorization.k8s.io/system:vpa-recommender created
clusterrolebinding.r学习交流加群风哥微信: itpux-combac.authorization.k8s.io/system:vpa-recommender created
clusterrole.rbac.authorization.k8s.io/system:vpa-updater created
clusterrolebinding.rbac.authorization.k8s.io/system:vpa-updater created
service/vpa-webhook created
deployment.apps/vpa-admission-controller created
deployment.apps/vpa-recommender created
deployment.apps/vpa-updater created

# 创建VPA
[root@k8s-master ~]# cat > fgedu-vpa.yaml << 'EOF' apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: fgedu-web-vpa namespace: fgedu-prod spec: targetRef: apiVersion: apps/v1 kind: Deployment name: fgedu-web updatePolicy: updateMode: "Auto" resourcePolicy: containerPolicies: - containerName: nginx minAllowed: cpu: 50m memory: 64Mi maxAllowed: cpu: 2 memory: 4Gi controlledResources: ["cpu", "memory"] EOF [root@k8s-master ~]# kubectl apply -f fgedu-vpa.yaml verticalpodautoscaler.autoscaling.k8s.io/fgedu-web-vpa created # 查看VPA推荐 [root@k8s-master ~]# kubectl describe vpa fgedu-web-vpa -n fgedu-prod Name: fgedu-web-vpa Namespace: fgedu-prod Spec: Target Ref: API Version: apps/v1 Kind: Deployment Name: fgedu-web Update Policy: Update Mode: Auto Status: Conditions: Last Transition Time: 2026-04-04T10:00:00Z Status: True Type: RecommendationProvided Recommendation: Container Recommendations: Container Name: nginx Lower Bound: Cpu: 50m Memory: 64Mi Target: Cpu: 150m Memory: 200Mi Uncapped Target: Cpu: 150m Memory: 200Mi Upper Bound: Cpu: 500m Memory: 512Mi

风哥针对自动扩缩容建议:

  • 合理设置扩缩容阈值
  • 配置最小/最大副本数
  • 监控扩缩容事件
  • 测试验证扩缩容效果
  • 结合VPA优化资源配置

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息