如何用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文件在其他地方,你需要修改这个示例。

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

相关推荐

  1. K8s client go 合并informer

    2024-03-16 05:16:02       60 阅读
  2. k8sclient-go:golang与k8s交互桥梁

    2024-03-16 05:16:02       25 阅读
  3. K8S内存资源配置

    2024-03-16 05:16:02       26 阅读
  4. K8S学习指南(69)-客户端client-go使用

    2024-03-16 05:16:02       54 阅读
  5. k8s资源对象Deployment该如何使用?

    2024-03-16 05:16:02       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-16 05:16:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-16 05:16:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-16 05:16:02       82 阅读
  4. Python语言-面向对象

    2024-03-16 05:16:02       91 阅读

热门阅读

  1. vue3 ref 和 reactive 区别

    2024-03-16 05:16:02       35 阅读
  2. Arcade官方教程解析8 Multiple Levels and Other Layers

    2024-03-16 05:16:02       40 阅读
  3. AJAX学习日记——Day 2

    2024-03-16 05:16:02       41 阅读
  4. Android 启动service(Kotlin)

    2024-03-16 05:16:02       29 阅读
  5. 俄罗斯方块游戏开发思路随想

    2024-03-16 05:16:02       37 阅读
  6. android api 34 编译ffmpeg with libfdk-aac

    2024-03-16 05:16:02       39 阅读
  7. 基于arm的ubuntu上运行qgc

    2024-03-16 05:16:02       38 阅读
  8. 程序员面试—反问示例

    2024-03-16 05:16:02       40 阅读
  9. Android平台架构和Android Framework的区别

    2024-03-16 05:16:02       49 阅读
  10. 现代 Android 开发的第一步Kotlin

    2024-03-16 05:16:02       44 阅读