加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

一篇带给你pod创建源码盘点

发布时间:2021-12-10 15:57:39 所属栏目:系统 来源:互联网
导读:接触kubernetes已经4年多了,不过多是停留在能够使用,对其原理、源码不是很熟悉。对于平常执行的命令,它背后执行的流程、逻辑也不是很清楚。所以,最近打算去

接触kubernetes已经4年多了,不过多是停留在能够使用,对其原理、源码不是很熟悉。对于平常执行的命令,它背后执行的流程、逻辑也不是很清楚。所以,最近打算去看看k8s各模块的源码。一来是加深对k8s各模块的理解和认识;二来是方便以后遇到问题好分析问题的根本原因,有理有据,则可以服人;再者后续跳槽也不怕被面试官的技术问题所难到了。那么今天,就来简单说一说pod创建的源码吧。文章有错误的地方还请指正,轻喷。首先,k8s的源码在github上即可获取。本次我看的是1.21.3。另外,很多翻译都是直译或翻译软件翻译的。请谅解。

 

正文ASP站长网

1、k8s源码中针对pod的增删改查是在源码包/pkg/kubelet/kubelet.go中的syncLoop()进行。如下所示:

 

// syncLoop is the main loop for processing changes. It watches for changes from 

// three channels (file, apiserver, and http) and creates a union of them. For 

// any new change seen, will run a sync against desired state and running state. If 

// no changes are seen to the configuration, will synchronize the last known desired 

// state every sync-frequency seconds. Never returns. 

// syncLoop是处理更改的主循环。它感知来自三个channel(file,apiserver,http)的pod的变化,并且聚合它们。有任何的改变发生,将运行状态同步为期望状态。反之,则在每个同步周期内同步最后已知的期望状态。 

func (kl *Kubelet) syncLoop(updates <-chan kubetypes.PodUpdate, handler SyncHandler) { 

 klog.InfoS("Starting kubelet main sync loop") 

在syncLoop()中则通过kl.syncLoopIteration()针对pod具体执行具体的操作。

 

kl.syncLoopMonitor.Store(kl.clock.Now()) 

if !kl.syncLoopIteration(updates, handler, syncTicker.C, housekeepingTicker.C, plegCh) { 

 break 

2、在syncLoopIteration有几个重要的参数,如下所示:

 

// Arguments: 

// 1.  configCh:       a channel to read config events from 

// 2.  handler:        the SyncHandler to dispatch pods to 

// 3.  syncCh:         a channel to read periodic sync events from 

// 4.  housekeepingCh: a channel to read housekeeping events from 

// 5.  plegCh:         a channel to read PLEG updates from 

 

// * configCh: dispatch the pods for the config change to the appropriate 

//             handler callback for the event type 

// * plegCh: update the runtime cache; sync pod 

// * syncCh: sync all pods waiting for sync 

// * housekeepingCh: trigger cleanup of pods 

// * health manager: sync pods that have failed or in which one or more 

//                     containers have failed health checks 

 

func (kl *Kubelet) syncLoopIteration(configCh <-chan kubetypes.PodUpdate, handler SyncHandler, 

 syncCh <-chan time.Time, housekeepingCh <-chan time.Time, plegCh <-chan *pleg.PodLifecycleEvent) bool { 

 select { 

 case u, open := <-configCh: 

  // Update from a config source; dispatch it to the right handler 

  // callback. 

  if !open { 

   klog.ErrorS(nil, "Update channel is closed, exiting the sync loop") 

   return false 

  } 

     

SyncHandler是一个interface。包含对pod常见操作的几个方法。该接口由kubelet来实现。如下所示:

 

// SyncHandler is an interface implemented by Kubelet, for testability 

# pod创建、更新、 删除... 

type SyncHandler interface { 

 HandlePodAdditions(pods []*v1.Pod)  

 HandlePodUpdates(pods []*v1.Pod)  

 HandlePodRemoves(pods []*v1.Pod) 

 HandlePodReconcile(pods []*v1.Pod) 

 HandlePodSyncs(pods []*v1.Pod) 

 HandlePodCleanups() error 

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读