k8s (kubernetes) 代码分析
结构图:
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, 还需要进一步的分析.
http://cizixs.com/ 写了一系列的分析文章
对比opentstack的schedule
Kubelet源码分析(一):启动流程分析
入口 cmd/kubelet/kubelet.go
有很多分析 http://cizixs.com/
自己动手打包编译
k8s (kubernetes) 代码分析的更多相关文章
- k8s源码分析准备工作 - 源码准备
本文原始地址:https://farmer-hutao.github.io/k8s-source-code-analysis/ 项目github地址:https://github.com/farmer ...
- Kubernetes代码解读-apiserver之list-watch
list-watch,作为k8s系统中统一的异步消息传递方式,对系统的性能.数据一致性起到关键性的作用.今天我想从代码这边探究一下list-watch的实现方式.并看是否能在后面的工作中优化这个过程. ...
- sidecar-inject代码分析
Istio通过对serviceMesh中的每个pod注入sidecar,来实现无侵入式的服务治理能力.其中,sidecar的注入是其能力实现的重要一环(本文主要介绍在kubernetes集群中的注入方 ...
- k8s garbage collector分析(1)-启动分析
k8s garbage collector分析(1)-启动分析 garbage collector介绍 Kubernetes garbage collector即垃圾收集器,存在于kube-contr ...
- k8s garbage collector分析(2)-处理逻辑分析
garbage collector介绍 Kubernetes garbage collector即垃圾收集器,存在于kube-controller-manger中,它负责回收kubernetes中的资 ...
- k8s endpoints controller分析
k8s endpoints controller分析 endpoints controller简介 endpoints controller是kube-controller-manager组件中众多控 ...
- 30分钟学会Docker里面开启k8s(Kubernetes)登录仪表盘(图文讲解)
前言 我们之前搭建了第一个docker项目: windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互):https://www.cnblogs.com/xiongze520/p ...
- k8s replicaset controller分析(1)-初始化与启动分析
replicaset controller分析 replicaset controller简介 replicaset controller是kube-controller-manager组件中众多控制 ...
- Android代码分析工具lint学习
1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...
随机推荐
- webpack1.0--图片
- python list成员函数extend与append的区别
extend 原文解释,是以list中元素形式加入到列表中 extend list by appending elements from the iterable append(obj) 是将整个ob ...
- Appium基础(三)对象抓取
一.启动Android模拟器 二.打开App应用,这里以计算器为例子 三.打开uiautomatorviewer.bat 这个文件在Android SDK-->Tool目录下 双击uiautom ...
- Nginx.代理MySQL
Nginx.代理MySQL 1. Nginx在安装的时候,需要加上一个参数:--with-stream 即Nginx安装指令为:./configure --prefix=/u01/app/nginx ...
- php核心纪要 整理
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- linux常见运维题
linux运维题 一.填空题 1. 在Linux 系统 中,以文件方式访问设备 . (linux下一切都是文件) 2. Linux 内核引导时,从文件/etc/fstab中读取要加载的文件系统 . ( ...
- 回声状态网络(ESN)基础教程
http://jlearning.cn/2017/05/29/ESN-basic-tutorial/ 最近在看回声状态网络(Echo State Network)的内容,注意到中文搜索引擎搜不到关于有 ...
- Python -- 连接数据库SqlServer
用Python几行代码查询数据库,此处以Sql server为例. 1. 安装pymssql,在cmd中运行一下代码 pip install pymssql 2. 链接并执行sql语句 #-*-cod ...
- Java多线程-----创建线程的几种方式
1.继承Thread类创建线程 定义Thread类的子类,并重写该类的run()方法,该方法的方法体就是线程需要完成的任务,run()方法也称为线程执行体 创建Thread子类的实例,也就是创建 ...
- 算法训练 P1101
有一份提货单,其数据项目有:商品名(MC).单价(DJ).数量(SL).定义一个结构体prut,其成员是上面的三项数据.在主函数中定义一个prut类型的结构体数组,输入每个元素的值,计算并输出提货单的 ...