zoukankan      html  css  js  c++  java
  • 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/ 

    自己动手打包编译

  • 相关阅读:
    博客园美化-SimpleMemor
    Java多线程-synchronized与ReentrantLock
    springboot中删除@SessionAttributes注解的属性
    SSM整合笔记
    Spring中xml和注解方式使用AOP
    Mysql 数据库基本操作
    Mysql 二进制包安装
    named piped tcp proxy 下载
    docker容器中日志文件过大处理方法
    自动做bond的脚本
  • 原文地址:https://www.cnblogs.com/shaohef/p/8145426.html
Copyright © 2011-2022 走看看