Kubernetes 源码深度解析:从架构设计到核心机制实现

引言

Kubernetes 作为容器编排领域的事实标准,其复杂而精妙的架构设计背后蕴含着丰富的技术实现细节。深入理解 Kubernetes 源码不仅是掌握容器编排技术的关键,更是成为云原生领域专家的必经之路。本报告将从源码角度全面解析 Kubernetes 的核心组件架构、工作机制和实现原理,为技术人员提供系统性的学习指导。

当前,Kubernetes 已发布到 v1.35.1 版本(2026 年 2 月 10 日发布),该版本引入了多项重要特性,包括 Pod 资源就地更新功能毕业为稳定版(GA)、节点级路由偏好功能、受限的身份扮演特性等(41)。本报告将基于当前主流版本的源码,深入剖析各个核心组件的实现机制,涵盖 API Server、Scheduler、Controller Manager、Kubelet 等关键组件,并重点关注 Pod 调度、网络策略、存储管理等核心功能的源码实现。

一、版本定位与环境搭建

1.1 当前主流版本分析

Kubernetes 采用 语义版本控制 策略,版本号格式为 x.y.z,其中 x 是主要版本,y 是次要版本,z 是补丁版本。截至 2026 年 2 月,Kubernetes 维护最近三个次要版本:1.35、1.34 和 1.33,这三个版本均处于支持状态。

具体版本支持情况如下:

版本最新补丁版本发布日期停止支持日期当前状态
v1.351.35.12026-02-102027-02-28支持中
v1.341.34.42026-02-102026-10-27支持中
v1.331.33.82026-02-102026-06-28支持中
v1.321.32.122026-02-102026-02-28即将停止支持

v1.35 版本的重要更新包括:Pod 资源就地更新功能现已毕业为稳定版(GA),允许调整 CPU 和内存资源而无需重启 Pod;Service 新增节点级路由偏好功能,优先调度本地端点;引入受限的身份扮演(Constrained Impersonation)特性;扩展 Toleration 支持数值比较运算符(Gt、Lt);引入 GangScheduling 调度器插件等(41)

1.2 开发环境配置要求

Kubernetes 1.35 版本的构建环境要求 Go 1.25.7 版本。开发环境配置建议如下:

操作系统要求

  • Linux 系统(推荐 Ubuntu 20.04 或更高版本)

  • macOS(需要 Docker Desktop for Mac,建议设置至少 8GB 初始内存)

  • Windows(需要 Docker Desktop WSL2 后端)

依赖工具

  1. Docker:用于容器化构建环境,需要确保 Docker CLI plugin buildx 正确安装

  2. Go 语言环境:Go 1.25.x 版本,需要正确设置 GOPATH 和 GOROOT

  3. Git:用于克隆 Kubernetes 源码仓库

  4. make:用于执行构建脚本

构建环境准备

\# 下载并安装 Go 1.25.7

wget https://go.dev/dl/go1.25.7.linux-amd64.tar.gz

sudo tar -C /usr/local -xzf go1.25.7.linux-amd64.tar.gz

\# 设置环境变量

export GOROOT=/usr/local/go

export GOPATH=\$HOME/go

export PATH=\$GOPATH/bin:\$GOROOT/bin:\$PATH

\# 验证安装

go version

1.3 源码获取与构建

Kubernetes 源码托管在 GitHub 上,获取源码的标准方式是使用 Git 克隆官方仓库:

\# 克隆 Kubernetes 源码仓库

git clone https://github.com/kubernetes/kubernetes.git

cd kubernetes

Kubernetes 提供了 容器化构建环境,这是推荐的构建方式,因为它简化了初始设置并提供了非常一致的构建和测试环境。主要构建脚本位于 build/ 目录下:

核心构建脚本

  • build/``run.sh:在构建 Docker 容器中运行命令

  • build/``make-clean.sh:清理构建产物

  • build/``shell.sh:进入构建容器的 shell

常用构建命令

\# 在容器中构建 Linux 二进制文件

build/run.sh make

\# 构建所有平台的二进制文件

build/run.sh make cross

\# 构建特定平台的 kubectl

build/run.sh make kubectl KUBE\_BUILD\_PLATFORMS=darwin/amd64

\# 运行所有单元测试

build/run.sh make test

\# 运行集成测试

build/run.sh make test-integration

\# 构建 release 版本

build/run.sh make release

构建产物输出到源码仓库顶层的 _output/ 目录,包括编译的二进制包(如 kubectl、kube-scheduler 等)和归档的 Docker 镜像。

1.4 源码目录结构概览

Kubernetes 源码采用 模块化和组织化 的结构来管理其复杂性。核心目录结构如下:

目录功能描述
cmd/各种 Kubernetes 二进制文件的入口点,如 kubelet、kubeadm、kubectl
pkg/包含不同组件共享的可重用包
staging/用于暂存依赖项,这些依赖项后来会被提升为独立的仓库(如 client-go)
test/包括端到端测试、集成测试和其他测试工具
vendor/包含使用 go mod 管理的 vendored 依赖项
api/API 对象定义
plugin/各种插件实现

各组件源码位置

  • API Server:cmd/kube-apiserver/pkg/apiserver/

  • Scheduler:cmd/kube-scheduler/pkg/scheduler/

  • Controller Manager:cmd/kube-controller-manager/pkg/controller/

  • Kubelet:cmd/kubelet/pkg/kubelet/

  • Kube-proxy:cmd/kube-proxy/pkg/proxy/

二、整体架构概览与启动流程

2.1 核心组件架构设计

Kubernetes 集群由 控制平面(Control Plane)工作节点(Worker Nodes) 组成。控制平面负责对集群做出全局决策(如调度),以及检测和响应集群事件(如当 Deployment 的 replicas 字段不满足时启动新的 Pod)。工作节点托管运行应用程序工作负载组件的 Pod。

控制平面核心组件

  1. kube-apiserver:作为 Kubernetes 控制平面的前端,是 Kubernetes HTTP API 的核心组件服务器。它设计为支持水平扩展,即通过部署更多实例来扩展(54)

  2. etcd:一个一致且高可用的键值存储,用于保存 API 服务器的所有数据,是集群所有数据的持久化存储(55)

  3. kube-scheduler:监控未绑定到节点的 Pod,并将每个 Pod 分配给合适的节点。调度决策考虑的因素包括资源需求、硬件 / 软件 / 策略约束、亲和性和反亲和性规范、数据本地性等(55)

  4. kube-controller-manager:运行各种控制器来实现 Kubernetes API 的操作。逻辑上每个控制器是一个独立的进程,但为了降低复杂性,所有控制器都编译在一个二进制文件中并在同一个进程中运行(55)

  5. cloud-controller-manager(可选):嵌入特定于云的控制逻辑,允许将集群连接到云提供商的 API,将与云平台交互的组件与仅与集群交互的组件分离。

节点组件

  • kubelet:确保包含容器的 Pod 正常运行

  • kube-proxy(可选):维持节点上的网络规则并实现 Service

  • 容器运行时:负责运行容器的软件

2.2 组件间通信机制

Kubernetes 采用 “中心辐射”(hub-and-spoke)API 模式,所有来自节点(或它们运行的 Pod)的 API 使用都终止于 API 服务器。没有其他控制平面组件被设计为暴露远程服务。

通信安全机制

  • API 服务器配置为在安全的 HTTPS 端口(通常是 443)上监听远程连接,启用一种或多种形式的客户端认证

  • 节点应该配置有集群的公共根证书,以便它们可以使用有效的客户端凭证安全地连接到 API 服务器

  • Pod 可以通过服务账户安全地连接到 API 服务器,Kubernetes 会在 Pod 实例化时自动注入公共根证书和有效的 bearer token

控制平面到节点的通信路径

  1. API Server 到 Kubelet:用于获取 Pod 日志、附加到运行中的 Pod、提供 Kubelet 的端口转发功能。这些连接终止于 Kubelet 的 HTTPS 端点。

  2. API Server 到节点、Pod 和服务:默认使用普通 HTTP 连接,因此既不认证也不加密。可以通过在 API URL 中将节点、Pod 或服务名称前缀为 https: 来在安全的 HTTPS 连接上运行,但不会验证 HTTPS 端点提供的证书,也不会提供客户端凭证。

2.3 启动流程分析

Kubernetes 各组件的启动流程具有相似的模式,都使用 Cobra 命令行框架 进行初始化(79)

func main() {

    command := app.NewAPIServerCommand()

    code := cli.Run(command)

    os.Exit(code)

}

通用启动流程

  1. 设置全局随机数种子

  2. 初始化命令行标志

  3. 初始化日志系统

  4. 解析命令行参数

  5. 创建并初始化主组件对象

  6. 启动各种 informer 监听资源变化

  7. 启动主运行循环

API Server 为例,其启动流程的核心代码位于 cmd/kube-apiserver/apiserver.go

func main() {

    rand.Seed(time.Now().UnixNano())

    s := options.NewAPIServer()

    s.AddFlags(pflag.CommandLine)

    flag.InitFlags()

    logs.InitLogs()

    defer logs.FlushLogs()

    verflag.PrintAndExitIfRequested()

    

    if err := app.Run(s); err != nil {

        fmt.Fprintf(os.Stderr, "%v\n", err)

        os.Exit(1)

    }

}

app.Run(s) 方法中,会进行以下关键步骤:

  • 验证 etcd 服务器列表

  • 初始化 GenericAPIServer

  • 组装 Master 配置(包括 SSH 隧道配置、存储工厂配置、认证器配置和授权器配置等)

  • 创建并启动 Master

  • 启动共享 informer

各组件启动顺序

  1. etcd:提供分布式键值存储服务

  2. kube-apiserver:提供 API 服务,处理集群中的所有操作

  3. kube-controller-manager:通过控制循环来管理集群的状态

  4. kube-scheduler:调度容器到节点上运行

这种启动顺序确保了核心基础设施(etcd 和 API Server)首先启动,然后是负责集群管理的控制组件。

三、API Server 源码深度解析

3.1 RESTful API 实现机制

API Server 是 Kubernetes 集群的 统一门户,所有外部请求都通过它进行认证、授权和路由。它使用 Go 语言的 http 包构建 HTTP 服务器,并通过 gorilla/mux 路由库实现复杂的路由逻辑(82)

路由注册机制

API 资源初始化完成后,需要将这些 API 资源注册为 RESTful API。API 注册的入口函数有两个:m.InstallAPIsm.InstallLegacyAPI,分别注册 /api/apis 的 API(98)

路由注册遵循 go-restful 设计模式

  • 将处理方法注册到 Route 中

  • 同一个根路径下的 Route 注册到 WebService 中

  • WebService 注册到 Container 中

  • Container 负责分发请求(89)

关键路由注册函数

路由注册的核心逻辑位于 k8s.io/apiserver/pkg/endpoints/installer.go 中的 registerResourceHandlers 函数,该函数有 700 多行代码,负责将 REST-Storage 转换为一个个 Route(91)

3.2 认证授权机制

Kubernetes API Server 实现了 三层安全控制机制:认证(Authentication)、授权(Authorization)和准入控制(Admission Control),每个请求都需要经过这三个阶段才有权限操作资源对象(106)

认证流程

认证阶段使用多种认证模块,包括客户端证书、密码、普通 token、bootstrap token、JWT(用于服务账户)等。当配置多个认证模块时,会依次尝试每个模块直到其中一个成功。认证失败返回 HTTP 状态码 401(101)

认证相关源码位于 staging/src/``k8s.io/apiserver/pkg/endpoints/filters/authentication.go,核心函数是 withAuthentication,它返回带有认证功能的 HTTP Handler(96)

授权流程

授权阶段检查已认证的用户是否有权限执行请求的操作。Kubernetes 支持多种授权策略,包括 RBAC(基于角色的访问控制)ABAC(基于属性的访问控制)(104)

授权相关源码位于 staging/src/``k8s.io/apiserver/pkg/endpoints/filters/authorization.go,核心函数是 withAuthorization,它返回带有授权功能的 HTTP Handler(97)

准入控制流程

准入控制在授权完成之后发生(因此,仅在授权决定允许请求时才发生),可以在对象被持久化前后执行拦截式检查和修改,例如资源配额验证、网络策略注入、Pod 注入 sidecar 等(104)

准入控制配置通过命令行参数 --admission-control 设置,例如:

kube-apiserver --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota

3.3 Watch 机制实现

Watch 机制是 Kubernetes 实现 实时状态同步 的核心技术,允许客户端持续监听资源对象的变化。Watch 机制的实现涉及多个层次:

API 层 Watch 实现

Watch 处理程序的核心源码位于 staging/src/``k8s.io/apiserver/pkg/endpoints/handlers/watch.go,核心函数是 serveWatchHandler,它处理 HTTP Watch 请求并返回持续的数据流(108)

存储层 Watch 实现

底层存储的 Watch 实现位于 staging/src/``k8s.io/apiserver/pkg/storage/etcd3/watcher.go。当 etcd 中存储的对象发生变化时,Watcher 会解码变化的数据并生成相应的事件(110)

客户端 Watch 使用

客户端通过 client-goListWatch 机制使用 Watch 功能。ListWatch 结构体定义如下:

type ListWatch struct {

    ListFunc func() (runtime.Object, error)

    WatchFunc func(options metav1.ListOptions) (watch.Interface, error)

    DisableChunking bool

}

3.4 自定义资源定义(CRD)机制

CRD(CustomResourceDefinition)是 Kubernetes 推荐的资源扩展方式。CRD 本质是向 K8s API Server 注册自定义资源的 “契约”,定义了资源的组(Group)、版本(Version)、类别(Kind)、范围(Scope,Namespace 或 Cluster)及字段结构(115)

CRD 定义示例

apiVersion: apiextensions.k8s.io/v1

kind: CustomResourceDefinition

metadata:

  name: databaseclusters.database.example.com

spec:

  group: database.example.com

  versions:

    - name: v1alpha1

      served: true

      storage: true

      schema:

        openAPIV3Schema:

          type: object

          properties:

            spec:

              type: object

              required:

                - databaseType

                - replicas

              properties:

                databaseType:

                  type: string

                  enum:

                    - mysql

                    - postgresql

                    - mongodb

  scope: Namespaced

  names:

    plural: databaseclusters

    singular: databasecluster

    kind: DatabaseCluster

    shortNames:

      - db

      - dbcluster

CRD 实现原理

基于 CRD 技术,用户能将自定义资源注册到 Kubernetes 系统,并像使用原生资源(如 Pod、StatefulSet)一样对自定义资源进行创建、查看、修改、删除等操作,实现了类似于插件式的功能增强(119)

CRD 的核心源码位于 staging/src/``k8s.io/apiextensions-apiserver/ 目录,包括 CRD 的 API 定义、存储实现、验证逻辑等。

四、Scheduler 源码深度解析

4.1 Pod 调度流程

Kubernetes Scheduler 负责将未绑定节点的 Pod 分配到合适的 Node 上,其核心调度流程分为 预选(Predicates)优选(Priorities) 两个阶段(129)

调度流程概览

  1. 监听与入队:监听 API Server 的 Pod 创建事件,将未调度 Pod 加入队列

  2. 调度周期:从队列取出 Pod 进行调度决策

  3. 过滤阶段(预选):筛选符合条件的节点

  4. 评分阶段(优选):为候选节点打分

  5. 绑定阶段:将 Pod 绑定到最优节点

调度流程的简化伪代码如下:

for pod := range unscheduledPods {

    // 阶段1:预选

    feasibleNodes := filterNodes(pod, allNodes)

    

    // 阶段2:优选

    priorityList := prioritize(pod, feasibleNodes)

    

    // 绑定

    bind(pod, selectHost(priorityList))

}

4.2 调度算法实现

核心调度逻辑位于 pkg/scheduler/core/generic_scheduler.go 中的 Schedule 函数(122)。该函数实现了完整的调度流程:

func (g \*GenericScheduler) Schedule(ctx context.Context, extenders []framework.Extender, state \*framework.CycleState, pod \*v1.Pod) (result ScheduleResult, err error) {

    // 1. 获取节点快照

    nodeInfoSnapshot := g.nodeInfoSnapshot

    

    // 2. 执行预过滤插件

    status := g.framework.RunPreFilterPlugins(ctx, state, pod)

    if !status.IsSuccess() {

        return result, status.AsError()

    }

    

    // 3. 过滤阶段

    feasibleNodes, err := g.findNodesThatFit(ctx, state, pod)

    if err != nil {

        return result, err

    }

    

    // 4. 后过滤(抢占)

    if len(feasibleNodes) == 0 {

        feasibleNodes, err = g.runPostFilterPlugins(ctx, state, pod, feasibleNodes)

    }

    

    // 5. 执行预评分插件

    if status := g.framework.RunPreScorePlugins(ctx, state, pod, feasibleNodes); !status.IsSuccess() {

        return result, status.AsError()

    }

    

    // 6. 评分阶段

    priorityList, err := g.prioritizeNodes(ctx, state, pod, feasibleNodes)

    if err != nil {

        return result, err

    }

    

    // 7. 选择最优节点

    host, err := g.selectHost(priorityList)

    

    return ScheduleResult{SuggestedHost: host}, nil

}

4.3 调度框架与插件机制

Kubernetes 1.15 引入的 调度框架(Scheduler Framework) 将调度过程分解为多个扩展点,实现了高度模块化。调度框架定义了 11 个扩展点,覆盖调度全生命周期:

type Framework interface {

    RunPreFilterPlugins(ctx context.Context, state \*CycleState, pod \*v1.Pod) \*Status

    RunFilterPlugins(ctx context.Context, state \*CycleState, pod \*v1.Pod, nodeInfo \*NodeInfo) \*Status

    RunPostFilterPlugins(ctx context.Context, state \*CycleState, pod \*v1.Pod, filteredNodeStatusMap NodeToStatusMap) \*Status

    RunPreScorePlugins(ctx context.Context, state \*CycleState, pod \*v1.Pod, nodes []\*v1.Node) \*Status

    RunScorePlugins(ctx context.Context, state \*CycleState, pod \*v1.Pod, nodes []\*v1.Node) (PluginToNodeScores, \*Status)

    RunPreBindPlugins(ctx context.Context, state \*CycleState, pod \*v1.Pod, nodeName string) \*Status

    RunBindPlugins(ctx context.Context, state \*CycleState, pod \*v1.Pod, nodeName string) \*Status

    RunPostBindPlugins(ctx context.Context, state \*CycleState, pod \*v1.Pod, nodeName string)

    // ... 其他扩展点

}

内置插件注册

内置插件在 pkg/scheduler/framework/plugins/registry.go 中注册,包括:

  • 队列排序插件:queuesort、prioritysort

  • 过滤插件:noderesources、nodeaffinity、tainttoleration

  • 评分插件:noderesources、imagelocality、interpodaffinity、podtopologyspread

4.4 节点亲和性与反亲和性

节点亲和性和反亲和性是 Kubernetes 调度器实现 高级拓扑约束 的重要机制。

节点亲和性实现

节点亲和性通过 pkg/scheduler/framework/plugins/nodeaffinity 包实现,核心过滤函数是 Filter

func (pl \*NodeAffinity) Filter(ctx context.Context, state \*framework.CycleState, pod \*v1.Pod, nodeInfo \*framework.NodeInfo) \*framework.Status {

    node := nodeInfo.Node()

    if pod.Spec.Affinity != nil && pod.Spec.Affinity.NodeAffinity != nil {

        nodeAffinity := pod.Spec.Affinity.NodeAffinity

        

        // 检查硬性要求

        if nodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution != nil {

            terms := nodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms

            if !v1helper.MatchNodeSelectorTerms(node, terms) {

                return framework.NewStatus(framework.UnschedulableAndUnresolvable, "node(s) didn't match node selector")

            }

        }

        

        // 检查软性要求(影响评分)

        // ...

    }

    return framework.NewStatus(framework.Success)

}

Pod 间亲和性 / 反亲和性

Pod 间亲和性通过 pkg/scheduler/framework/plugins/interpodaffinity 包实现,支持复杂的拓扑约束:

func (pl \*InterPodAffinity) Filter(ctx context.Context, state \*framework.CycleState, pod \*v1.Pod, nodeInfo \*framework.NodeInfo) \*framework.Status {

    node := nodeInfo.Node()

    

    // 检查反亲和性

    if !satisfyPodAntiAffinity(pod, nodeInfo, pl) {

        return framework.NewStatus(framework.Unschedulable, "node(s) didn't satisfy pod anti-affinity")

    }

    

    // 检查亲和性

    if !satisfyPodAffinity(pod, nodeInfo, pl) {

        return framework.NewStatus(framework.Unschedulable, "node(s) didn't satisfy pod affinity")

    }

    

    return framework.NewStatus(framework.Success)

}

4.5 调度队列管理

调度器使用 多级优先级队列 管理待调度的 Pod,确保高优先级 Pod 优先调度。队列实现位于 pkg/scheduler/internal/queue/scheduling_queue.go

队列管理特性

  1. 优先级排序:基于 Pod 的 PriorityClass 值排序

  2. 退避机制:调度失败的 Pod 会进入退避队列,避免频繁重试

  3. 不可调度处理:暂时无法调度的 Pod 单独存储

  4. 事件触发:节点资源变化时重新评估不可调度 Pod

队列使用 Go 语言的 container/heap 包实现最小堆结构,确保每次取出的都是优先级最高的 Pod。

五、Controller Manager 源码深度解析

5.1 控制器模式实现

Controller Manager 是一个 永不停息的控制回路组件,负责控制集群资源的状态。通过监控 kube-apiserver 的资源状态,比较当前资源状态和期望状态,如果不一致,更新 kube-apiserver 的资源状态以保持两者一致(151)

控制器模式核心原理

每个资源都有相应的控制器(Controller)来实现这个控制循环,比如管理节点资源的 NodeController,管理 Deployment 的 DeploymentController。kube-controller-manager 的主要职责就是启动和管理这些 Controller(150)

控制器模式基于 Informer/Reflector + 控制循环 的架构:

  • Informer 机制:通过 Reflector 监听 API Server 的资源变化

  • Delta FIFO 队列:存储待处理对象

  • WorkQueue:存储所有待处理对象的 key

  • 控制循环:不断从队列中取出对象进行处理

5.2 工作队列机制

WorkQueue 是控制器实现的核心组件,位于 client-go/util/workqueue 包中,支持延迟队列、定时队列和速率限制队列(157)

工作队列类型

  1. 普通队列:FIFO 队列,先进先出

  2. 延迟队列:支持延迟处理

  3. 定时队列:支持定时处理

  4. 速率限制队列:限制处理频率

以 Deployment Controller 为例,其工作队列初始化代码:

queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "deployment"),

5.3 各类控制器实现

Controller Manager 包含多种控制器,每种控制器负责特定资源的状态管理。以下是主要控制器的实现分析:

ReplicaSet 控制器

ReplicaSet 控制器的核心逻辑位于 pkg/controller/replicaset/replica_set.go,其 syncReplicaSet 函数实现了控制循环:

func (rsc \*ReplicaSetController) syncReplicaSet(ctx context.Context, key string) error {

    namespace, name, err := cache.SplitMetaNamespaceKey(key)

    if err != nil {

        return err

    }

    

    // 获取 ReplicaSet 对象

    rs, err := rsc.rsLister.ReplicaSets(namespace).Get(name)

    if apierrors.IsNotFound(err) {

        return nil

    }

    if err != nil {

        return err

    }

    

    // 获取所有 Pod

    allPods, err := rsc.podLister.Pods(rs.Namespace).List(labels.Everything())

    if err != nil {

        return err

    }

    

    // 过滤活跃的 Pod

    filteredPods := controller.FilterActivePods(klog.FromContext(ctx), allPods)

    

    // 获取属于该 ReplicaSet 的 Pod

    selector, err := metav1.LabelSelectorAsSelector(rs.Spec.Selector)

    if err != nil {

        return err

    }

    filteredPods, err = rsc.claimPods(ctx, rs, selector, filteredPods)

    if err != nil {

        return err

    }

    

    // 管理副本数

    if rsNeedsSync && rs.DeletionTimestamp == nil {

        if err := rsc.manageReplicas(ctx, filteredPods, rs); err != nil {

            return err

        }

    }

    

    // 更新状态

    newStatus := calculateStatus(rs, filteredPods, manageReplicasErr)

    if \_, err := updateReplicaSetStatus(klog.FromContext(ctx), rsc.kubeClient.AppsV1().ReplicaSets(rs.Namespace), rs, newStatus); err != nil {

        return err

    }

    

    return nil

}

Deployment 控制器

Deployment 控制器通过 Informer 监听 Deployment 对象的增删改,当发现新的 Deployment 创建时,将其加入工作队列,控制器的 worker 从队列取出任务并执行同步操作(155)

5.4 控制器协调机制

Controller Manager 实现了 Leader Election(领导者选举) 机制,确保在多副本部署时只有一个实例处于活动状态。

Leader Election 核心逻辑

func Run(ctx context.Context, c \*config.CompletedConfig) error {

    // ... 省略其他代码

    

    if !c.ComponentConfig.Generic.LeaderElection.LeaderElect {

        // 无 Leader Election,直接运行

        controllerDescriptors := NewControllerDescriptors()

        controllerDescriptors[names.ServiceAccountTokenController] = saTokenControllerDescriptor

        run(ctx, controllerDescriptors)

        return nil

    }

    

    // 启动 Leader Election

    leaderElector, err := leaderelection.NewLeaderElector(leaderelection.LeaderElectionConfig{

        Lock:          c.ClientBuilder.ClientOrDie("leader-election").CoreV1().Endpoints(metav1.NamespaceSystem),

        LeaseDuration: c.ComponentConfig.Generic.LeaderElection.LeaseDuration.Duration,

        RenewDeadline: c.ComponentConfig.Generic.LeaderElection.RenewDeadline.Duration,

        RetryPeriod:   c.ComponentConfig.Generic.LeaderElection.RetryPeriod.Duration,

        Callbacks: leaderelection.LeaderCallbacks{

            OnStartedLeading: func(ctx context.Context) {

                run(ctx, NewControllerDescriptors())

            },

            OnStoppedLeading: func() {

                klog.Fatalf("leaderelection lost")

            },

        },

    })

    

    leaderElector.Run(ctx)

    return nil

}

六、Kubelet 源码深度解析

6.1 Kubelet 架构与启动流程

Kubelet 是运行在每个节点上的主要 “节点代理”,负责处理 Master 节点下发到本节点的任务,按照 PodSpec 描述来管理 Pod 和其中的容器(72)

Kubelet 启动流程

Kubelet 的启动流程分为多个阶段,核心源码位于 cmd/kubelet/kubelet.go

  1. 初始化阶段
func main() {

    rand.Seed(time.Now().UnixNano())

    

    // 创建 Kubelet 命令

    command := app.NewKubeletCommand()

    

    // 初始化日志

    logs.InitLogs()

    defer logs.FlushLogs()

    

    // 执行命令

    if err := command.Execute(); err != nil {

        os.Exit(1)

    }

}
  1. 组件初始化
  • 初始化各种管理器(容器管理器、资源管理器、卷管理器等)

  • 启动健康检查器

  • 启动证书管理器

  • 启动 OOM Watcher

  1. 主循环启动

    Kubelet 启动后进入一个永不停止的控制循环,持续监听 API Server 的 Pod 变化,执行 Pod 的创建、更新和删除操作。

6.2 Pod 生命周期管理

Kubelet 的核心职责是管理节点上 Pod 的完整生命周期,包括创建、运行、监控和销毁。

Pod 同步循环

Kubelet 的主循环是一个无限循环,不断同步节点上的 Pod 状态:

func (kl \*Kubelet) Run(updates <-chan kubetypes.PodUpdate) {

    // ... 省略初始化代码

    

    // 进入主循环

    for {

        select {

        case u, open := <-updates:

            if !open {

                updates = nil

            } else {

                kl.syncUp(u)

            }

            

        // 处理其他事件

        case <-kl.livenessManager.Healthy():

            kl.syncNodeStatus()

            

        // 定时同步

        case <-kl.statusUpdateCh:

            kl.updateNodeStatus()

            

        // 其他 case...

        }

    }

}

6.3 容器运行时接口(CRI)

Kubelet 通过 容器运行时接口(CRI) 与底层容器运行时(如 Docker、containerd)交互。CRI 定义了容器和镜像管理的标准接口。

CRI 接口定义

type RuntimeService interface {

    RunPodSandbox(ctx context.Context, req \*runtimeapi.RunPodSandboxRequest) (\*runtimeapi.RunPodSandboxResponse, error)

    StopPodSandbox(ctx context.Context, req \*runtimeapi.StopPodSandboxRequest) (\*runtimeapi.StopPodSandboxResponse, error)

    RemovePodSandbox(ctx context.Context, req \*runtimeapi.RemovePodSandboxRequest) (\*runtimeapi.RemovePodSandboxResponse, error)

    // ... 其他方法

}

type ImageService interface {

    PullImage(ctx context.Context, req \*runtimeapi.PullImageRequest) (\*runtimeapi.PullImageResponse, error)

    RemoveImage(ctx context.Context, req \*runtimeapi.RemoveImageRequest) (\*runtimeapi.RemoveImageResponse, error)

    // ... 其他方法

}

Kubelet 通过 pkg/kubelet/dockershim 包与 Docker 运行时交互,通过 pkg/kubelet/cri 包与其他 CRI 兼容的运行时交互。

6.4 健康检查机制

Kubelet 实现了完善的 健康检查机制,包括:

  1. 容器健康检查:通过探针(Probe)机制

  2. 节点健康检查:定期向 API Server 上报节点状态

  3. Kubelet 自身健康检查:通过 HTTP 端点提供健康状态

容器探针机制

Kubelet 支持三种类型的探针:

  • 存活探针(Liveness Probe):判断容器是否存活,失败时重启容器

  • 就绪探针(Readiness Probe):判断容器是否准备好接收流量

  • 启动探针(Startup Probe):判断容器是否已经启动完成

探针的执行通过 pkg/kubelet/prober 包实现,支持 HTTP、TCP 和 Exec 三种探测方式。

6.5 节点状态管理

Kubelet 负责维护节点的状态信息,并定期向 API Server 上报。节点状态包括:

节点状态字段

  1. 基本信息:节点名称、操作系统、内核版本、容器运行时版本

  2. 资源信息:CPU、内存、存储容量

  3. 地址信息:IP 地址、主机名

  4. 条件状态:Ready、MemoryPressure、DiskPressure、PIDPressure、NetworkUnavailable

  5. 容量和可分配资源:节点总容量和可分配给 Pod 的资源

节点状态更新通过 kl.updateNodeStatus() 方法实现,该方法会定期调用(默认 10 秒),将节点状态同步到 API Server。

七、网络策略源码深度解析

7.1 网络插件机制

Kubernetes 的网络模型基于 CNI(Container Network Interface)插件 机制,支持多种网络实现方案。CNI 插件负责为容器分配网络接口和 IP 地址,实现容器间的网络通信。

CNI 插件接口定义

CNI 插件需要实现以下基本接口:

type CNI interface {

    AddNetworkList(ctx context.Context, netList \*NetworkConfigList, rt RuntimeConf) (types.Result, error)

    DelNetworkList(ctx context.Context, netList \*NetworkConfigList, rt RuntimeConf) error

}

Kubernetes 通过 pkg/kubelet/dockershim/network 包与 CNI 插件交互,具体实现位于 pkg/kubelet/network/cni 包。

7.2 网络策略控制器

网络策略通过 NetworkPolicy 对象定义,网络策略控制器负责实现网络流量的安全控制。网络策略的核心逻辑位于 pkg/controller/networkpolicy 包。

网络策略实现原理

  1. 网络策略定义:通过标签选择器定义作用范围

  2. 规则匹配:基于协议、端口、源 / 目标地址匹配

  3. 隔离机制:通过 iptables 或 IPVS 规则实现隔离

网络策略控制器通过 Informer 监听 NetworkPolicy 对象的变化,并通过 Controller 模式实现网络规则的同步。

7.3 服务发现与负载均衡

Kubernetes Service 提供了服务发现和负载均衡功能,其实现涉及多个组件:

Service 实现组件

  1. kube-proxy:运行在每个节点上,负责 Service 的本地实现

  2. kube-dns/coredns:提供 DNS 服务发现

  3. ingress controller:提供七层负载均衡

kube-proxy 工作模式

kube-proxy 支持三种工作模式:

  1. userspace 模式:通过用户态代理实现

  2. iptables 模式:通过 iptables 规则实现

  3. ipvs 模式:通过 IPVS 实现(推荐模式)

ipvs 模式的实现位于 pkg/proxy/ipvs 包,具有更好的性能和扩展性。

7.4 网络流量控制

Kubernetes 通过多种机制实现网络流量的控制和管理:

流量控制机制

  1. NetworkPolicy:基于策略的网络隔离

  2. Pod 亲和性 / 反亲和性:控制 Pod 的网络拓扑分布

  3. Service 负载均衡:流量分发

  4. Ingress:七层流量路由

Ingress 资源的实现位于 staging/src/``k8s.io/ingress-nginx/ 等 ingress controller 仓库,通过 Ingress 对象定义 HTTP/HTTPS 路由规则。

八、存储管理源码深度解析

8.1 存储卷管理机制

Kubernetes 的存储卷管理基于 插件化架构,支持多种存储后端。存储卷的核心逻辑位于 pkg/volume 包。

存储卷类型

  1. 临时卷:EmptyDir、HostPath

  2. 持久卷:GCEPersistentDisk、AWSElasticBlockStore、NFS、Ceph、GlusterFS 等

  3. 云存储:AzureDisk、AzureFile、CSI 等

  4. 特殊卷:ConfigMap、Secret、DownwardAPI

每种存储卷类型都有对应的插件实现,通过统一的接口与 Kubelet 交互。

8.2 PV/PVC 实现机制

PV(PersistentVolume)和 PVC(PersistentVolumeClaim) 是 Kubernetes 存储管理的核心抽象,实现了存储资源的声明和绑定。

PV/PVC 控制器

PV/PVC 的控制逻辑位于 pkg/controller/volume/persistentvolume 包,包括:

  1. PersistentVolumeController:管理 PV 的生命周期

  2. PersistentVolumeClaimController:管理 PVC 的生命周期

  3. VolumeBinder:负责 PV 和 PVC 的绑定

PV 绑定逻辑

PV 与 PVC 的绑定通过 volume.Sync 方法实现,该方法会尝试为 PVC 找到匹配的 PV:

func (b \*PersistentVolumeBinder) Sync(ctx context.Context, claim \*v1.PersistentVolumeClaim) error {

    // 获取所有可用的 PV

    volumes, err := b.pvLister.List(labels.Everything())

    if err != nil {

        return err

    }

    

    // 过滤出可用的 PV

    availableVolumes := filterAvailableVolumes(volumes)

    

    // 尝试绑定

    for \_, volume := range availableVolumes {

        if b.matchVolumeAndClaim(volume, claim) {

            // 执行绑定操作

            if err := b.bindVolume(ctx, volume, claim); err != nil {

                return err

            }

            return nil

        }

    }

    

    return nil

}

8.3 存储插件接口

Kubernetes 支持多种存储插件接口,包括:

CSI(Container Storage Interface)插件

CSI 是容器存储接口标准,Kubernetes 通过 CSI 接口支持各种存储系统。CSI 插件的实现位于 staging/src/``k8s.io/csi-api/ 包。

CSI 插件接口定义

type IdentityServer interface {

    GetPluginInfo(context.Context, \*GetPluginInfoRequest) (\*GetPluginInfoResponse, error)

    GetPluginCapabilities(context.Context, \*GetPluginCapabilitiesRequest) (\*GetPluginCapabilitiesResponse, error)

    Probe(context.Context, \*ProbeRequest) (\*ProbeResponse, error)

}

type ControllerServer interface {

    CreateVolume(context.Context, \*CreateVolumeRequest) (\*CreateVolumeResponse, error)

    DeleteVolume(context.Context, \*DeleteVolumeRequest) (\*DeleteVolumeResponse, error)

    ControllerPublishVolume(context.Context, \*ControllerPublishVolumeRequest) (\*ControllerPublishVolumeResponse, error)

    // ... 其他方法

}

type NodeServer interface {

    NodePublishVolume(context.Context, \*NodePublishVolumeRequest) (\*NodePublishVolumeResponse, error)

    NodeUnpublishVolume(context.Context, \*NodeUnpublishVolumeRequest) (\*NodeUnpublishVolumeResponse, error)

    // ... 其他方法

}

8.4 存储卷挂载流程

存储卷的挂载流程涉及多个组件的协作,主要流程如下:

存储卷挂载步骤

  1. PVC 绑定:PVC 与 PV 完成绑定

  2. Volume 准备:Kubelet 调用存储插件准备 Volume

  3. 节点阶段(Node Stage):在节点上准备 Volume(CSI 特有)

  4. 挂载阶段(Mount):将 Volume 挂载到 Pod 的挂载点

  5. 容器挂载:将 Volume 挂载到容器中

存储卷挂载的核心逻辑位于 pkg/kubelet/volume/util 包,通过 MountVolume 函数实现。

九、深入机制分析

9.1 client-go 库的使用

client-go 是 Kubernetes 官方的 Go 语言客户端库,提供了与 Kubernetes API 交互的各种工具和机制。client-go 的核心组件包括:

核心组件

  1. REST Client:直接与 Kubernetes API 交互的 HTTP 客户端

  2. Informers:提供资源对象的本地缓存和变更通知

  3. Listers:提供只读的缓存访问接口

  4. Workqueue:提供各种类型的工作队列

  5. Rate Limiter:提供速率限制功能

Informers 机制

Informers 是 client-go 中最重要的机制之一,它通过 List-Watch 机制实现资源的实时同步。Informer 的工作流程:

  1. 通过 List API 获取资源列表

  2. 通过 Watch API 监听资源变化

  3. 将资源存储在本地缓存(Delta FIFO)

  4. 触发事件处理函数

9.2 Informers 机制实现

Informers 机制的核心实现位于 staging/src/``k8s.io/client-go/informers 包,其架构设计如下:

Informer 架构组件

  1. Reflector:负责从 API Server 获取资源变更

  2. Delta FIFO:存储资源变更事件

  3. Indexer:提供资源的索引和查询功能

  4. EventHandler:处理资源变更事件

Reflector 实现

Reflector 通过 ListAndWatch 方法实现资源的同步:

func (r \*Reflector) ListAndWatch(ctx context.Context) error {

    // 执行 List 操作

    list, err := r.listFunc()

    if err != nil {

        return err

    }

    

    // 执行 Watch 操作

    watcher, err := r.watchFunc(list.GetResourceVersion())

    if err != nil {

        return err

    }

    

    // 处理 Watch 事件

    for {

        select {

        case event, ok := <-watcher.ResultChan():

            if !ok {

                return nil

            }

            

            // 处理事件

            r.processEvent(event)

        case <-ctx.Done():

            return ctx.Err()

        }

    }

}

9.3 工作队列设计模式

工作队列是 Kubernetes 控制器实现的核心模式,client-go 提供了多种工作队列实现。

工作队列模式

  1. 生产者 - 消费者模式:多个生产者将任务放入队列,多个消费者从队列取出任务处理

  2. 速率限制模式:限制任务的处理频率,避免系统过载

  3. 延迟重试模式:失败的任务延迟后重试

  4. 优先级队列模式:根据任务优先级决定处理顺序

9.4 controller-runtime 框架

controller-runtime 是 Kubernetes 社区提供的现代化控制器开发框架,简化了控制器的开发流程。它提供了:

核心功能

  1. Controller 抽象:简化控制器的创建

  2. Informer 管理:自动管理 Informer 的生命周期

  3. Reconciler 模式:定义统一的 Reconcile 方法

  4. 事件过滤:支持基于事件类型和对象元数据的过滤

  5. Leader Election:内置 Leader Election 支持

controller-runtime 的使用示例:

import (

    "context"

    

    ctrl "sigs.k8s.io/controller-runtime"

    "sigs.k8s.io/controller-runtime/pkg/builder"

    "sigs.k8s.io/controller-runtime/pkg/controller"

    "sigs.k8s.io/controller-runtime/pkg/event"

    "sigs.k8s.io/controller-runtime/pkg/handler"

    "sigs.k8s.io/controller-runtime/pkg/reconcile"

)

type MyReconciler struct {

    client.Client

    Scheme \*runtime.Scheme

}

func (r \*MyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {

    // 实现 Reconcile 逻辑

    return ctrl.Result{}, nil

}

func main() {

    // 创建控制器

    mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{

        Scheme: scheme,

    })

    if err != nil {

        log.Fatal(err)

    }

    

    // 注册控制器

    if err := ctrl.NewControllerManagedBy(mgr).

        For(\&appsv1.Deployment{}).

        Complete(\&MyReconciler{Client: mgr.GetClient(), Scheme: mgr.GetScheme()}); err != nil {

        log.Fatal(err)

    }

    

    // 启动管理器

    if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {

        log.Fatal(err)

    }

}

十、实践建议与学习路径

10.1 环境搭建最佳实践

基于前述分析,以下是 Kubernetes 源码学习和开发的环境搭建最佳实践:

推荐环境配置

  1. 操作系统:Ubuntu 20.04 LTS 或更高版本(推荐)

  2. 硬件配置:至少 8GB 内存、4 核 CPU、50GB 存储空间

  3. Go 版本:Go 1.25.7(与 Kubernetes 1.35 版本匹配)

  4. Docker 配置:确保 Docker 版本 >= 20.10,启用 buildx 插件

源码获取建议

  1. 使用 SSH 克隆以获得更好的性能:git clone ``git@github.com``:kubernetes/kubernetes.git

  2. 切换到指定版本:git checkout release-1.35

  3. 配置 Git 用户名和邮箱:

git config --global user.name "Your Name"

git config --global user.email "your.email@example.com"

开发工具推荐

  1. IDE:Visual Studio Code(推荐)或 GoLand

  2. 插件:Go 语言插件、GitLens、Markdown 预览

  3. 调试工具:Delve(Go 调试器)

  4. 性能分析:pprof、trace

10.2 源码阅读方法

Kubernetes 源码庞大而复杂,采用系统性的阅读方法至关重要:

分层阅读策略

  1. 整体架构层:先理解各组件的职责和交互

  2. 核心组件层:深入学习 API Server、Scheduler、Controller Manager、Kubelet

  3. 功能模块层:学习特定功能的实现(如 Pod 调度、服务发现)

  4. 基础库层:学习 client-go、controller-runtime 等基础库

代码导航技巧

  1. 从 main 函数开始:每个组件都有明确的入口

  2. 使用 IDE 导航:利用 Go to Definition、Find References 等功能

  3. 关注注释:Kubernetes 源码有丰富的注释

  4. 查看测试用例:测试代码往往是理解功能的最佳途径

10.3 调试技巧

调试是理解源码的重要手段,以下是常用调试技巧:

断点调试

  1. 在关键函数入口设置断点

  2. 使用条件断点过滤特定场景

  3. 调试表达式查看变量值

  4. 单步调试跟踪执行流程

日志调试

  1. 增加调试日志:使用 klog.V(4).Info() 等分级日志

  2. 查看组件日志:kubectl logs <pod-name> -n kube-system

  3. 启用详细日志:通过命令行参数 --v=4 或更高

性能分析

  1. CPU 分析go tool pprof -alloc_space ``http://localhost:6060/debug/pprof/profile

  2. 内存分析go tool pprof -inuse_space ``http://localhost:6060/debug/pprof/heap

  3. trace 分析go tool trace trace.out

10.4 贡献指南

参与 Kubernetes 开源社区是深入学习的最佳方式:

贡献流程

  1. Issue 认领:从 “good first issue” 标签开始

  2. 分支创建:基于 release-1.35 分支创建功能分支

  3. 代码编写:遵循 Kubernetes 编码规范

  4. 测试编写:为新增功能编写单元测试和集成测试

  5. Pull Request:提交 PR 并等待 review

编码规范

  1. Go 语言规范:遵循官方 Go 语言规范

  2. Kubernetes 特定规范

  • 使用 klog 包进行日志记录

  • 使用 client-go 进行 API 操作

  • 遵循 controller-runtime 的 Reconciler 模式

  • 编写 godoc 注释

社区资源

  1. 邮件列表:kubernetes-dev@googlegroups.com

  2. Slack:#sig-api-machinery、#sig-scheduling 等频道

  3. GitHubhttps://github.com/kubernetes/kubernetes

  4. 文档https://kubernetes.io/docs/home/

10.5 推荐学习资源

官方文档

  1. Kubernetes 官方文档

  2. Kubernetes 设计文档

  3. Kubernetes API 参考

源码相关资源

  1. Kubernetes 源码仓库

  2. client-go 文档

  3. controller-runtime 文档

实战项目推荐

  1. Minikube:本地 Kubernetes 集群

  2. Kind:Kubernetes in Docker

  3. Kubeadm:Kubernetes 集群部署工具

  4. Operator SDK:用于开发 Kubernetes Operators

结语

通过对 Kubernetes 源码的全面解析,我们深入理解了这个云原生编排系统的架构设计和实现原理。从 API Server 的 RESTful 接口实现,到 Scheduler 的智能调度算法,从 Controller Manager 的状态协调机制,到 Kubelet 的节点管理功能,每个组件都体现了分布式系统设计的精妙之处。

Kubernetes 的成功不仅在于其功能的强大,更在于其 模块化和插件化的设计理念。通过深入学习源码,我们掌握了 client-go 的使用、Informer 机制、工作队列模式、controller-runtime 框架等核心技术,这些都是构建现代云原生应用的必备技能。

展望未来,随着云原生技术的不断发展,Kubernetes 将继续演进和完善。建议读者持续关注官方发布的新版本,学习新特性的实现原理,并积极参与开源社区的贡献。通过不断的实践和学习,最终成为云原生领域的技术专家,为推动云原生技术的发展贡献力量。

**参考资料 **

[1] 发行版本 | Kubernetes https://kubernetes.io/zh-cn/releases/

[2] k8s1.35.1二进制部署 https://blog.csdn.net/peng_s_w/article/details/158069753

[3] Kubernetes v1.35版本发布,十大重点确定性更新,v1.31版本停止维护Kubernetes v1.35版本 - 掘金 https://juejin.cn/post/7585289701793742874

[4] [x-cmd] Kubernetes v1.35 发布:Kubelet 配置 Drop-in 目录正式进入 GA-CSDN博客 https://x-cmd.blog.csdn.net/article/details/157900852

[5] Azure Kubernetes Service (AKS) 中支援的 Kubernetes 版本。 - Azure Kubernetes Service | Microsoft Learn https://learn.microsoft.com/zh-tw/azure/aks/supported-kubernetes-versions?source=recommendations

[6] Amazon EKS 和 Amazon EKS Distro 现在支持 Kubernetes 版本 1.35 https://www.amazonaws.cn/new/2026/amazon-eks-and-amazon-eks-distro-supports-kubernetes-version-1-35/

[7] 一、注意事项 | 👋运维锻造,知识沉淀 http://opforge.srebro.cn/cloud-native/kubernetes/05.html

[8] 查看 Kubernetes 版本延期支持的发布说明 - Amazon EKS https://docs.amazonaws.cn/zh_cn/eks/latest/userguide/kubernetes-versions-extended.html

[9] Supported Kubernetes versions in Azure Kubernetes Service (AKS) https://learn.microsoft.com/el-gr/azure/aks/supported-kubernetes-versions?view=azureml-api-1

[10] Review release notes for Kubernetes versions on extended support https://docs.aws.amazon.com/en_en/eks/latest/userguide/kubernetes-versions-extended.html

[11] Container Compute Service:Kubernetes 1.30 release notes https://www.alibabacloud.com/help/en/cs/acs-releases-kubernetes-1-30-release-notes

[12] Kubernetes version 1.30 is now available in IBM Cloud Kubernetes Service https://community.ibm.com/community/user/cloud/blogs/elvin-galarza/2024/05/31/kubernetes-version-130-now-available-in-ibm-cloud

[13] Kubernetes v1.30: Uwubernetes https://kubernetes.io/blog/2024/04/17/kubernetes-v1-30-release/

[14] Kubernetes 1.29 Release Notes https://support.huaweicloud.com/eu/bulletin-cce/cce_bulletin_0089.html

[15] Building Kubernetes https://github.com/kubernetes/kubernetes/blob/master/build/README.md

[16] Kubernetes (K8s) https://github.com/kubernetes/kubernetes

[17] 搭建 Kubernetes 源码编译环境 · atompi https://atompi.com/posts/kubernetes-dev-env/

[18] k8s 组件编译 https://github.com/bmwx4/k8s-in-practice/blob/master/tasks/k8s-compile.md

[19] CentOS7.2中使用Kubernetes(k8s)1.4.6源码搭建k8s容器集群环境-CSDN博客 https://blog.csdn.net/yu_jinyu/article/details/53292399

[20] Kubernetes herunterladen https://kubernetes.io/de/docs/setup/release/_print/

[21] Descargando Kubernetes https://kubernetes.io/es/docs/setup/release/_print/

[22] 1. 使用 vs-code 来阅读源码_vscode查看库源码-CSDN博客 https://blog.csdn.net/qq_32468785/article/details/136330197

[23] Go 1.25.5 通关讲解Go 1.25.5 通关讲解 作者:吴佳浩 最后更新:2025-12-24 适用版本:gol - 掘金 https://juejin.cn/post/7586939930155401259

[24] kubernetes:源码编译-CSDN博客 https://blog.csdn.net/textdemo123/article/details/106262119

[25] 编译打包-kubesphere/kubekey - GitHub说明 对kubesphere/kubekey - Git - 掘金 https://juejin.cn/post/7592524811860656162

[26] setup-envtest@latest requires golang >=1.25.0? #3358 https://github.com/kubernetes-sigs/controller-runtime/issues/3358

[27] Kubernetes源码编译-CSDN博客 https://blog.csdn.net/weixin_33912246/article/details/91427602

[28] 讲解 Kubernetes 源码_kubernetes 源码剖析与实战-CSDN博客 https://blog.csdn.net/u011091936/article/details/150841027

[29] Deep Dive into Kubernetes Source Code https://collabnix.com/deep-dive-into-kubernetes-source-code/

[30] Learning Large-Scale Go Project Architecture from Kubernetes | Leapcell https://leapcell.io/blog/learning-large-scale-go-project-architecture-from-kubernetes

[31] Examination of a High Quality Repository: Kubernetes · CankutER/SWE-573 Wiki · GitHub https://github.com/CankutER/SWE-573/wiki/Examination-of-a-High-Quality-Repository:-Kubernetes

[32] Kubernetes - Source Code https://www.hackingnote.com/en/kubernetes/source-code/

[33] Let’s Talk About the Kubernetes Source Code https://dev.to/kubefeeds/lets-talk-about-the-kubernetes-source-code-14d3

[34] Kubernertes源码结构分析_kubenetes源码-CSDN博客 https://blog.csdn.net/maxiaorong92/article/details/107619222

[35] k8s源码分析——kubectl主要框架_kubernetes的源码中有main吗-CSDN博客 https://blog.csdn.net/cbmljs/article/details/102568433

[36] 《深入理解Kubernetes》源码阅读方法与实践指南 https://www.iesdouyin.com/share/note/7416550563069873447/?region=&mid=6881996450729822215&u_code=0&did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&video_share_track_ver=&titleType=title&schema_type=37&share_sign=94tLphsNvzdftP1BtQjiOWnhVkLpmQW0Z.lHY9LXs_U-&share_version=280700&ts=1772204483&from_aid=1128&from_ssr=1&share_track_info=%7B%22link_description_type%22%3A%22%22%7D

[37] K8S kube-apiserver 源码层次分析 https://github.com/DavadDi/go_study/blob/master/kube-apiserver.md

[38] k8s api-server源码阅读简易摘要对 Kubernetes 的 API Server 进行详细的源代码分析是一 - 掘金 https://juejin.cn/post/7394272287430541324

[39] kubernetes 源码分析_mb62678baacf737的技术博客_51CTO博客 https://blog.51cto.com/u_15616991/9375619

[40] Kubernetes kubelet 源码架构及启动流程深入剖析-Kubernetes商业环境实战 https://juejin.cn/post/6844903924139294733

[41] Kubernetes 1.35 Released with In-Place Pod Resize and AI-Optimized Scheduling https://www.infoq.com/news/2025/12/kubernetes-1-35/

[42] Amazon EKS and Amazon EKS Distro now supports Kubernetes version 1.35 https://aws.amazon.com/about-aws/whats-new/2026/01/amazon-eks-distro-kubernetes-version-1-35/

[43] Kubernetes 1.33 “Octarine” Released: Native Sidecars and In-Place Pod Resizing https://www.infoq.com/news/2025/04/kubernetes-octarine-release/

[44] Kubernetes 1.35: In-Place Pod Resize is GA Scale Vertically Without Restarting https://www.webnuz.com/article/2026-01-06/Kubernetes%201.35:%20In-Place%20Pod%20Resize%20is%20GA%20%20Scale%20Vertically%20Without%20Restarting

[45] Kubernetes 1.33: Native Sidecars are here, plus Big Security Boost with User Namespaces https://tfir.io/kubernetes-1-33-native-sidecars-are-here-plus-big-security-boost-with-user-namespaces/

[46] Kubernetes v1.34: What’s New and Improved? https://www.perfectscale.io/blog/kubernetes-v1-34-release

[47] Amazon EKS and Amazon EKS Distro now supports Kubernetes version 1.34 https://www.amazonaws.cn/en/new/2025/amazon-eks-and-eks-distro-supports-kubernetes-version-1-34/

[48] Kubernetes v1.35:Timbernetes(世界树版本) | Kubernetes https://kubernetes.io/zh-cn/blog/2025/12/17/kubernetes-v1-35-release/

[49] Kubernetes v1.35 Timbernetes(世界树) 来了!垂直扩容、KYAML 优化、废弃 cgroup v1 和 ipvs,更稳定、更安全、更易运维-CSDN博客 https://mingongge.blog.csdn.net/article/details/156403263

[50] Kubernetes 1.35 “世界树“版本深度解析:从GA到Alpha的实战指南-CSDN博客 https://blog.csdn.net/qq_39965541/article/details/157993045

[51] Kubernetes v1.35 Deep Dive: In-Place Resize GA, Gang Scheduling & the Cgroup v2 Cliff https://scaleops.com/blog/kubernetes-1-35-release-overview/

[52] Kubernetes v1.35: Timbernetes (The World Tree Release) https://kubernetes.io/blog/2025/12/17/kubernetes-v1-35-release/

[53] Kubernetes 1.35: In-Place Pod Resize Graduates to Stable https://kubernetes.io/blog/2025/12/19/kubernetes-v1-35-in-place-pod-resize-ga/

[54] Cluster Architecture https://kubernetes.io/docs/concepts/architecture/_print/

[55] Kubernetes Components | Kubernetes https://kubernetes.io/docs/concepts/overview/components/

[56] Kubernetesのコンポーネント https://kubernetes.io/ja/docs/concepts/overview/components/

[57] Компоненты Kubernetes https://kubernetes.io/ru/docs/concepts/overview/components/

[58] Architecture du cluster | Kubernetes https://kubernetes.io/fr/docs/concepts/architecture/

[59] Componentes de Kubernetes | Kubernetes https://kubernetes.io/es/docs/concepts/overview/components/

[60] I componenti di Kubernetes https://kubernetes.io/it/docs/concepts/overview/components/

[61] Kubernetes 架构 | Kubernetes https://kubernetes.io/zh/docs/concepts/architecture/

[62] Kubernetes 集群架构概述_kubernetes组件详细介绍-CSDN博客 https://blog.csdn.net/JHXXH/article/details/158010607

[63] Kubernetes架构简介_mob6454cc67554d的技术博客_51CTO博客 https://blog.51cto.com/u_16099206/14381119

[64] Kubernetes架构核心组件与工作机制解析 https://www.iesdouyin.com/share/video/7571111203041299747/?region=&mid=7571111198647290676&u_code=0&did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&video_share_track_ver=&titleType=title&share_sign=6506r0Q5uYtgq7DbH4mofKtbzR.Eu9M0RuZQ4j2b1Uo-&share_version=280700&ts=1772204512&from_aid=1128&from_ssr=1&share_track_info=%7B%22link_description_type%22%3A%22%22%7D

[65] 深入解析 Kubernetes 核心架构与工作原理-CSDN博客 https://blog.csdn.net/qq_21886255/article/details/153337814

[66] Kubernetes集群架构与核心组件详解_51CTO学堂_专业的IT技能学习平台 https://edu.51cto.com/article/note/20707.html

[67] 第2章:Kubernetes核心概念大白话Kubernetes的架构虽然复杂,但它的设计思想很直观 - 就像管理一个高效 - 掘金 https://juejin.cn/post/7565268465708384296

[68] 万字长文:Kubernetes 创建 Pod 时,背后到底发生了什么?-CSDN博客 https://blog.csdn.net/easylife206/article/details/119121886

[69] Kubernetes kubelet 源码架构及启动流程深入剖析-Kubernetes商业环境实战 https://juejin.cn/post/6844903924139294733

[70] kube-galaxy-test/src/kube_galaxy/pkg/components/_base.py at e5f3efa37afcf78bc9731fccb38cc51d9faa384c · canonical/kube-galaxy-test · GitHub https://github.com/canonical/kube-galaxy-test/blob/e5f3efa37afcf78bc9731fccb38cc51d9faa384c/src/kube_galaxy/pkg/components/_base.py

[71] 【kubernetes/k8s源码分析】ingress-nginx 源码解析_listingress-CSDN博客 https://blog.csdn.net/zhonglinzhang/article/details/81014693

[72] k8s源码解析之kubelet启动主流程 https://www.cnblogs.com/ltaodream/p/16817143.html

[73] k8s源码解析之kube-scheduler启动流程 https://www.cnblogs.com/ltaodream/p/16837107.html

[74] Cluster boot sequence https://kops.sigs.k8s.io/boot-sequence/

[75] k8s源码分析-----kubelet启动流程分析_streaming-connection-idle-timeout-CSDN博客 https://blog.csdn.net/yan234280533/article/details/52349076

[76] kubernetes各组件如何启动_mb63219befd4271的技术博客_51CTO博客 https://blog.51cto.com/u_15792033/9305636

[77] Kubernetes Init Container核心机制与使用注意事项解析 https://www.iesdouyin.com/share/video/7550673853992406331/?region=&mid=7550673897943763753&u_code=0&did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&video_share_track_ver=&titleType=title&share_sign=pi9dIuui81evKce3CtPoD.pkfTLDyK56RzYUdk8vtKE-&share_version=280700&ts=1772204526&from_aid=1128&from_ssr=1&share_track_info=%7B%22link_description_type%22%3A%22%22%7D

[78] kubelet组件的启动流程源码分析_kubelet 源码分析-CSDN博客 https://blog.csdn.net/xsw164711368/article/details/142030556

[79] Kubernetes 系列 - 4. apiserver (一、启动流程)4. apiserver (一、启动流程) 4 - 掘金 https://juejin.cn/post/7459705455838265371

[80] k8s启动顺序启动顺序_wx5d6f0f4a50ea3的技术博客_51CTO博客 https://blog.51cto.com/u_14530969/10382494

[81] kubernetes源码解析---- apiserver路由构建解析(2) - LDaniel - 博客园 https://www.cnblogs.com/ldaniel/p/5889931.html

[82] 10.8Kubernetes源码情景分析-云计算那些事儿:从IaaS到PaaS进阶(五) - 码小课 - 程序员在线学习平台 | Java Python PHP Go JavaScript Linux教程 https://www.maxiaoke.com/manual/yjsnxs_five/15747.html

[83] kubernetes/staging/src/k8s.io/apiserver/pkg/server/routes/version.go at master · kubernetes/kubernetes · GitHub https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apiserver/pkg/server/routes/version.go

[84] 【kubernetes/k8s源码分析】kube-apiserver 启动_kubelet api接口url具体有哪些-CSDN博客 https://blog.csdn.net/zhonglinzhang/article/details/68062613

[85] kubernetes源码解析---- apiserver路由构建解析(2) - LDaniel - 博客园 https://www.cnblogs.com/ldaniel/p/5889931.html

[86] kubernetes/staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go at master · kubernetes/kubernetes · GitHub https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go

[87] kube-apiserver https://github.com/duyanghao/kubernetes-reading-notes/blob/master/core/api-server/design.md

[88] Kubernetes API Server源码学习(二):OpenAPI、API Resource的装载、HTTP Server具体是怎么跑起来的? 原创 https://blog.csdn.net/qq_40378034/article/details/131341129

[89] kube-apiserver启动流程分析_delegate apiserver-CSDN博客 https://blog.csdn.net/u012986012/article/details/105755991

[90] kubernetes apiserver原理概览 https://github.com/duyanghao/kubernetes-reading-notes/blob/master/core/api-server/overview.md

[91] api k8s restful 创建pods_K8S APIServer 源码剖析(三)| 注册 API-CSDN博客 https://blog.csdn.net/weixin_33099377/article/details/112527703

[92] 深度解析 | K8S API Server之请求处理_51CTO博客_k8s api https://blog.51cto.com/u_15077561/2584808

[93] Kubernetes源码解读 PDF 密码解压_寂寞沙冷州的技术博客_51CTO博客 https://blog.51cto.com/u_39037/12778115

[94] 5.1 API核心server的启动流程_api-server怎么启动-CSDN博客 https://blog.csdn.net/weixin_48502062/article/details/145579338

[95] 深入理解 Kubernetes 中的用户与身份认证授权-CSDN博客 https://blog.csdn.net/alex_yangchuansheng/article/details/128030875

[96] kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/filters/authentication.go at master · kubernetes/kubernetes · GitHub https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apiserver/pkg/endpoints/filters/authentication.go

[97] kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/filters/authorization.go at master · kubernetes/kubernetes · GitHub https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apiserver/pkg/endpoints/filters/authorization.go

[98] 【kubernetes/k8s源码分析】kube-apiserver 启动_kubelet api接口url具体有哪些-CSDN博客 https://blog.csdn.net/zhonglinzhang/article/details/68062613

[99] kubernetes/pkg/kubeapiserver/authenticator/config.go at master · kubernetes/kubernetes · GitHub https://github.com/kubernetes/kubernetes/blob/master/pkg/kubeapiserver/authenticator/config.go

[100] Admission Control in Kubernetes https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/?ref=ghostwriter

[101] Kubernetes APIへのアクセスコントロール | Kubernetes https://kubernetes.io/ja/docs/concepts/security/controlling-access/

[102] Kubernetes 源码剖析与实战Kubernetes源码解密:kube-apiserver的架构哲学与安全体系设计 - 掘金 https://juejin.cn/post/7551690245617500175

[103] Kubernetes控制平面组件:APIServer 基于 ServiceAccount 的认证机制_kube-apiserver --service-accout-CSDN博客 https://blog.csdn.net/a1369760658/article/details/145717399

[104] Kubernetes【05】k8s-APIServer-CSDN博客 https://blog.csdn.net/Aerkui/article/details/153875841

[105] Kubernetes API Server核心功能与架构解析 https://www.iesdouyin.com/share/video/7368429619541724442/?region=&mid=7368429708326849290&u_code=0&did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&video_share_track_ver=&titleType=title&share_sign=6g4cb7DxXRU68OsPSybXOq4vprTWGpNdFaANTe9VCGs-&share_version=280700&ts=1772204543&from_aid=1128&from_ssr=1&share_track_info=%7B%22link_description_type%22%3A%22%22%7D

[106] kube-apiserver 权限控制_kube-apiserver authorization-mode-CSDN博客 https://blog.csdn.net/UFOfuck/article/details/135626794

[107] 授权 | Kubernetes (K8s) 容器编排系统 https://kubernetes.ac.cn/docs/reference/access-authn-authz/authorization/

[108] kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/watch.go at master · kubernetes/kubernetes · GitHub https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/watch.go

[109] K8s 如何提供更高效稳定的编排能力?K8s Watch 实现机制浅析-CSDN博客 https://blog.csdn.net/u012676824/article/details/154414731

[110] kubernetes/staging/src/k8s.io/apiserver/pkg/storage/etcd3/watcher.go at master · kubernetes/kubernetes · GitHub https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apiserver/pkg/storage/etcd3/watcher.go

[111] kubernetes-dev-docs/client-go/3.listwatch-reflector-controller.md at master · opsnull/kubernetes-dev-docs · GitHub https://github.com/opsnull/kubernetes-dev-docs/blob/master/client-go/3.listwatch-reflector-controller.md

[112] Kubernetes client-go Informer 机制详解_桂晨的技术博客_51CTO博客 https://blog.51cto.com/u_16638093/14279688

[113] kubernetes/staging/src/k8s.io/apimachinery/pkg/watch/watch.go at master · kubernetes/kubernetes · GitHub https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/watch/watch.go

[114] kubernetes/staging/src/k8s.io/client-go/rest/watch/decoder.go at master · kubernetes/kubernetes · GitHub https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/client-go/rest/watch/decoder.go

[115] 【Linux】Linux + K8s 核心玩法:CRD 自定义资源开发,解锁集群管理新姿势-CSDN博客 https://blog.csdn.net/lbbxmx111/article/details/156547346

[116] 使用 CustomResourceDefinition 扩展 Kubernetes API | Kubernetes https://kubernetes.io/zh-cn/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/

[117] kubernetes系列之十四:Kubernetes CRD(CustomResourceDefinition)概览-CSDN博客 https://blog.csdn.net/cloudvtech/article/details/80277960

[118] Kubernetes自定义控制器开发机制与核心步骤解析 https://www.iesdouyin.com/share/video/7350617530349767963/?region=&mid=7350617663351098150&u_code=0&did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&video_share_track_ver=&titleType=title&share_sign=uSzIFR8BnOc91kqeArJ8VgQP9jUl8G9e99VAxkMMFwY-&share_version=280700&ts=1772204550&from_aid=1128&from_ssr=1&share_track_info=%7B%22link_description_type%22%3A%22%22%7D

[119] Kubernetes CRD开发模式及源码实现深入剖析-Kubernetes商业环境实战-CSDN博客 https://blog.csdn.net/weixin_30577801/article/details/100092457

[120] K8S系列之6.1:自定义扩展(CRD 与 Operator 设计模式)_Allen http://m.toutiao.com/group/7584383841654129203/?upstream_biz=doubao

[121] kubernetes crd 源码_wx6225b14cdec17的技术博客_51CTO博客 https://blog.51cto.com/u_15538975/9305499

[122] 【K8S】Kubernetes 调度器深度解析:原理与源码分析_kubernetes调度器源码分析-CSDN博客 https://blog.csdn.net/weixin_42969320/article/details/152417398

[123] kube-schedulerのソースコードを読みながらPodがNodeにBindされるまでを理解する https://qiita.com/everpeace/items/601dc613a0f424fb5619

[124] k8s-source-code-analysis/kube-scheduler/scheduleOne.md at master · huweihuang/k8s-source-code-analysis · GitHub https://github.com/huweihuang/k8s-source-code-analysis/blob/master/kube-scheduler/scheduleOne.md

[125] kubernetes/pkg/scheduler/schedule_one.go at master · kubernetes/kubernetes · GitHub https://github.com/kubernetes/kubernetes/blob/master/pkg/scheduler/schedule_one.go

[126] kubernetes kube-scheduler 源码:预选和优选 https://juejin.cn/post/7178072424301199418

[127] blog/content/kubernetes/source code: scheduling - how to find a proper node for pod.md at master · zxdvd/blog · GitHub https://github.com/zxdvd/blog/blob/master/content/kubernetes/source%20code:%20scheduling%20-%20how%20to%20find%20a%20proper%20node%20for%20pod.md

[128] Kube Scheduler 源码分析 https://developer.aliyun.com/article/688729

[129] Kubernetes调度机制深度剖析(面试官最关注的底层原理)-CSDN博客 https://blog.csdn.net/IterStream/article/details/152605671

[130] Kubernetes 1.24 版本 scheduler(调度器)原理_1.24 kubernetes kubeschedulerconfiguration api-CSDN博客 https://blog.csdn.net/hezuijiudexiaobai/article/details/149056041

[131] k8s Pod 是 如何 调度 到 Node 上 的 ? # 编程 # Kubernetes # k8s 面试 # 面试 # k8s 嗨 , 老铁 ! 觉得 有用 就 点 个 赞 , 加 个 关注 呗 ! 创作 不易 , 你 的 认可 , 就是 我 持续 创作 的 动力 ! https://www.iesdouyin.com/share/video/7565107518196747562/?region=&mid=7565107504540027700&u_code=0&did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&video_share_track_ver=&titleType=title&share_sign=VdBm…m3_elmOirg8xheKTlVqP.NCvbEI89e5k62ryg-&share_version=280700&ts=1772204560&from_aid=1128&from_ssr=1&share_track_info=%7B%22link_description_type%22%3A%22%22%7D

[132] kube-scheduler_运维邦的技术博客_51CTO博客 https://blog.51cto.com/aklaus/14485371

[133] kube-scheduler predicates 与 priorities 调度算法源码分析-腾讯云开发者社区-腾讯云 https://cloud.tencent.com/developer/article/1553952?areaSource=106000.9

[134] kubernetesapidocument下载 https://blog.51cto.com/u_14731/12120774

[135] kubernetes/staging/src/k8s.io/component-helpers/scheduling/corev1/nodeaffinity/nodeaffinity.go at master · kubernetes/kubernetes · GitHub https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/component-helpers/scheduling/corev1/nodeaffinity/nodeaffinity.go

[136] 专题-亲和性调度(Author - XiaoYang) https://github.com/daniel-hutao/k8s-source-code-analysis/blob/master/core/scheduler/affinity.md

[137] kubernetes/staging/src/k8s.io/client-go/applyconfigurations/core/v1/nodeaffinity.go at master · kubernetes/kubernetes · GitHub https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/client-go/applyconfigurations/core/v1/nodeaffinity.go

[138] kubernetes/pkg/scheduler/framework/plugins/interpodaffinity/scoring.go at master · kubernetes/kubernetes · GitHub https://github.com/kubernetes/kubernetes/blob/master/pkg/scheduler/framework/plugins/interpodaffinity/scoring.go

[139] Use Affinity with Oracle Cloud Native Environment http://docs.oracle.com/en/learn/ocne-affinity/

[140] Assigning Pods to Nodes https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/

[141] Class V1Affinity https://kubernetes-client.github.io/csharp/api/k8s.Models.V1Affinity.html

[142] Kubernetes节点选择器:标签与亲和性调度策略_kubernetes 节点亲和性 标签自动管理-CSDN博客 https://blog.csdn.net/sjsndy/article/details/149247971

[143] 终极指南:Cluster Autoscaler节点亲和性与反亲和性配置全解析-CSDN博客 https://blog.csdn.net/gitblog_00952/article/details/152149167

[144] 【 K8s 源码之调度学习】Pod 间亲和性和反亲和性的源码分析_weightedpodaffinityterm-CSDN博客 https://blog.csdn.net/qq_24433609/article/details/129204194

[145] k8s Pod 是 如何 调度 到 Node 上 的 ? # 编程 # Kubernetes # k8s 面试 # 面试 # k8s 嗨 , 老铁 ! 觉得 有用 就 点 个 赞 , 加 个 关注 呗 ! 创作 不易 , 你 的 认可 , 就是 我 持续 创作 的 动力 ! https://www.iesdouyin.com/share/video/7565107518196747562/?region=&mid=7565107504540027700&u_code=0&did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&video_share_track_ver=&titleType=title&share_sign=VdBm…m3_elmOirg8xheKTlVqP.NCvbEI89e5k62ryg-&share_version=280700&ts=1772204581&from_aid=1128&from_ssr=1&share_track_info=%7B%22link_description_type%22%3A%22%22%7D

[146] 将 Pod 分配到节点 | Kubernetes (K8s) 容器编排系统 https://v1-30.kubernetes.ac.cn/docs/concepts/scheduling-eviction/assign-pod-node/

[147] 将 Pod 分配给节点 | Kubernetes (K8s) 容器编排系统 https://kubernetes.ac.cn/docs/concepts/scheduling-eviction/assign-pod-node/

[148] 【Kubernetes】(九)Pod调度-CSDN博客 https://blog.csdn.net/lxyydh88888888/article/details/151924532

[149] kubernetes/cmd/kube-controller-manager/app/core.go at master · kubernetes/kubernetes · GitHub https://github.com/kubernetes/kubernetes/blob/master/cmd/kube-controller-manager/app/core.go

[150] 【Kubernetes 源码剖析】kube-controller-manager 工作原理与实现-CSDN博客 https://blog.csdn.net/Ahri_J/article/details/150559209

[151] Kubernetes: kube-controller-manager 源码分析 https://www.cnblogs.com/xingzheanan/p/18066472

[152] kube-controller-manager源码分析-AD controller分析 https://www.cnblogs.com/lianngkyle/p/14877829.html

[153] Kube Controller Manager 源码分析 https://developer.aliyun.com/article/688622

[154] 控制器概述 https://github.com/daniel-hutao/k8s-source-code-analysis/blob/master/core/controller-manager/controller.md

[155] 【技术】从POD创建看Kubernetes源码实现 (三)- kube-controller manager-CSDN博客 https://blog.csdn.net/u010494323/article/details/157180840

[156] Kubernetes源码阅读笔记——Controller Manager(之三)-CSDN博客 https://blog.csdn.net/weixin_30889885/article/details/98845070

[157] Kubernetes 控制器:从 Kubernetes 资源控制到开放应用模型、工作原理解读_什么情况触发 reconcile-CSDN博客 https://blog.csdn.net/fly910905/article/details/105099256

[158] 《深入理解Kubernetes》源码阅读方法与实践指南 https://www.iesdouyin.com/share/note/7416550563069873447/?region=&mid=6881996450729822215&u_code=0&did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&video_share_track_ver=&titleType=title&schema_type=37&share_sign=94tLphsNvzdftP1BtQjiOWnhVkLpmQW0Z.lHY9LXs_U-&share_version=280700&ts=1772204605&from_aid=1128&from_ssr=1&share_track_info=%7B%22link_description_type%22%3A%22%22%7D

[159] Kubernetes控制平面组件:Controller Manager详解-CSDN博客 https://blog.csdn.net/a1369760658/article/details/147718758

[160] Kubernetes 1.12.0 Kube-controller-manager之deployment-controller源码阅读分析-CSDN博客 https://blog.csdn.net/choucou19790207/article/details/101007317

更多推荐