简易入门

结构图

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. 根据白名单过滤 HTML(防止 XSS 攻击)

    https://github.com/leizongmin/js-xss/blob/master/README.zh.md 根据白名单过滤 HTML(防止 XSS 攻击) xss是一个用于对用户输入的 ...

  2. Python random模块random/uniform/randint/choice/getrandbits/shuffle/choice/sample随机函数

    1.random.random() 返回0<=n<1之间的随机实数n 2. random.uniform() 弥补了上面函数的不足,它可以设定浮点数的范围,一个是上限,一个是下限. 3. ...

  3. MongoDB--运行环境

    版本 a.b.c  a大版本  b中版本分奇数偶数 奇数是开发版 偶数是稳定版 c小版本 ssh工具:远程Linux机器.在windows下使用 Linux 下使用vim     windows下使用 ...

  4. python selenium截取指定元素图片

    1.截取当前屏幕 @property def getImage(self): ''' 截取图片,并保存在images文件夹 :return: 无 ''' timestrmap = time.strft ...

  5. 兼容PC和手机触摸代码

    测试环境:unity3d 4.6.1 using UnityEngine; using System.Collections; public class neccc : MonoBehaviour { ...

  6. webpack打包jQuery,jQuery未定义

    怎么来兼容老式jQuery插件 ProvidePlugin + expose-loader / externals 1.ProvidePlugin + expose-loader webpack.co ...

  7. 019-JQuery(Ajax异步请求)

    使用jquery完成异步操作 ->开发文档提供的异步API url:请求地址 type:请求方式,主要是get.post data:{}:请求的数据 dataType:返回值的类型,主要有xml ...

  8. Unity shader学习之折射

    shader如下: Shader "Custom/Refraction" { Properties { _Cubemap("Cubemap", Cube) = ...

  9. c#关于字符串格式化

    1. 如何使用文化来格式化日期 如: /// <summary> /// 根据语言获取文化名称 /// </summary> /// <returns></r ...

  10. Uva297 Quadtrees【递归建四分树】【例题6-11】

    白书 例题6-11 用四分树来表示一个黑白图像:最大的图为根,然后按照图中的方式编号,从左到右对应4个子结点.如果某子结点对应的区域全黑或者全白,则直接用一个黑结点或者白结点表示:如果既有黑又有白,则 ...