我正在使用 go discovery 客户端 pkg (
k8s.io/client-go/discovery
, v0.22.2
) 列出集群中所有支持的资源 ->
discoveryClient, err := discovery.NewDiscoveryClientForConfig(GetK8sConfig())
if err != nil {
// do something
}
resourceList, err := discoveryClient.ServerPreferredResources()
当我运行此代码时,出现以下错误 ->
I1213 09:19:15.932915 38142 request.go:665] Waited for 1.008601388s due to client-side throttling, not priority and fairness, request: GET:https://35.225.61.23/apis/scheduling.k8s.io/v1beta1?timeout=32s
现在,我不介意这个错误,困扰我的是我无法阻止这个错误被打印。
知道如何阻止发现客户端向 stderr 发送错误吗?
客户端使用实现默认日志记录约定的klog库。您可以在自述文件中阅读更多内容。
您应该在 main.c 文件中使用不同的值来初始化库。 作为例子 :
import (
"bytes"
"flag"
"fmt"
"k8s.io/klog/v2"
)
func main() {
klog.InitFlags(nil)
flag.Set("logtostderr", "false")
flag.Set("alsologtostderr", "false")
flag.Parse()
另一种方法,如果你想以 json 负载作为输出来起诉 Zap 记录器,你可以这样做:
import (
...
"github.com/go-logr/zapr"
"go.uber.org/zap"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/klog/v2"
...
)
func main() {
flag.Parse()
if logger, err := zap.NewProduction(); err == nil {
klog.SetLogger(zapr.NewLogger(logger))
}
来自:
W0630 12:59:05.205701 1 client_config.go:614] Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.
到
{"level":"info","ts":1625058100.1339207,"caller":"v2/klog.go:921","msg":"Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.\n"}
我最终解决了这个问题,如下:
package main
imaport "k8s.io/klog/v2"
func main() {
flag.Parse()
// create a new logger instance with production configuration settings
if logger, err := zap.NewProduction(); err == nil {
// set the logger level to fatal to reduce noise
logger = logger.WithOptions(zap.IncreaseLevel(zap.FatalLevel))
// override the default klog logger
klog.SetLogger(zapr.NewLogger(logger))
}
}