简易入门

结构图

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. iOS UI基础-13.0 数据存储

    应用沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Lay ...

  2. RSA加解密 私钥加密公钥解密 私加公解 && C++ 调用openssl库 的代码实例

    前提:秘钥长度=1024 ============================================== 对一片(117字节)明文加密  私加 ===================== ...

  3. php 数据库备份还原

    public function exportDatabase(){ $data = input(); //备份数据库 $host="192.168.0.123"; $user=&q ...

  4. System.BadImageFormatException”C#报错

    在平常的开发中或多或少会遇到一些问题,而本次向小编这里是自己刚刚解决的一个问题,贴出来与大家分享一下,纠结了一个下午,终于解决了,是有关平台的一个报错问题.   方法/步骤     报错”“Syste ...

  5. jar包的读取

    昨天在做项目插件的时候,因为会用到jar包中的一个文件来初始化程序.并且以后还是会访问这个文件,所以就想到干脆吧文件拷贝到指定目录.在拷贝的时候也费了好一会时间,这里涉及到了jar文件的操作,在这里记 ...

  6. 在caffe中执行脚本文件时 报错:-bash: ./train.sh: Permission denied

    报错原因:没有权限 解决方法:chmod 777 train.sh获得权限

  7. c++ 常用的数据结构

    set // constructing sets #include <iostream> #include <set> void checkin(std::set<int ...

  8. mysql 知识

    1.  数据库事务的四个特性及含义 数据库事务transanction正确执行的四个基本要素.ACID,原子性(Atomicity).一致性(Correspondence).隔离性(Isolation ...

  9. MySQL练习题之参考答案

    1.创建表结构和数据 /* Navicat Premium Data Transfer Source Server : localhost Source Server Type : MySQL Sou ...

  10. linux基础操作

    1.pwd 2.clear 3.who 4.cal 5.uname 6.wc 7.man在线帮助命令 8.--help.info.whatis 9.使用su命令以root身份进入linux 10.Sh ...