• k8s (kubernetes) 代码分析


     简易入门

    结构图: 

    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/ 

    自己动手打包编译

  • 相关阅读:
    NHibernate开源框架Cuyahoga学习之数据访问实现
    Petshop4.0 缓存设计学习
    Jquery实现ToolTip之元素定位
    客户单操作Cookie
    .Net 通过MySQLDriverCS操作MySQL
    NHibernate的基本使用
    提高ASP.NET性能的十大方法
    工作流引擎下基于表达式Tree复杂验证的实现
    C#注册表操作
    WinForm应用程序中的ComboBox实现ReadOnly功能
  • 原文地址:https://www.cnblogs.com/shaohef/p/8145426.html
Copyright © 2020-2023  润新知