监控k8s pod使用的CPU资源并实现异常重启

需求

在Grafana监控面板里,可看到部分服务的pod对CPU的使用高达3:
在这里插入图片描述
而该pod的部署脚本为:

spec:
  template:
    spec:
      containers:
        - name: data-fusion-server
          resources:
            limits:
              cpu: '2'
              memory: 4Gi
            requests:
              cpu: 10m
              memory: 500Mi
          livenessProbe:
            httpGet:
              path: /health
              port: tcp
              scheme: HTTP
            initialDelaySeconds: 30
            timeoutSeconds: 1
            periodSeconds: 5
            successThreshold: 1
            failureThreshold: 3
          readinessProbe:
            httpGet:
              path: /health
              port: tcp
              scheme: HTTP
            initialDelaySeconds: 30
            timeoutSeconds: 1
            periodSeconds: 5
            successThreshold: 1
            failureThreshold: 3
          startupProbe:
            httpGet:
              path: /health
              port: tcp
              scheme: HTTP
            initialDelaySeconds: 80
            timeoutSeconds: 1
            periodSeconds: 5
            successThreshold: 1
            failureThreshold: 3

也就是说,k8s限制pod可使用的CPU资源为2个。

pod使用的CPU资源对于k8s限制的CPU资源。

可简单分两种情况:

  • pod就是需要占用3个CPU资源,比如上面这个截图里,CPU使用率一直都非常稳定(截图有缩略,只截了2小时)。此时开发应该告诉运维,修改resources.limits.cpu,提高此配额。当然,并不是说,开发不需要去深入思考,为啥pod占用如此高的CPU,但是不排除部分pod就是要比其他pod使用更多的CPU。
  • pod绝大多数时间内,CPU使用率都比较低(假设是0.9个CPU);因为某些暂时不清楚的异常情况,一段时间内(比如10分钟)突然飙升到使用3个CPU;经过10分钟后,CPU使用率还是迟迟不降下来。又或者10分钟后,CPU使用下降,此时需要判断是否有定时调度任务触发执行。

对于第二种情况,如果迟迟不下降,此时服务已经不正常,则大概率无法正常完成服务请求,如果没有正确的负载均衡策略,则打到此pod的用户请求将得不到正确的处理。

需求来了:检测到pod使用的CPU资源,如果异常,则触发自动重启(而不是开发或运维,偶然间发现pod异常,然后手动重启)。

当然,另一方面,如果pod使用的CPU异常飙高,开发人员需要去检查应用或代码哪里出现问题。

调研

主要就是请教ChatGPT,给出的答复如下:

通过资源限制间接实现自动重启

设置CPU使用的限制值(limits),

### 回答1: Prometheus可以通过Kubernetes API来监控Kubernetes集群中的Pod状态。通过使用Prometheus的Kubernetes SD(Service Discovery)机制,可以自动发现Kubernetes集群中的Pod将其添加到监控目标中。然后,可以使用Prometheus的查询语言PromQL来查询和分析Pod的状态信息,例如CPU使用率、内存使用率、网络流量等。此外,Prometheus还可以与Grafana等可视化工具结合使用,以便更直观地展示Pod状态信息。 ### 回答2: Prometheus 是一款开源的监控系统,它可以用于监控 Kubernetes 中的 Pod 状态。在 Kubernetes 中,Pod 是最基本的调度单元,一个 Pod 可以包含一个或多个容器,因此,监控 Pod 状态可以提高我们对整个集群的管理效率和质量。 在 Kubernetes 中,Prometheus 主要通过以下三种方式来监控 Pod 状态: 1. 使用 Kubernetes 的 Metrics API Kubernetes 提供 Metrics API 来获取 Pod 的状态信息,包括 CPU 使用率、内存使用率、网络速率等。Prometheus 可以通过配置 scrape_config 来获取 Metrics API 中的数据,进而监控 Pod 状态。在 Prometheus 的配置文件中,我们可以添加以下配置来获取 Metrics API 中的数据: ```yaml - job_name: 'kubernetes-pods' scrape_interval: 30s kubernetes_sd_configs: - role: pod metrics_path: "/apis/metrics.k8s.io/v1beta1/pods" ``` 2. 使用 cAdvisor cAdvisor 是一个开源的容器监控工具,它可以收集容器内部运行的各种性能指标。由于 Kubernetes 使用 cAdvisor 收集容器的性能数据,因此,Prometheus 可以通过 cAdvisor 来监控 Pod 的状态。我们可以在 Prometheus 的配置文件中添加以下内容来获取 cAdvisor 中的数据: ```yaml - job_name: 'kubernetes-cadvisor' scrape_interval: 30s kubernetes_sd_configs: - role: node metrics_path: "/metrics/cadvisor" ``` 3. 使用 kube-state-metrics kube-state-metrics 是一个开源工具,可以将 Kubernetes 中的对象状态信息转换成 Prometheus 可以获取的格式。包括 Pod 的状态信息、容器状态信息、镜像版本信息等。因此,Prometheus 可以通过配置 scrape_config 来获取 kube-state-metrics 中的数据。我们可以在 Prometheus 的配置文件中添加以下内容来获取 kube-state-metrics 中的数据: ```yaml - job_name: 'kubernetes-apiservers' scrape_interval: 30s kubernetes_sd_configs: - role: endpoints api_server: 'https://kubernetes.default.svc:443' bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt metrics_path: "/metrics" ``` 总结来说,通过以上三种方式,Prometheus 可以监控 Kubernetes 中的 Pod 状态信息。每种方式都有其优缺点,我们需要根据实际情况进行选择和配置。最终,我们可以通过 Prometheus 的监控来有效管理和优化我们的 Kubernetes 集群。 ### 回答3: Prometheus是一种广泛使用的开源监控解决方案,它能够收集和分析各种类型的指标,提供仪表板和警报功能,帮助管理员实时跟踪整个应用程序栈的健康状况。在Kubernetes中,使用Prometheus监控Pod状态非常重要,因为PodKubernetes的基本单元,也是应用程序的唯一部署单元。如果Pod无法正常运行,那么应用程序也会无法正常运行。 在Kubernetes中,Pod的状态非常重要,因为它反映了Pod当前的健康状况。通过Prometheus监控Pod状态,可以获得有关Pod状态的详细信息,例如: 1. Pod的运行状态 (Running / Pending / Failed) 2. Pod重启次数 3. Pod资源使用情况 (CPU、内存、存储) 4. Pod的实时日志 为了监控Pod状态,我们需要安装和配置Prometheus和其他必要的组件。首先,需要配置Kubernetes API Server作为Prometheus的数据源。接着,需要部署Prometheus Server和相应的Exporters,例如kube-state-metrics,这个可以提供有关Pod运行状态的详细信息。最后,需要配置Prometheus警报规则,以在发生问题时通知管理员。 总之,通过使用Prometheus监控Kubernetes Pod状态,我们能够获得实时的指标和警报,帮助我们快速发现和解决Pod的健康问题,以保持应用程序的稳定性和可靠性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

johnny233

晚饭能不能加鸡腿就靠你了

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

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

打赏作者

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

抵扣说明:

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

余额充值