k8s的apiserver_kube_apiserver

k8s的apiserver_kube_apiserverAPIserverfunc main() { … #核心 command := app.NewAPIServerCommand() #日志 logs.InitLogs() defer logs.FlushLogs() …}#NewAPIServerCommand#核心是调用run函数 运行AIPserver 永远不会退出return Run(completedOptions, genericapiserver.SetupSignalHandler())#Run#创建

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

APIserver

func main() { 
   
	...
	#核心
	command := app.NewAPIServerCommand()
	#日志
	logs.InitLogs()
	defer logs.FlushLogs()
	...
}
#NewAPIServerCommand
#核心是调用run函数  运行AIPserver 永远不会退出
return Run(completedOptions, genericapiserver.SetupSignalHandler())
#Run
#创建server链路
server, err := CreateServerChain(completeOptions, stopCh)
func CreateServerChain(completedOptions completedServerRunOptions, stopCh <-chan struct{ 
   }) (*aggregatorapiserver.APIAggregator, error) { 
   
	#创建APIserver的配置
	kubeAPIServerConfig, serviceResolver, pluginInitializer, err := CreateKubeAPIServerConfig(completedOptions)
	#API拓展服务 主要针对CRD
	apiExtensionsServer, err := createAPIExtensionsServer(apiExtensionsConfig, genericapiserver.NewEmptyDelegate())
	#API核心服务
	kubeAPIServer, err := CreateKubeAPIServer(kubeAPIServerConfig, apiExtensionsServer.GenericAPIServer)
	#API聚合服务 聚合前面的server
	aggregatorServer, err := createAggregatorServer(aggregatorConfig, kubeAPIServer.GenericAPIServer, apiExtensionsServer.Informers)
}

#CreateKubeAPIServerConfig
func CreateKubeAPIServerConfig(s completedServerRunOptions) (
	*controlplane.Config,
	aggregatorapiserver.ServiceResolver,
	[]admission.PluginInitializer,
	error,
) { 
   
	#建立通用配置
	genericConfig, versionedInformers, serviceResolver, pluginInitializers, admissionPostStartHook, storageFactory, err := buildGenericConfig(s.ServerRunOptions, proxyTransport)
	if err != nil { 
   
	}
#buildGenericConfig
func buildGenericConfig(
	...
	#默认生成api文档
	genericConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(generatedopenapi.GetOpenAPIDefinitions, openapinamer.NewDefinitionNamer(legacyscheme.Scheme, extensionsapiserver.Scheme, aggregatorscheme.Scheme))
	...
	#采用etcd作为存储方案
	completedStorageFactoryConfig, err := storageFactoryConfig.Complete(s.Etcd)
	#认证机制
	if lastErr = s.Authentication.ApplyTo
	#授权机制
	genericConfig.Authorization.Authorizer, genericConfig.RuleResolver, err = BuildAuthorizer(s, genericConfig.EgressSelector, versionedInformers)
	#准入机制
	err = s.Admission.ApplyTo()
}
#认证机制
#s.Authentication.ApplyTo
func (o *BuiltInAuthenticationOptions) ApplyTo(authInfo *genericapiserver.AuthenticationInfo, secureServing *genericapiserver.SecureServingInfo, egressSelector *egressselector.EgressSelector, openAPIConfig *openapicommon.Config, extclient kubernetes.Interface, versionedInformer informers.SharedInformerFactory){ 
   
	...
	#实例化Config
	authInfo.Authenticator, openAPIConfig.SecurityDefinitions, err = authenticatorConfig.New()
	...
}
#authenticatorConfig.New
func (config Config) New() (authenticator.Request, *spec.SecurityDefinitions, error) { 
   
	#重点关注authenticators 和 tokenAuthenticators两个变量
	var authenticators []authenticator.Request
	var tokenAuthenticators []authenticator.Token
	#添加requestHeader认证方式
	if config.RequestHeaderConfig != nil { 
   
		requestHeaderAuthenticator := headerrequest.NewDynamicVerifyOptionsSecure(
			...
		)
		#追加认证方式
		authenticators = append(authenticators, authenticator.WrapAudienceAgnosticRequest(config.APIAudiences, requestHeaderAuthenticator))
	}
	#添加CLientCA认证方式
	if config.ClientCAContentProvider != nil { 
   
		...
	}
	#添加Token认证方式
	if len(config.TokenAuthFile) > 0 { 
   
		tokenAuth, err := newAuthenticatorFromTokenFile(config.TokenAuthFile)
		
	}
	#...其他各种认证方式
	#如果没有认证方式 则启动anonymous
	if len(authenticators) == 0 { 
   
		if config.Anonymous { 
   
			return anonymous.NewAuthenticator(), &securityDefinitions, nil
		}
		return nil, &securityDefinitions, nil
	}
	#整合两种认证方式authenticators 和 tokenAuthenticators
	authenticator := union.New(authenticators...)
	}

	return authenticator, &securityDefinitions, nil
}
#授权机制
#BuildAuthorizer
#调用此函数
return authorizationConfig.New()
#New
func (config Config) New() (authorizer.Authorizer, authorizer.RuleResolver, error) { 
   
	...
	case modes.ModeNode:
	...
	const (
	...
	#对生产来说最有用出的模式RBAC 角色-用户模式
	ModeRBAC string = "RBAC"
	...
)
#CreateKubeAPIServer
func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) (*Instance, error) { 
   
	#GenericServer实例化
	s, err := c.GenericConfig.New("kube-apiserver", delegationTarget)
	...
	#masterserver实例化
	m := &Instance{ 
   
		GenericAPIServer:          s,
		ClusterAuthenticationInfo: c.ExtraConfig.ClusterAuthenticationInfo,
	}
	#注册LegacyAPI
	if c.ExtraConfig.APIResourceConfigSource.VersionEnabled(apiv1.SchemeGroupVersion) { 
   
	...
		}
		if err := m.InstallLegacyAPI(&c, c.GenericConfig.RESTOptionsGetter, legacyRESTStorageProvider); err != nil { 
   
			return nil, err
		}
	}
	#REST接口的存储定义 可以看到很多k8s上的常见定义 比如node节点/storage存储/event事件等等
	restStorageProviders := []RESTStorageProvider{ 
   
		...
	}
	#安装 API 
	if err := m.InstallAPIs(c.ExtraConfig.APIResourceConfigSource, c.GenericConfig.RESTOptionsGetter, restStorageProviders...); err != nil { 
   
		return nil, err
	}
	#添加钩子
	m.GenericAPIServer.AddPostStartHookOrDie
	...
	return m, nil
}
#GenericConfig.New
func (c completedConfig) New(name string, delegationTarget DelegationTarget) { 
   
	#实例化一个APIserver
	s := &GenericAPIServer
	#启动之后的钩子函数
	for k, v := range delegationTarget.PostStartHooks() { 
   
		s.postStartHooks[k] = v
	}
	#关闭之前的钩子函数
	for k, v := range delegationTarget.PreShutdownHooks() { 
   
		s.preShutdownHooks[k] = v
	}
	...
	#安装相应的APIserver
	installAPI(s, c.Config)
}
# installAPI
func installAPI(s *GenericAPIServer, c *Config) { 
   
	#添加/index.html路由规则
	if c.EnableIndex { 
   
	}
	#添加pprof的路由规则
	if c.EnableProfiling { 
   
	}
	#添加监控相关的/metrics的指标路由规则
	if c.EnableMetrics { 
   
	}
	#添加版本相关的路由规则
	routes.Version{ 
   Version: c.Version}.Install(s.Handler.GoRestfulContainer)
	#看起服务发现
	if c.EnableDiscovery { 
   
	}
	...
}
func (m *Master) InstallLegacyAPI(c *completedConfig, restOptionsGetter generic.RESTOptionsGetter, legacyRESTStorageProvider corerest.LegacyRESTStorageProvider) error { 
   
  # RESTStorage的初始化
	legacyRESTStorage, apiGroupInfo, err := legacyRESTStorageProvider.NewLegacyRESTStorage(restOptionsGetter)
	 # 前缀为 /api,注册上对应的Version和Resource
  # Pod作为核心资源,没有Group的概念
	if err := m.GenericAPIServer.InstallLegacyAPIGroup(genericapiserver.DefaultLegacyAPIPrefix, &apiGroupInfo); err != nil { 
   
		return fmt.Errorf("error in registering group versions: %v", err)
	}
	return nil
}
#NewLegacyRESTStorage
#RESTStorage的初始化
func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(restOptionsGetter generic.RESTOptionsGetter) (LegacyRESTStorage, genericapiserver.APIGroupInfo, error) { 
   
	# pod 模板
	podTemplateStorage, err := podtemplatestore.NewREST(restOptionsGetter)
	# event事件
	eventStorage, err := eventstore.NewREST(restOptionsGetter, uint64(c.EventTTL.Seconds()))
	# limitRange资源限制
	limitRangeStorage, err := limitrangestore.NewREST(restOptionsGetter)
	# resourceQuota资源配额
	resourceQuotaStorage, resourceQuotaStatusStorage, err := resourcequotastore.NewREST(restOptionsGetter)
	# secret加密
	secretStorage, err := secretstore.NewREST(restOptionsGetter)
	# PV 存储
	persistentVolumeStorage, persistentVolumeStatusStorage, err := pvstore.NewREST(restOptionsGetter)
	# PVC 存储
	persistentVolumeClaimStorage, persistentVolumeClaimStatusStorage, err := pvcstore.NewREST(restOptionsGetter)
	# ConfigMap 配置
	configMapStorage, err := configmapstore.NewREST(restOptionsGetter)
	...
  
  # pod模板
  podStorage, err := podstore.NewStorage()
 
  # 保存storage的对应关系
  restStorageMap := map[string]rest.Storage{ 
   
		"pods":             podStorage.Pod,
    ...
  }
}
#podstore.NewStorage
#Pod初始化
func NewStorage(optsGetter generic.RESTOptionsGetter, k client.ConnectionInfoGetter, proxyTransport http.RoundTripper, podDisruptionBudgetClient policyclient.PodDisruptionBudgetsGetter) (PodStorage, error) { 
   

	store := &genericregistry.Store{ 
   
		// 增改删的策略
	 	CreateStrategy:      registrypod.Strategy,
		UpdateStrategy:      registrypod.Strategy,
		DeleteStrategy:      registrypod.Strategy,
		...
	}
}

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168519.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jstat使用_jvm常用命令

    jstat使用_jvm常用命令如何判断JVM是否存在内存问题呢?判断JVM垃圾回收是否正常?一般的top指令基本上满足不了这样的需求,因为它主要监控的是总体的系统资源,很难定位到java应用程序。Jstat是JDK自带的一个轻量级小工具。全称“JavaVirtualMachinestatisticsmonitoringtool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能…

    2025年10月31日
    3
  • 【操作系统—-Linux】常用DNS列表「建议收藏」

    【操作系统—-Linux】常用DNS列表「建议收藏」修改etc/resolv.conf内容(一般打开后为空白),增加DNS服务器地址山东青岛联通DNS服务器nameserver202.102.134.68谷歌公共DNS服务器(联网稳定)nameserver8.8.8.8nameserver8.8.4.4114公共DNS(延迟低)nameserver114.114.114.114nameser…

    2022年6月5日
    83
  • idea 2021.3.8 for mac激活 3月最新注册码

    idea 2021.3.8 for mac激活 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    56
  • C / C++ 保留两位小数(setprecision(n)的一些用法总结)「建议收藏」

    C / C++ 保留两位小数(setprecision(n)的一些用法总结)「建议收藏」  做题遇到保留两位小数的题目,课本上写的又多又杂,网上查来的也是一堆内容需要筛选,눈_눈还是自己总结一下吧。  首先说C++代码#include&amp;amp;amp;amp;lt;iomanip&amp;amp;amp;amp;gt;//不要忘了头文件//第一种写法cout&amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;setiosflags(ios::fi

    2022年4月28日
    100
  • ORAN专题系列-21:主要的玩家(设备商)以及他们各自的态度、擅长领域

    爱立信:是O-RAN重要的成员,也是标准化起草单位之一,他们支持的是O-RAN的智能化和自动化,但他们公开表示抵制O-RAN的开放化,并公开批评过O-RAN政策联盟,抵制中兴和华为的行为。他们虽然反对对前传接口的开放。但处于商业的目的或处于迫于运营商的压力,他们还是使用爱立信的O-DU与富士通的FR1O-RAN为DoCoMo提供了互联互通,他们使用爱立信的O-DU与三星的FR2O-RAN为AT&T提供了互联互通。他们对O-RAN对O-RAN的整体的价格、性能、维护管理、O…

    2022年4月9日
    63
  • 阿里巴巴Java开发手册.pdf (详尽版 和 终极版)

    阿里巴巴Java开发手册.pdf (详尽版 和 终极版)阿里巴巴Java开发手册已经是国内Java编码的行业规范笔者特意提供了阿里巴巴Java开发手册(详尽版).pdf阿里巴巴开发手册终极版2019.pdf扫描下面的二维码或搜索公众号【技术杂谈】点击关注并回复【Java开发手册】即可获取下载链接…

    2022年7月7日
    64

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号