美文网首页kubelet 理解
kubelet 结构体阅读

kubelet 结构体阅读

作者: shinwing | 来源:发表于2018-05-07 13:18 被阅读0次

    kubelet 

    kubelet 的声明

    Kubelet struct {   

        kubeletConfiguration kubeletconfiginternal.KubeletConfiguration    // kubelet的配置详情

        hostname        string    // 机器名

        nodeName        types.NodeName    // 节点名

        runtimeCache    kubecontainer.RuntimeCache     // 运行时的缓存(pods)

        kubeClient      clientset.Interface    // 和master通信的客户端

        heartbeatClient   v1core.CoreV1Interface       // 心跳客户端

        iptClient      utilipt.Interface     // iptables

        rootDirectory  string    // kubelet的volume、mounts、配置目录路径。默认是/var/lib/kubelet

        podWorkers PodWorkers      // 响应事件,处理同步pods   

        resyncInterval time.Duration      // 同步间隔  

        sourcesReady config.SourcesReady      // 记录被kubelet看到的资源   

        podManager kubepod.Manager       // pod的管理对象

        evictionManager eviction.Manager     // 需要观察和响应可能影响节点稳定性的情况

        logServer http.Handler   // 日志服务, defaults to /logs/ from /var/log

        kubecontainer.ContainerCommandRunner   // 用来在容器中执行命令

        cadvisor cadvisor.Interface   // 用来获取容器信息

        registerNode bool     // 节点是否向 apiserver 注册自己

        registerWithTaints []api.Taint   // 当节点注册自己的时候,节点的污染情况

        registerSchedulable bool    // 节点是否注册自己被调度

        registrationCompleted bool     // 是否已经注册完毕

        dnsConfigurer *dns.Configurer     // 启动pod时候的dns配置

        masterServiceNamespace string    // master服务所在的namespace

       serviceLister serviceLister    //  根据标签返回服务列表 List (labels.Selector) ([]*v1.Service, error)

        nodeInfo predicates.NodeInfo     // 返回节点的详情信息

        nodeLabels map[string]string     // 要注册的节点的标签

        runtimeState *runtimeState     // 最近一次相应ping的时间戳

        volumePluginMgr *volume.VolumePluginMgr     // volume 插件

        probeManager prober.Manager    // 处理容器的探针检测

        livenessManager proberesults.Manager     // 记录探针检测的结果

        streamingConnectionIdleTimeout time.Duration     // 执行容器内命令空闲等待多久会被关闭 (command execution/port forwarding)

        recorder record.EventRecorder     // 记录事件

        containerGC kubecontainer.ContainerGC     // 处理死亡容器的gc策略

        imageManager images.ImageGCManager    // 处理镜像的gc

        containerLogManager logs.ContainerLogManager    // 处理容器的日志

        secretManager secret.Manager    // Secret manager

        configMapManager configmap.Manager    // ConfigMap manager

        machineInfo *cadvisorapi.MachineInfo    // 缓存从cadvisor 获取的机器信息

        rootfsInfo *cadvisorapiv2.FsInfo    // 缓存从 cadvisor 获取的rootfs 信息

        serverCertificateManager certificate.Manager    // Handles certificate rotations

        statusManager status.Manager    // 缓存pods的状态并同步给APIserver

        volumeManager volumemanager.VolumeManager    // 执行异步循环,根据这个节点上调度的pods,那些卷需要进行 attached/mounted/unmounted/detached 操作

        cloud cloudprovider.Interface    // 云的接口

        cloudproviderRequestMux sync.Mutex    // 锁下面的变量

        cloudproviderRequestParallelism chan int    // 并行处理的请求计数

        cloudproviderRequestSync chan int    // 同步已经完成的请求

        cloudproviderRequestTimeout time.Duration    // 请求超时时间

        externalCloudProvider bool    // 节点初始化发生在云上

        nodeRef *v1.ObjectReference    // 本节点的引用

        containerRuntimeName string    // 容器运行时的名字

        containerRuntime kubecontainer.Runtime    // 容器运行时(重要?)

        runtimeService internalapi.RuntimeService    // 容器运行时服务

        reasonCache *ReasonCache    //  生产容器状态时使用的,创建失败信息

        nodeStatusUpdateFrequency time.Duration    // 本节点信息汇报给master的频率,因为需要汇总节点信息,所以这个值不能设置的太少

        pleg pleg.PodLifecycleEventGenerator    // 生成pod事件

        podCache kubecontainer.Cache    // 缓存所有的pod状态

        os kubecontainer.OSInterface    //  调用 syscalls 时候的外观

        oomWatcher OOMWatcher    // 监视oom事件

        resourceAnalyzer serverstats.ResourceAnalyzer    // 资源监控器

        cgroupsPerQOS bool    // 

        cgroupRoot string    // 非空的时候需要传给容器运行时

        mounter mount.Interface    // 处理卷的安装

        writer kubeio.Writer    // 卷的writer

        containerManager cm.ContainerManager    // 非运行容器的管理对象

        maxPods int    // 能运行的最大pod数量

        syncLoopMonitor atomic.Value    // 同步循环的监控器?

        backOff *flowcontrol.Backoff    // 容器重启的重试时间间隔

        podKillingCh chan *kubecontainer.PodPair    // 送需要杀死的pod

        daemonEndpoints *v1.NodeDaemonEndpoints    // 守护进程的端口信息

        workQueue queue.WorkQueue    // 触发worker的队列

        oneTimeInitializer sync.Once    // 初始化

        nodeIP net.IP    // 非空的话,用这个来代替节点ip

        providerID string    // 外部数据库中的节点的唯一标识符

        clock clock.Clock    // 提供了使劲啊相关的接口,便于测试

        setNodeStatusFuncs []func(*v1.Node) error    // 在update节点时候需要调用的方法

        admitHandlers lifecycle.PodAdmitHandlers    // 

        softAdmitHandlers lifecycle.PodAdmitHandlers    // 

        lifecycle.PodSyncLoopHandlers     // pod循环同步的时候需要调用的方法

        lifecycle.PodSyncHandlers      // pod同步的时候需要调用的方法

        podsPerCore int       // 允许core的数量

        enableControllerAttachDetach bool     // 允许controller 来负责卷,不允许kubelet管理

        containerDeletor *podContainerDeletor    // 删除容器的触发器

        makeIPTablesUtilChains bool    // 是否使用配置iptables 规则

        iptablesMasqueradeBit int

        iptablesDropBit int

        appArmorValidator apparmor.Validator

        criHandler http.Handler

        experimentalHostUserNamespaceDefaulting bool

        dockerLegacyService dockershim.DockerLegacyService

        *stats.StatsProvider    // 提供节点和pod的状态信息

        keepTerminatedPodVolumes bool


    container/runtime

    // 用来描述一个容器的运行时信息

    Container  struct {                    

        ID ContainerID                     // 容器ID

        Name string                         // 容器名称

        Image string                        // 镜像名字(包含TAG)

        ImageID string                    // 镜像ID

        Hash uint64                        // 容器的哈希值

        State ContainerState          // 容器的状态

    }

    // Pod 是一组容器

    Pod struct {                           

        ID types.UID                      // pod 的ID

        Name      string

        Namespace string

        Containers []*Container    // 容器列表(包含正在跑的容器和死掉的容器)

    }

    // 缓存了一个pods的列表,它在更新时候记录了一个时间戳

    runtimeCache struct {        

        sync.Mutex

        getter podsGetter          // 实际用来获取pods的容器运行时

        cacheTime time.Time    // 最近一次列表更新的时刻

        pods []*Pod                    // 缓存列表实体

    }

    ContainerCommandRunner interface {

        // 同步在容器中执行命令,并返回输出

        RunInContainer(id ContainerID, cmd []string, timeout time.Duration) ([]byte, error)

    }

    // 定义了运行时容器内执行命令的方法(exec/attach/port-forward)

    DirectStreamingRuntime interface {    

        ExecInContainer(containerID ContainerID, cmd []string, stdin io.Reader, stdout, stderr io.WriteCloser, tty bool, resize <-chan remotecommand.TerminalSize, timeout time.Duration) error   

        PortForward(pod *Pod, port int32, stream io.ReadWriteCloser) error   

        ContainerAttacher(AttachContainer(id ContainerID, stdin io.Reader, stdout, stderr io.WriteCloser, tty bool, resize <-chan remotecommand.TerminalSize) (err error))

    }

    // 定义了镜像相关的操作

    ImageService interface {

        PullImage(image ImageSpec, pullSecrets []v1.Secret) (string, error)    // 从网络拉取一个镜像到本地存储,返回一个镜像的引用(digest or ID)

        GetImageRef(image ImageSpec) (string, error)    // 返回一个本地镜像的引用,如果在本地找不到则返回空

        ListImages() ([]Image, error)    // 返回机器上的所有镜像

        RemoveImage(image ImageSpec) error    // 删除一个指定的镜像

        ImageStats() (*ImageStats, error)    // 返回一个镜像的详情

    }


    container/container_gc

    // 定义了死亡容器的操作

    ContainerGC interface {    

        GarbageCollect() error    // 容器gc操作

        DeleteAllUnusedContainers() error    // 删除所有不适用的容器,包括那些停掉的

    }

    // 详细定义了容器gc的策略

    ContainerGCPolicy struct {

        MinAge time.Duration     // 一个容器可以被gc的最小时间(0就是没有限制)

        MaxPerPodContainer int     // 允许持有的最大死亡容器数量

        MaxContainers int     // 最大死亡容器总数

    }


    images/image_gc_manager

    // 管理所有镜像的生命周期

    ImageGCManager interface {  

        GarbageCollect() error     // 应用垃圾收集策略。错误包括无法根据垃圾收集策略释放足够的空间。

        Start()     // 开始执行异步的镜像gc操作。启动了两个goroutine, 一个负责侦测新的image(detectImages),另一个负责更新本地的镜像缓存(ListImages)

        GetImageList() ([]container.Image, error)     // 返回镜像列表

        DeleteUnusedImages() error     // 删除所有的未使用的镜像

    }

    // gc策略定义了可以被gc的范围

    ImageGCPolicy struct { 

        HighThresholdPercent int     // 超过这个值一定会被gc

        LowThresholdPercent int     // 低于这个值一定不会被gc

        MinAge time.Duration     // 可以被gc的最小生命

    }


    pod  记录所有已经生成好的pod(以及镜像pod的对应关系)

    // MirrorClient 负责在APIserver上创建/删除镜像节点 

    MirrorClient interface {    

        CreateMirrorPod(pod *v1.Pod) error    //  创建镜像节点

        DeleteMirrorPod(podFullName string) error   //  根据全名(name and namespace)删除镜像节点

    }

    // Manager 存储和管理pods的访问,维护static pods 和 mirror pods 之间的关系

    Manager interface {

        GetPods() []*v1.Pod     // 返回绑定在 kubelet 上的所有pods    

        GetPodByFullName(podFullName string) (*v1.Pod, bool)    // 根据全名返回pod

        GetPodByName(namespace, name string) (*v1.Pod, bool)    // 根据名字返回pod

        GetPodByUID(types.UID) (*v1.Pod, bool)    // 根据uid返回pod

        GetPodByMirrorPod(*v1.Pod) (*v1.Pod, bool)     // 根据镜像pod返回staic pod

        GetMirrorPodByPod(*v1.Pod) (*v1.Pod, bool)    // 根据static pod 返回镜像pod

        GetPodsAndMirrorPods() ([]*v1.Pod, []*v1.Pod)    // 返回常规pods和镜像pods

        SetPods(pods []*v1.Pod)    // 设置一个pod,用来替换旧的(测试用)

        AddPod(pod *v1.Pod)    // 增加一个pod

        UpdatePod(pod *v1.Pod)    // 更新一个pod

        DeletePod(pod *v1.Pod)     // 删除一个 pod(如果是镜像节点?如果不是镜像节点?)

        DeleteOrphanedMirrorPods()     // 给APIserver发消息,删除所有的孤儿镜像pods

        TranslatePodUID(uid types.UID) kubetypes.ResolvedPodUID     // 返回真正的uid,如果参数是一个镜像的pod,那么需要返回实际static pod的uid

        GetUIDTranslations() (podToMirror map[kubetypes.ResolvedPodUID]kubetypes.MirrorPodUID, mirrorToPod map[kubetypes.MirrorPodUID]kubetypes.ResolvedPodUID)    // 返回static pod 和镜像pod 的uid对应关系

        IsMirrorPodOf(mirrorPod, pod *v1.Pod) bool     // 对比这个镜像pod和pod是否成对

        MirrorClient

    }


    eviction 定时检查是否有pod需要被驱逐

    Manager interface {

        // 启动控制循环,以指定间隔监视驱逐阈值。  (goroutine 定时处理)  

       Start(diskInfoProvider DiskInfoProvider, podFunc ActivePodsFunc, podCleanedUpFunc PodCleanedUpFunc, monitoringInterval time.Duration)

       // 是否接受这个pod(attrs.Pod)

       // 没有条件的时候,接受

       // 当是核心pod的时候,必须接受

       // 当机器有内存压力限制的时候,不能接受没有限制的pods

       // 有磁盘压力也不能接受

       Admit(attrs *lifecycle.PodAdmitAttributes) lifecycle.PodAdmitResult

       // 节点是否有内存,磁盘,pid压力

       IsUnderMemoryPressure() bool

       IsUnderDiskPressure() bool

       IsUnderPIDPressure() bool

    }


    lifecycle

    // 保存pod被评估的上下文

    PodAdmitAttributes struct {

        Pod *v1.Pod    // 需要被评估的pod

        OtherPods []*v1.Pod    // 所有其他的kubelet上的pods

    }

    // 记录pod被评估是否被接受的结果

    PodAdmitResult struct {

        Admit bool    // pod是否被接收

        Reason string    // 评估未通过的理由

        Message string    // 评估未通过的详情

    }


    apis/core

    Taint struct {     // 污染附着在节点上,对任何不能容忍污染的pod都起效

        Key string      // 污染的key

         Value string       // 污染的value

         Effect TaintEffect 

         // NoSchedule 不允许新的pod在节点上调度,除非它们容忍污染,但允许所有提交到kubelet的POD不经过调度程序启动,并且允许所有已经运行的POD继续运行。由调度程序强制执行。

          // PreferNoSchedule 和TaintEffectNoSchedule一样,但是调度器尝试不将新的pod调度到节点上,而不是禁止新的pod从节点上完全调度。由调度程序强制执行。

          // NoExecute  驱逐任何不能容忍污染的已经运行的pod。目前由NodeController强制执行。

        TimeAdded *metav1.Time       // 污染的时间,只在NoExecute时赋值

    }


    prober 实现了探针(probe 具体实现)

    // 探针用来检查容器的生存/可读情况

    prober struct {

        // 三种类型的探针

        exec execprobe.ExecProber 

        readinessHttp httprobe.HTTPProber

        livenessHttp httprobe.HTTPProber

        tcp tcprobe.TCPProber

        // 用于在容器内执行命令

        runner kubecontainer.ContainerCommandRunner

        // 所有容器的引用

        refManager *kubecontainer.RefManager

       // 用于记录事件?

        recorder record.EventRecorder

    }


    flowcontrol/backoff

    backoffEntry struct {

        backoff time.Duration      // 间隔多久之后backoff

        lastUpdate time.Time      // 上次的更新时刻

    }

    Backoff struct {

        sync.Mutex

        Clock clock.Clock

        defaultDuration time.Duration       // 默认间隔

        maxDuration time.Duration       // 最大间隔

        perItemBackoff map[string]*backoffEntry

    }

    // (获取下一个时间间隔)如果没有初始化,或者事件时间已经超过最大间隔两倍了,需要重置 factor,重置为默认的时间间隔。如果有的话,需要把当前的间隔*2,和最大的两个值之间获取一个小的,当作下一次的时间间隔。

    // 如果当前时间已经超过最大间隔的两倍了,那么删掉这个backoff

    // Exited Containers that are restarted by the kubelet are restarted with an exponential back-off delay (10s, 20s, 40s …) capped at five minutes, 

    相关文章

      网友评论

        本文标题:kubelet 结构体阅读

        本文链接:https://www.haomeiwen.com/subject/acimrftx.html