首页 > 最新动态 > 【开源项目实践指南】如何使用HUATUO解决容器CPUIdle掉底问题 ?
最新动态
【开源项目实践指南】如何使用HUATUO解决容器CPUIdle掉底问题 ?
2025-08-2710

HUATUO(华佗)是滴滴自研并开源的云原生操作系统可观测性项目,聚焦解决云原生环境中故障现场缺失、复现困难、诊断成本高等问题。在2025 CCF中国开源大会上,滴滴正式将HUATUO(华佗) 开源成果捐赠给中国计算机学会(CCF),并加入其重点孵化项目序列。



华佗项目GitLink地址

https://www.gitlink.org.cn/ccfos/huatuo

CCF开源发展技术委员会将开展HUATUO项目专题介绍,第二期为大家带来《如何使用HUATUO解决容器 CPUIdle 掉底问题 ?》


官网博文地址:

https://huatuo.tech/blog/2025-08-19-how-to-use-huatuo-solve-problem-of-container-cpuidle/


概述

系统故障诊断面临多重挑战。首要难点在于故障现场难以保留:生产环境发生故障时,通常操作流程(如容器漂移、流量切换或服务降级)往往会破坏故障现场。即便事后尝试线下复现,也比较有挑战性:一方面,基础架构高度复杂 – K8S 云原生平台引入了容器虚拟化层,而业务混部、资源优先级设定、共享内核以及 Sidecar 等架构特性进一步加剧了复现与诊断的复杂度;另一方面,业务应用间错综复杂的上下游依赖关系也使得完整复现几乎难以实现。更为重要的是,当前行业普遍缺乏高效的操作系统级故障诊断体系:现有开源项目多局限于工具集合或通用指标展示,功能较为零散。因此,如何在新技术范式与架构下,构建面向操作系统的低损耗、零侵扰、全景式、持续深度观测能力体系,成为亟待解决的核心问题。

下面一步步介绍:如何使用HUATUO定位容器CPUIdle掉底问题。


K8S 环境准备

这里简单描述如何快速的构建一个K8S环境,具体构建详细步骤参考K8S官网。

  1. 执行如下脚本安装K8S。

    apt install kubelet kubeadm kubectl

    # kubeadm config images list
    images=(
            kube-apiserver:v1.31.10
            kube-controller-manager:v1.31.10
            kube-scheduler:v1.31.10
            kube-proxy:v1.31.10
            coredns:v1.11.3
            pause:3.10
            etcd:3.5.15-0
    )

    for imageName in ${images[@]}do
            docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}
            docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName} k8s.gcr.io/${imageName}
            docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}
    done

    kubeadm reset --force

    kubeadm init --pod-network-cidr=6.6.0.0/16 \
            --apiserver-advertise-address=192.168.122.1 \
            --cri-socket=/var/run/containerd/containerd.sock \
            --image-repository=registry.aliyuncs.com/google_containers \
            --kubernetes-version=v1.31.10 --v=5

    kubectl taint nodes --all node-role.kubernetes.io/control-plane-
  2. 创建测试POD,deployment-fedora42.yaml

    apiVersionapps/v1
    kindDeployment
    metadata:
    namefedora42
    spec:
    replicas4
    selector:
    matchLabels:
    appfedora42
    template:
    metadata:
    labels:
    appfedora42
    spec:
    containers:
          - namefedora42
    imagedocker.m.daocloud.io/fedora:42
    command: ["sleep""infinity"]
    imagePullPolicyIfNotPresent
    securityContext:
    privilegedtrue
    resources:
    limits:
    cpu2
    memory200M
    requests:
    cpu2
    memory200M
    $ kubectl apply -f deployment-fedora42.yaml
    deployment.apps/fedora42 created

    $ kubectl get pod
    NAME                        READY   STATUS    RESTARTS   AGE
    fedora42-795b765c6c-fsk84   1/1     Running   0          2m25s
    fedora42-795b765c6c-jzkqw   1/1     Running   0          2m25s
    fedora42-795b765c6c-ndwg9   1/1     Running   0          2m25s
    fedora42-795b765c6c-wkblg   1/1     Running   0          2m25s


HUATUO 环境准备

假设你已经有 kubelet管理的容器环境,接下来介绍HUATUO组件如何启动。

  1. 下载源代码或者镜像。

    $ git clone https://github.com/ccfos/huatuo.git
    $ cd huatuo
    $ vim huatuo-bamai.conf 
  2. 修改配置文件开启容器问题检测功能,你可以根据实际环境修改配置。

    [Pod]
    KubeletPodCACertPath = "/etc/kubernetes/pki/ca.crt"
    KubeletPodClientCertPath = "/etc/kubernetes/pki/apiserver-kubelet-client.crt,/etc/kubernetes/pki/apiserver-kubelet-client.key"
  3. 启动HUATUO组件服务。

    # 启动组件
    $ docker compose --project-directory ./build/docker up
    [+] Running 4/4
     ? Container prometheus     Running
     ? Container elasticsearch  Running
     ? Container grafana        Running
     ? Container huatuo-bamai   Recreated
    Attaching to elasticsearch, grafana, huatuo-bamai, prometheus

    也可根据源码本地构建HUATUO镜像,再启动如上HUATUO组件服务:

    # 本地构建镜像(可选)
    $ docker build --network host -t huatuo/huatuo-bamai:latest .
  4. 查看容器、宿主机指标大盘。打开浏览器,IP地址为运行HUATUO的宿主机 IP,端口为3000。(默认管理账户密码都是
    admin)


生成火焰图

有了kubelet管理的容器,安装好HUATUO组件,接下来介绍如何触发一个容器的异常行为,让HUATUO自动抓取火焰图。

  1. 在另外一个终端登录容器,并执行测试程序。

    $ kubectl exec -it fedora42-795b765c6c-8p4dl -- bash
    while true; do dd if=/dev/zero of=/dev/null bs=1M count=102400; done
  2. 查看火焰图,打开浏览器 -> 输入ip:3000 -> Dashboards -> HuaTuo 根因定位 AutoTracing 大盘 -> cpuilde 展开

    跳转后的火焰图效果:dd
    是一个非常简单的程序

  3. 火焰图阈值配置,通过上面的操作,你已经得到了CPU掉底时的火焰图,以及故障现场各种CPU信息。此后你完全可以根据你的业务场景配置CPU阈值。

    [Tracing.CPUIdle]
    UserThreshold = 75# 触发生成火焰图时的 User CPU 百分比
    SysThreshold = 45# 触发生成火焰图时的 Sys CPU 百分比
    UsageThreshold = 90# 触发生成火焰图时的 总体 CPU 百分比
    DeltaUserThreshold = 30# 触发生成火焰图时的 User CPU 增长值
    DeltaSysThreshold = 0# 触发生成火焰图时的 Sys CPU 增长值
    DeltaUsageThreshold = 30# 触发生成火焰图时的 总体 CPU 增长值
    Interval = 2# CPU 状态采集间隔
    IntervalContinuousPerf = 10 # 距离上次采集火焰图的时间间隔,避免反复采集,对系统造成影响
    PerfRunTimeOut = 10 # 采集火焰图持续的时间
  • 关注微信公众号【HUATUO开源技术】留言,或扫码添加工作人员微信,邀请您加入用户群(请备注姓名+单位):
    微信
  • 代码仓库https://github.com/ccfos/huatuo
     https://www.gitlink.org.cn/ccfos/huatuo
  • 官方网https://huatuo.tech/





相关推荐


滴滴云原生可观测 HUATUO 开源项目正式入驻 CCF

【项目实践指南】如何快速开始体验、部署 HUATUO ?






点击阅读原文 进入GitLink开源创新服务平台



图片


图片
图片
图片

点我访问原文链接