K8S-APIServer日志报 has no resources 的分析

本文分析了Kubernetes APIServer中出现'has no resources'警告的原因,该警告源于资源版本未启用。在启动流程中,APIServer遍历资源版本,若未找到对应资源存储对象则报此警告。资源注册和KubeAPIServer创建过程中,某些资源版本(如batch/v2alpha1)因默认禁用而触发该警告。资源版本的禁用主要是因为Alpha版本的不稳定性。
摘要由CSDN通过智能技术生成

一、现象

在生产环境中遇到 api-server 服务发生陆续重启的现象, 查看监控,APIServer 所在的 master 节点的CPU、内存和网络流量发生抖动。
在 APIServer 日志中可以看到日志中存在 it has no resources 的警告日志:

{
   "log":"W0814 03:04:44.058851       1 genericapiserver.go:342] Skipping API image.openshift.io/1.0 because it has no resources.\n","stream":"stderr","time":"2020-08-14T03:04:44.059033849Z"}

{
   "log":"W0814 03:04:44.058851       1 genericapiserver.go:342] Skipping API image.openshift.io/1.0 because it has no resources.\n","stream":"stderr","time":"2020-08-14T03:04:44.059033849Z"}

{
   "log":"W0814 03:04:49.422600       1 genericapiserver.go:342] Skipping API pre012 because it has no resources.\n","stream":"stderr","time":"2020-08-14T03:04:49.422708175Z"}

二、源码分析

查阅源码,警告日志的地方发生在 staging/src/k8s.io/apiserver/pkg/server/genericapiserver.go 文件中的 installAPIResources 方法:

func (s *GenericAPIServer) installAPIResources(apiPrefix string, apiGroupInfo *APIGroupInfo) error {
   
	for _, groupVersion := range apiGroupInfo.PrioritizedVersions {
   
		if len(apiGroupInfo.VersionedResourcesStorageMap[groupVersion.Version]) == 0 {
   
			glog.Warningf("Skipping API %v because it has no resources.", groupVersion)
			continue
		}
		...
	}
	return nil
}

apiGroupInfo 的 VersionedResourcesStorageMap 字段用于存储资源版本资源资源存储对象的映射关系,其表现形式为 map[string]map[string]rest.Storage,比如 Pod 资源与资源对象的映射关系为:v1/pods/PodStorage (资源版本/资源/资源存储对象)。
那么资源存储对象是什么呢?

type PodStorage struct {
   
	Pod         *REST
	Binding     *BindingREST
	Eviction    *EvictionREST
	Status      *StatusREST
	Log         
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值