NOTE

tcp 协议的连接与断开

目录 三次握手 四次挥手 tcp 流量控制 TCP问题好难,对于这种问题,一方面是应用场景少,实践的不够多,比如调试网络问题的机会;另一方面是工作的时候调试问题总是得过且过,没有深入研究,这个可能还有其他外界因素的干扰,也不允许深究下去。 工作中遇到的问题主要是一些异常的tcp状态,比如一些tcp错误码,如delayAckLost等,还有就是一些异常的网络连接,比如大量c...

容器网络基础及 CNI 概述

目录 基本概念 单机容器网络 CNI 网络配置格式 Execution Protocol (调用协议) Execution of Network Configurations Plugin Delegation Result Types CNI实现 参考: 基本概念 名词解释都放在...

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 在满足下面条件时,是相...

一些 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(排它锁...