如何用client-go获取k8s因硬盘容量、cpu、内存、gpu资源不够引起的错误信息?

在Kubernetes中,你可以使用client-go库来获取Pod的状态和事件,这些信息可能包含了由于资源不足引起的错误信息。

以下是一个基本的示例,展示如何使用client-go来获取Pod的状态和事件:

复制代码
package main

import (
	"flag"
	"fmt"
	"log"
	"path/filepath"

	corev1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/tools/clientcmd"
)

func main() {
	kubeconfig := filepath.Join("~", ".kube", "config")
	config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
	if err != nil {
		log.Fatal(err)
	}

	clientset, err := kubernetes.NewForConfig(config)
	if err != nil {
		log.Fatal(err)
	}

	pods, err := clientset.CoreV1().Pods("default").List(context.Background(), metav1.ListOptions{})
	if err != nil {
		log.Fatal(err)
	}

	for _, pod := range pods.Items {
		fmt.Printf("Pod %s status: %s\n", pod.Name, pod.Status.Phase)

		events, err := clientset.CoreV1().Events(pod.Namespace).List(context.Background(), metav1.ListOptions{
			FieldSelector: fmt.Sprintf("involvedObject.name=%s", pod.Name),
		})
		if err != nil {
			log.Fatal(err)
		}

		for _, event := range events.Items {
			if event.Reason == "FailedScheduling" || event.Reason == "OutOfcpu" || event.Reason == "OutOfmemory" || event.Reason == "OutOfDisk" {
				fmt.Printf("Event: %s %s\n", event.Reason, event.Message)
			}
		}
	}
}

在这个示例中,我们首先获取了"default"命名空间中的所有Pod,然后对于每个Pod,我们获取了与该Pod相关的所有事件,并检查了这些事件的原因是否是"FailedScheduling"、"OutOfcpu"、"OutOfmemory"或"OutOfDisk"。

注意,这个示例假设你的kubeconfig文件在"~/.kube/config"。如果你的kubeconfig文件在其他地方,你需要修改这个示例。

另外,这个示例没有处理可能的错误,你可能需要添加额外的错误处理代码。

相关推荐
小小码农Come on2 分钟前
单例 QtObject 全局配置
开发语言·前端·javascript
hakesashou4 分钟前
python如何保存img文件
开发语言·python
MarkHD6 分钟前
调度、监控与部署:Python自动化任务全栈实践
开发语言·python·自动化
山甫aa8 分钟前
多叉树定义与遍历-----从零开始的数据结构
开发语言·c++·二叉树·多叉树
永远睡不够的入12 分钟前
C++11新特性(2):深入 C++ 参数传递黑盒:从引用折叠到完美转发,再到可变参数模板
开发语言·c++
无限进步_16 分钟前
【C++】寻找数组中出现次数超过一半的数字:三种解法深度剖析
开发语言·c++·git·算法·leetcode·github·visual studio
深邃-17 分钟前
【Web安全】-Kali,Linux配置(1):Kali网络配置,LinuxEnvConfig配置脚本,APT源的讲解,Kali设置中文
linux·运维·开发语言·网络·安全·web安全·网络安全
Hello World . .18 分钟前
Linux驱动编程:内核同步的艺术-从互斥到底半部
linux·开发语言·数据库
江山与紫云18 分钟前
告别重复造轮子:Codex写脚本
开发语言·python
覆东流20 分钟前
第8天:python列表基础
开发语言·python