首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为什么90%的企业Kubernetes集群都没跑满?真相在这里

为什么90%的企业Kubernetes集群都没跑满?真相在这里

作者头像
IT运维技术圈
发布2025-10-09 12:13:03
发布2025-10-09 12:13:03
11300
代码可运行
举报
文章被收录于专栏:IT运维技术圈IT运维技术圈
运行总次数:0
代码可运行

0. 写在前面:为什么你需要“神器”而非“常用命令

大家好,老杨是老杨,干货满满的老杨 欢迎点击原文链接或直接访问vps.top365app.com,来看老杨的全球vps信息还有各种咱们用得着的信息实时收集分析项目.

帮老杨点赞、转发、在看以及打开小星标哦

攒今世之功德,修来世之福报


老杨看过不少报告,发现Kubernetes集群资源用得少是个常见问题。Cast AI的2025报告说,平均CPU利用率只有10%,内存23%。 这比理想的60%-80%低多了。他们的数据来自数千个集群。Fairwinds的2024基准报告也指出,37%组织有一半以上工作负载需要调整资源大小来省钱。 这些事实说明,大多数集群确实没跑满。为什么?下面我一步步说。

第一部分:什么叫“没跑满”

集群没跑满意思是资源闲着。CPU用率低到10%,内存23%。 比如一家电商公司,双11时流量大,平时集群就空转。报告说这是因为过度预留资源和碎片化。碎片化就像停车场,车位小块空着但停不进大车。

而且,你可以自己查。装Prometheus和Grafana看利用率。

先在master节点输入:

代码语言:javascript
代码运行次数:0
运行
复制
$ kubectl apply -f https://github.com/prometheus-operator/prometheus-operator/raw/main/bundle.yaml

系统显示:

代码语言:javascript
代码运行次数:0
运行
复制
customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/prometheuses.monitoring.coreos.com created
... (更多资源创建信息)

然后装Grafana Dashboard(ID: 6417):

代码语言:javascript
代码运行次数:0
运行
复制
$ helm repo add grafana https://grafana.github.io/helm-charts
$ helm install grafana grafana/grafana

输出:

代码语言:javascript
代码运行次数:0
运行
复制
NAME: grafana
LAST DEPLOYED: Thu Aug 28 10:00:00 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

进Grafana看图,CPU曲线低,闲置70%。这样你看到自家数据。

第二部分:资源请求和限制没调好

请求是Pod最小需求,限制是上限。调不对就浪费。Cast AI说这是因为公司初期优化不够,复杂管理导致。

比如一个Spring Boot的订单服务,请求设0.5 CPU,但JVM内存涨。用Vertical Pod Autoscaler (VPA)自动调。

YAML例子:

代码语言:javascript
代码运行次数:0
运行
复制
apiVersion: v1
kind: Pod
metadata:
  name: order-service
spec:
  containers:
  - name: app
    image: registry.cn-hangzhou.aliyuncs.com/myrepo/order-app:latest
    resources:
      requests:
        memory: "512Mi"
        cpu: "500m"
      limits:
        memory: "1Gi"
        cpu: "1"

输入:

代码语言:javascript
代码运行次数:0
运行
复制
$ kubectl apply -f order-pod.yaml

输出:

代码语言:javascript
代码运行次数:0
运行
复制
pod/order-service created

如果低,装VPA:

代码语言:javascript
代码运行次数:0
运行
复制
$ kubectl apply -f https://github.com/kubernetes/autoscaler/raw/master/vertical-pod-autoscaler/deploy/vpa-deployment.yaml

输出:

代码语言:javascript
代码运行次数:0
运行
复制
deployment.apps/vpa-admission-controller created
deployment.apps/vpa-recommender created
deployment.apps/vpa-updater created

VPA建议调到300m CPU。利用率升20%。像字节跳动那样用,省资源。

第三部分:调度没安排匀

调度器没用好,Pod挤少数节点。Dynatrace报告说,云集群节点小,需平衡。 比如阿里云主,腾讯云备,高负载只在一边。

用节点亲和性。标签“zone: east”。

YAML:

代码语言:javascript
代码运行次数:0
运行
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  template:
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: zone
                operator: In
                values:
                - east

输入:

代码语言:javascript
代码运行次数:0
运行
复制
$ kubectl apply -f web-deployment.yaml

输出:

代码语言:javascript
代码运行次数:0
运行
复制
deployment.apps/web-app created

查:

代码语言:javascript
代码运行次数:0
运行
复制
$ kubectl get pods -o wide

输出:

代码语言:javascript
代码运行次数:0
运行
复制
NAME                       READY   STATUS    RESTARTS   AGE   IP           NODE
web-app-5d7b9c9b4-2q3w4    1/1     Running   0          1m    10.244.1.2   node-east-1
web-app-5d7b9c9b4-7p8k9    1/1     Running   0          1m    10.244.1.3   node-east-2
... (均匀分布)

利用率从25%到65%。像开车,分流避免堵。

第四部分:应用设计有问题

应用没水平扩展,资源白耗。Fairwinds说65%组织缺探针,影响可靠性。 比如金融MySQL连接多,闲时占内存。

用Horizontal Pod Autoscaler (HPA)。Nginx例子:

代码语言:javascript
代码运行次数:0
运行
复制
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

输入:

代码语言:javascript
代码运行次数:0
运行
复制
$ kubectl apply -f nginx-hpa.yaml

输出:

代码语言:javascript
代码运行次数:0
运行
复制
horizontalpodautoscaler.autoscaling/nginx-hpa created

模拟负载用ab:

代码语言:javascript
代码运行次数:0
运行
复制
$ ab -n 10000 -c 100 http://your-service/

Pod从2到5,利用率稳50%。这样帮你应对流量峰。

第五部分:监控没跟上

没监控就不知问题。Cast AI说缺DevOps工程师导致效率降。 用ELK或阿里云SLS。

装EFK:

代码语言:javascript
代码运行次数:0
运行
复制
$ helm repo add fluent https://fluent.github.io/helm-charts
$ helm install fluent-bit fluent/fluent-bit

输出:

代码语言:javascript
代码运行次数:0
运行
复制
NAME: fluent-bit
LAST DEPLOYED: Thu Aug 28 11:00:00 2025
...

日志显示夜间任务浪费,优化省30%。像查账,找出漏钱处。

老杨时间

这里老杨先声明一下,日常生活中大家都叫老杨波哥,跟辈分没关系,主要是岁数大了.就一个代称而已. 老杨的00后小同事老杨喊都是带哥的.张哥,李哥的. 但是这个称呼呀,在线下参加一些活动时.金主爸爸也这么叫就显的不太合适. 比如上次某集团策划总监,公司开大会来一句:“今个咱高兴!有请IT运维技术圈的波哥讲两句“ 这个氛围配这个称呼在互联网这行来讲就有点对不齐! 每次遇到这个情况老杨就想这么接话: “遇到各位是缘分,承蒙厚爱,啥也别说了,都在酒里了.老杨干了,你们随意!” 所以以后咱们改叫老杨,即市井又低调.还挺亲切,老杨觉得挺好.

运维X档案系列文章:

从告警到CTO:一个P0故障的11小时生死时速

企业级 Kubernetes 集群安全加固全攻略( 附带一键检查脚本)

看完别走.修行在于点赞、转发、在看.攒今世之功德,修来世之福报

点击阅读原文或打开地址实时收集分析全球vps的项目 vps.top365app.com

老杨AI的号: 98dev

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT运维技术圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一部分:什么叫“没跑满”
  • 第二部分:资源请求和限制没调好
  • 第三部分:调度没安排匀
  • 第四部分:应用设计有问题
  • 第五部分:监控没跟上
  • 老杨时间
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档