ps:本来应该先发这一篇,再开始讲cobra的,昨天不小心先把 cobra发出去了,今天补上源码概览~ 如上,我们下载好后切换到1.10版本的分支,项目目录结构是这样的(目录部分).有很多,我们先不纠结每一个目录的作用,看关键的几个先: 1.入口 可以看到我们最熟悉的几个组件都在,每一个目录打开都有一个go文件,里面是对应的main函数. 2.主要功能实现 可以很容易发现,pkg目录下对应各个组件的实现逻辑. 3.依赖 随便打开几个源码文件可以看到import了k8s.io中的很多项目,这些项目…
k8s client-go源码分析 informer源码分析(2)-初始化与启动分析 前面一篇文章对k8s informer做了概要分析,本篇文章将对informer的初始化与启动进行分析. informer架构 先来回忆一下informer的架构. k8s client-go informer主要包括以下部件: (1)Reflector:Reflector从kube-apiserver中list&watch资源对象,然后调用DeltaFIFO的Add/Update/Delete/Replace…
k8s client-go源码分析 informer源码分析(3)-Reflector源码分析 1.Reflector概述 Reflector从kube-apiserver中list&watch资源对象,然后将对象的变化包装成Delta并将其丢到DeltaFIFO中.简单点来说,就是将Etcd 的对象及其变化反射到DeltaFIFO中. Reflector首先通过List操作获取全量的资源对象数据,调用DeltaFIFO的Replace方法全量插入DeltaFIFO,然后后续通过Watch操作根…
要分析JVM的源码,结合资料直接阅读是一种方式,但是遇到一些想不通的场景,必须要结合调试,查看执行路径以及参数具体的值,才能搞得明白.所以我们先来把JVM的源码进行编译,并能够使用GDB进行调试. 编译环境 本文使用的JDK版本:OpenJDK7,分支b147 下载页面:https://download.java.net/openjdk/jdk7 下载地址:http://download.java.net/openjdk/jdk7/promoted/b147/openjdk-7-fcs-src-…
[源码分析] 从源码入手看 Flink Watermark 之传播过程 0x00 摘要 本文将通过源码分析,带领大家熟悉Flink Watermark 之传播过程,顺便也可以对Flink整体逻辑有一个大致把握. 0x01 总述 从静态角度讲,watermarks是实现流式计算的核心概念:从动态角度说,watermarks贯穿整个流处理程序.所以为了讲解watermarks的传播,需要对flink的很多模块/概念进行了解,涉及几乎各个阶段.我首先会讲解相关概念,然后会根据一个实例代码从以下几部分来…
k8s informer概述 我们都知道可以使用k8s的Clientset来获取所有的原生资源对象,那么怎么能持续的获取集群的所有资源对象,或监听集群的资源对象数据的变化呢?这里不需要轮询去不断执行List操作,而是调用Watch接口,即可监听资源对象的变化,当资源对象发生变化,客户端即可通过Watch接口收到资源对象的变化. Watch接口虽然可以直接使用,但一般情况下很少直接使用,因为往往由于集群中的资源较多,我们需要自己在客户端去维护一套缓存,而这个维护成本比较大. 也是因为如此,clie…
本文原始地址:https://farmer-hutao.github.io/k8s-source-code-analysis/ 项目github地址:https://github.com/farmer-hutao/k8s-source-code-analysis 源码准备 环境准备 源码下载 源码编译 IDE 1. 环境准备 操作系统:我们使用Linux作为k8s源码分析和调试环境,fedora.centos.ubuntu都行,我这里使用fedora: golang相关: GOROOT=/usr…
client-go之DeltaFIFO源码分析 1.DeltaFIFO概述 先从名字上来看,DeltaFIFO,首先它是一个FIFO,也就是一个先进先出的队列,而Delta代表变化的资源对象,其包含资源对象数据本身及其变化类型. Delta的组成: type Delta struct { Type DeltaType Object interface{} } DeltaFIFO的组成: type DeltaFIFO struct { ... items map[string]Deltas que…
client-go之Controller&Processor源码分析 1.controller与Processor概述 Controller Controller从DeltaFIFO中pop Deltas出来处理,根据对象的变化更新Indexer本地缓存,并通知Processor相关对象有变化事件发生. Processor Processor根据Controller的通知,即根据对象的变化事件类型,调用相应的ResourceEventHandler来处理对象的变化. 先通过一张informer概…
client-go之Indexer源码分析 1.Indexer概述 Indexer中有informer维护的指定资源对象的相对于etcd数据的一份本地内存缓存,可通过该缓存获取资源对象,以减少对apiserver.对etcd的请求压力. // staging/src/k8s.io/client-go/tools/cache/thread_safe_store.go type threadSafeMap struct { items map[string]interface{} indexers…