Toggle navigation
Home
Archive
About
NOTE
flannel vxlan 工作原理分步骤详解
目录 1. 容器发包到 cni0 2. cni0 路由报文到 flannel.1 3. flannel.1 设备封包 3.1 如何已知目标 VTEP 设备的 IP 查其 mac 3.2 添加 vxlan header 3.3 把 vxlan 报文封装到 udp 报文 4. 主机网络发送 udp 报文 5. 主...
K8s 中的 Informer reflector 实现细节全解析
目录 主体流程 声明 初始化及启动 等待同步及启动 worker goroutine Reflector 工作原理 DeltaFIFO 队列 controller reflector 运行框架 之前在《关于k8s informer的基本概念与原理》中介绍...
Moby 代码中一个发布订阅模式的实现
在 Moby 代码中发现一个发布订阅设计的实现,想简单分析一下。这是一个既可以发布消息,也可以发起订阅的组件。发布者和订阅者都持有这个组件的引用,其中发布者负责发布消息,订阅者负责取消息。 组件中通过一个 map 来储存所有的发布者,以及每个发布者对消息的过滤函数。map 的 key 是一个 channel,这里要注意一下 channel 的判等操作,channel 在满足下面条件时,是相...
go-cache:一个简单内存 cache 设计
文章目录 go-cache 概述 实现细节 数据结构 初始化 Set/Add/Get Save(备份到文件) 总结 go-cache 概述 https://github.com/patrickmn/go-cache 是一个简单的 go 内存缓存,但是 star 数较多,可见受到大家的认可。本文主要探讨...
一些 Golang 日常读写操作
目录 Reader/Writer 接口 读写磁盘文件 哈希相关 检查文件是否存在 文件的硬链接 创建临时文件 json 编解码 列举目录下的所有文件 遍历目录 记录一些工具方法,避免每次都 google,当然最好是能直接看文档 Reader/Writer 接口 这两个接口是 Golang 读写操作中,最重要的两个接口,Reader 接口和 Wri...
K8s Scheduler 及 Apiserver 是如何处理 binding 请求的
研究一下k8s是如何处理pod的binding请求的,如何将pod与node绑定的 scheduler scheduler发起binding请求: // 构造一个binding资源 err := sched.bind(assumedPod, &v1.Binding{ // 注意Binding资源中,name是pod的name,namespace,以及uid也是pod的 ...
为 K8s 编写可测试代码
研究一下 K8s 测试代码是怎么写的,以https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner为例。 我们有时候需要 mock 一个 Apiserver,或者 mock 一个 clientset,这时候该怎么做呢?本文稍微研究一下。 Mock clientset Discovery 的测试代码里有下面...
实现文件分片传输的一个小例子
实现文件分片传输的一个小例子。 准备工作 找一个文件,一共42552字节。 fake@Mac iotext % ls -l file -rw-r--r-- 1 fake staff 42552 12 20 12:16 file 查看文件内容hash值。 content, err := ioutil.ReadFile(fileName) requireNoErr(err) h :=...
基于 CAS 操作实现无锁队列
目录 Golang 中的 CAS 操作 实现无锁队列 相关数据结构 算法实现 参考 在并发编程中,为防止多个 goroutine 同时修改一个对象,我们一般是事先设置一把锁 sync.Mutex,要想修改对象,需要提前获取这把锁,拿不到锁就需要阻塞,直到其他 goroutine 释放锁。相对于 sync.Mutex(排它锁...
多副本选主 LeaderElection 的实现
一些K8s控制组件有多个副本,如Kube-Scheduler,Kube-ControllerManager等。但同一个时刻,只有一个副本处于工作状态,其他组件处于Standby状态。这里以sig-storage-lib-external-provisioner为例研究一下选主的实现与使用。 程序的框架如下: // "k8s.io/client-go/tools/leaderelectio...
← Newer Posts
Older Posts →