简易入门

结构图

debug

先了解 etcd

API源码分析

API server 是中心. https://www.jianshu.com/p/88c6ed78b668

$ git ls-files |grep apiserver |less

cmd/kube-apiserver/apiserver.go 是入口

scheduler 源码分析.

$ git ls-files |grep scheduler |less

可以看到 scheduler 的主要目录,有cmd, algorithm, api ...

可以猜出来这些文件是干啥的. 

算法下面:

ls plugin/pkg/scheduler/algorithm/
BUILD doc.go listers.go predicates priorities scheduler_interface.go scheduler_interface_test.go types.go

cmd是 就是command吗,main 函数的入口.

打开 plugin/cmd/kube-scheduler/scheduler.go 发现启动了一个SchedulerServer.

深入进去

配置

plugin/cmd/kube-scheduler/app/options/options.go -> pkg/apis/componentconfig/types.go

看到其实 KubeSchedulerConfiguration, 就是一个http的server.

看来这个与openstack不同,不是采用rpc通信. 

监听的server

plugin/cmd/kube-scheduler/app/server.go

Run 起了两个server.

1.  startHTTP

主要是 Profiling 和 metrics

2. sched.Run

需要先创建有两个函数scheduler,有两个函数 CreateFromProvider 和 CreateFromConfig.

主要执行的函数是scheduleOne 

做了一个Binding, 不知道做啥用,先看 pkg/api/v1/types.go 说明

// Binding ties one object to another.
// For example, a pod is bound to a node by a scheduler.
type Binding struct {
metav1.TypeMeta `json:",inline"`
// Standard object's metadata.
// More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
// +optional
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // The target object that you want to bind to the standard object.
Target ObjectReference `json:"target" protobuf:"bytes,2,opt,name=target"`
}

开启的貌似是个http的client.

主要数据结构看 plugin/pkg/scheduler/scheduler.go 中Config的定义.

3. 还有LeaderElection, 先略过去, 后面单独分析选举算法.

4. 具体怎么找到未分配的pod, 还需要进一步的分析.

有关eduler分析的文章,网上比比皆是.

http://cizixs.com/ 写了一系列的分析文章

对比opentstack的schedule

Kubelet源码分析(一):启动流程分析

入口 cmd/kubelet/kubelet.go

有很多分析 http://cizixs.com/

自己动手打包编译

k8s (kubernetes) 代码分析的更多相关文章

  1. k8s源码分析准备工作 - 源码准备

    本文原始地址:https://farmer-hutao.github.io/k8s-source-code-analysis/ 项目github地址:https://github.com/farmer ...

  2. Kubernetes代码解读-apiserver之list-watch

    list-watch,作为k8s系统中统一的异步消息传递方式,对系统的性能.数据一致性起到关键性的作用.今天我想从代码这边探究一下list-watch的实现方式.并看是否能在后面的工作中优化这个过程. ...

  3. sidecar-inject代码分析

    Istio通过对serviceMesh中的每个pod注入sidecar,来实现无侵入式的服务治理能力.其中,sidecar的注入是其能力实现的重要一环(本文主要介绍在kubernetes集群中的注入方 ...

  4. k8s garbage collector分析(1)-启动分析

    k8s garbage collector分析(1)-启动分析 garbage collector介绍 Kubernetes garbage collector即垃圾收集器,存在于kube-contr ...

  5. k8s garbage collector分析(2)-处理逻辑分析

    garbage collector介绍 Kubernetes garbage collector即垃圾收集器,存在于kube-controller-manger中,它负责回收kubernetes中的资 ...

  6. k8s endpoints controller分析

    k8s endpoints controller分析 endpoints controller简介 endpoints controller是kube-controller-manager组件中众多控 ...

  7. 30分钟学会Docker里面开启k8s(Kubernetes)登录仪表盘(图文讲解)

    前言 我们之前搭建了第一个docker项目: windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互):https://www.cnblogs.com/xiongze520/p ...

  8. k8s replicaset controller分析(1)-初始化与启动分析

    replicaset controller分析 replicaset controller简介 replicaset controller是kube-controller-manager组件中众多控制 ...

  9. Android代码分析工具lint学习

    1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...

随机推荐

  1. webpack1.0--图片

  2. python list成员函数extend与append的区别

    extend 原文解释,是以list中元素形式加入到列表中 extend list by appending elements from the iterable append(obj) 是将整个ob ...

  3. Appium基础(三)对象抓取

    一.启动Android模拟器 二.打开App应用,这里以计算器为例子 三.打开uiautomatorviewer.bat 这个文件在Android SDK-->Tool目录下 双击uiautom ...

  4. Nginx.代理MySQL

    Nginx.代理MySQL 1. Nginx在安装的时候,需要加上一个参数:--with-stream 即Nginx安装指令为:./configure --prefix=/u01/app/nginx  ...

  5. php核心纪要 整理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. linux常见运维题

    linux运维题 一.填空题 1. 在Linux 系统 中,以文件方式访问设备 . (linux下一切都是文件) 2. Linux 内核引导时,从文件/etc/fstab中读取要加载的文件系统 . ( ...

  7. 回声状态网络(ESN)基础教程

    http://jlearning.cn/2017/05/29/ESN-basic-tutorial/ 最近在看回声状态网络(Echo State Network)的内容,注意到中文搜索引擎搜不到关于有 ...

  8. Python -- 连接数据库SqlServer

    用Python几行代码查询数据库,此处以Sql server为例. 1. 安装pymssql,在cmd中运行一下代码 pip install pymssql 2. 链接并执行sql语句 #-*-cod ...

  9. Java多线程-----创建线程的几种方式

       1.继承Thread类创建线程 定义Thread类的子类,并重写该类的run()方法,该方法的方法体就是线程需要完成的任务,run()方法也称为线程执行体 创建Thread子类的实例,也就是创建 ...

  10. 算法训练 P1101

    有一份提货单,其数据项目有:商品名(MC).单价(DJ).数量(SL).定义一个结构体prut,其成员是上面的三项数据.在主函数中定义一个prut类型的结构体数组,输入每个元素的值,计算并输出提货单的 ...