New Config

New_Config #

// NewConfig returns a Config struct with the default values
func NewConfig(codecs serializer.CodecFactory) *Config {
  // 这里是默认的健康检查,后面可以再看一下这个HealthChecker是怎么实现效果的
	defaultHealthChecks := []healthz.HealthChecker{healthz.PingHealthz, healthz.LogHealthz}
 	// 这里生成了id,提供了一下feature的默认值
	var id string
	if feature.DefaultFeatureGate.Enabled(features.APIServerIdentity) {
		id = "kube-apiserver-" + uuid.New().String()
	}
  // 新建一个lifecyclesignals
	lifecycleSignals := newLifecycleSignals()

	return &Config{
    // 用codec填充序列化属性
		Serializer:                  codecs,
    // 默认DefaultBuildHandlerChain,后面会逐个分析这个默认的Chain的filter的
		BuildHandlerChainFunc:       DefaultBuildHandlerChain,
    // 新建一个HandlerChainWaitGroup
		HandlerChainWaitGroup:       new(utilwaitgroup.SafeWaitGroup),
    // 新建一个string类型的sets,里面放DefaultLegacyAPIPrefix
		LegacyAPIGroupPrefixes:      sets.NewString(DefaultLegacyAPIPrefix),
    // 新建一个拒绝访问的PostStartHooks,是string类型的sets,默认为空
		DisabledPostStartHooks:      sets.NewString(),
    // 这里是新建的一个map,对应了PostStartHooks
		PostStartHooks:              map[string]PostStartHookConfigEntry{},
    // 在健康检查中放入默认检查器
		HealthzChecks:               append([]healthz.HealthChecker{}, defaultHealthChecks...),
    // 在就绪检查中放入默认检查器
		ReadyzChecks:                append([]healthz.HealthChecker{}, defaultHealthChecks...),
    // 在生存检查中放入默认检查器
		LivezChecks:                 append([]healthz.HealthChecker{}, defaultHealthChecks...),
    // 
		EnableIndex:                 true,
		EnableDiscovery:             true,
		EnableProfiling:             true,
		EnableMetrics:               true,
    // 最大在运行的请求为400
		MaxRequestsInFlight:         400,
    // 最大值运行的修改请求为200
		MaxMutatingRequestsInFlight: 200,
    // 请求超时时间默认为60秒(除了匹配longrunfunc预测的)
		RequestTimeout:              time.Duration(60) * time.Second,
    // 如果被设置,长时间的请求(比如匹配)会被分配一个随机时间在MinRequestTimeout和2*MinRequestTimeout之间。但是这个是根据请求处理器自己决定是要忽略或者使用这个超时的。
		MinRequestTimeout:           1800,
    // 这个代表的是apiserver可以完成他开始步骤和变成健康的最大时间。从apiserver的开始时间到这段时间走掉,/livez假设没有完成的post-start hooks将会成功完成并且返回true。
		LivezGracePeriod:            time.Duration(0),
    // ShutdownDelayDuration允许阻塞关闭一段时间。比如指向API server的endpoints被所有节点覆盖。在这段时间内,API server保持服务/healthz会返回200,但是/readyz会返回失败。
		ShutdownDelayDuration:       time.Duration(0),
    
		// 1.5MB is the default client request size in bytes
		// the etcd server should accept. See
		// https://github.com/etcd-io/etcd/blob/release-3.4/embed/config.go#L56.
		// A request body might be encoded in json, and is converted to
		// proto when persisted in etcd, so we allow 2x as the largest size
		// increase the "copy" operations in a json patch may cause.
    // 1.5MB是etcd服务端可以接受的默认客户端请求大小。
    // 请求体可能被编码成了json,然后被转换为porto当需要存储在etcd中,所以我们允许两倍的的最大大小来提升“copy”操作,这个操作在json patch的时候可能会使用。所以是3*1024*1024。
		JSONPatchMaxCopyBytes: int64(3 * 1024 * 1024),
		// 1.5MB is the recommended client request size in byte
		// the etcd server should accept. See
		// https://github.com/etcd-io/etcd/blob/release-3.4/embed/config.go#L56.
		// A request body might be encoded in json, and is converted to
		// proto when persisted in etcd, so we allow 2x as the largest request
		// body size to be accepted and decoded in a write request.
		// If this constant is changed, maxRequestSizeBytes in apiextensions-apiserver/third_party/forked/celopenapi/model/schemas.go
		// should be changed to reflect the new value, if the two haven't
		// been wired together already somehow.
    // 1.5MB是etcd服务端可以接受的默认客户端请求大小。请求体可能被编码成了json,然后被转换为porto当需要存储在etcd中,所以我们允许两倍的的最大大小来提升“copy”操作,这个操作在json patch的时候可能会使用。所以是3*1024*1024。
    // 如果这个常量被修改了,在apiextensions-apiserver/third_party/forked/celopenapi/model/schemas.go里的maxRequestSizeBytes也需要做相应更改。如果他们两个没有被绑定到一起的话
		MaxRequestBodyBytes: int64(3 * 1024 * 1024),

		// Default to treating watch as a long-running operation
		// Generic API servers have no inherent long-running subresources
    // 这个是用来将watch设置为默认的长时间操作
    // Generic API 服务器没有继承long-running的子资源
		LongRunningFunc:           genericfilters.BasicLongRunningRequestCheck(sets.NewString("watch"), sets.NewString()),
    // lifecycleSignals 提供了很多在apiserver的生存周期中发生的信号。
    // 最终会被标为私有的因为它不能被重写。
		lifecycleSignals:          lifecycleSignals,
    //StorageObjectCountTracker是用来追踪每个资源在存储里的所有对象成员,这样我们可以判断来的请求的宽度。
		StorageObjectCountTracker: flowcontrolrequest.NewStorageObjectCountTracker(lifecycleSignals.ShutdownInitiated.Signaled()),
		// 设置APIServerID
		APIServerID:           id,
    // 设置StorageVersionManager,直接使用默认的Manager
		StorageVersionManager: storageversion.NewDefaultManager(),
	}
}