NOTE

K8s 资源控制概述

"cpu与mem的request与limit"

这部分关注三个问题 K8s 是如何对 cpu 和 mem 做资源限制的,涉及到的是 cgroup 的东西 pod 层面的 cgroup 存在的意义,可能是除 container 以外的本 pod 使用的资源 best effort/burstable/guaranteed 三者存在的意义 首先从观察现象出发,然后试图解释现象 分别介绍这三部分 K8s是如何做资源限制的 这...

K8s 中的 worker queue 并发控制模型

"K8s 中的设计模式"

K8s 默认调度器 genericscheduler 中判断每个 node 是否符合调度条件是并行执行的,具体是通过下面函数: workqueue.Parallelize(16, len(nodes), checkNode) 该函数第一个参数是并行粒度,最多起的 goroutine 的数目;第二个参数是所有节点的个数(理解为任务数),第三个参数是对每个 node 执行的函数,即具体的任务,...

gRPC Protobuf 语法介绍

在《gRPC 示例:实现发布订阅模式》中,介绍了 gRPC 的一些使用,在本文中希望介绍一些 protobuf 的一些语法,希望能覆盖工作中的一些 case,做到即查即用,同时对 protobuf 有进一步的认识。 鉴于之前做 K8s 存储比较多,这里定了个小目标,就是理解 csi.proto 中的语法,csi 项目的地址为 container-storage-interface/spec...

gRPC 示例:实现发布订阅模式

很多协议的标准都是用 gRPC 定义的,对 gRPC 不了解,在理解这些协议的时候也很费劲,做一个简单的 gRPC 入门,主要参考《官方文档》。 gPRC是什么 在 gRPC 框架下,客户端应用可以像调用本地方法一样直接调用另一台不同的机器上服务端应用的方法(RPC 定义),基于此能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,...

Kubelet 运行过程概述

kubelet 比较庞大,涉及的东西很多,相互之间关联性也不强,目前还没有了解每个模块的能力,因此只能做一个概述。以后在这个提纲的基础上再深入研究某一模块。kubelet的启动流程以及参数初始化不会涉及,主要是每个管理器的初始化过程,以及kubelet的同步过程。基于的代码是k8s 1.9。 初始化 初始化的代码在pkg/kubelet/kubelet.go文件,函数为NewMai...

Linux IPtables 规则基础

IPtables 这个东西每次都花时间去看,然而真正排查问题的时候,每次都不懂了,关键是实践总结的太少,纸上得来终觉浅,绝知此事要躬行。本文主要参考《Kubernetes 网络权威指南》。 IPtables iptables 的底层实现是 netfilter,netfilter 是Linux内核2.4版引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套 hook 函数的管理机制,使...

实现自己的 device mapper[翻译]

"这是一篇翻译"

一篇教你怎么实现自己的DeviceMapper驱动的文章,下面代码在Ubuntu 16.04及上通过(14.04上也通过,18.04未通过)。 原文链接:Writing Your Own Device Mapper Target Device Mapper 在Linux内核中,Device Mapper是将底层物理设备映射成上层逻辑设备的框架,它是LVM2的基础。在内核中它通过一个一个模块...

回溯法合集

"关于回溯法题目的总结"

全排列 全排列这种题目,自己做过很多次了,然而每次做都不能痛快的写出来,很痛苦。leetcode上关于全排列的题目为(现在用力扣多一点): 全排列,不含相同字符的全排列。 全排列 II,含相同字符的全排列,需要去重 网上关于用回溯法解决全排列的解法很多,自己也用过好几种解法,然而看的多了就茫然起来,每次都是跟着别人的思路走,后来发现自己的想法也不错,以后总结自己的套路。这里以...

have a fever

昨天下午跟女朋友去大润发,她骑电动车,我在后面骑着自行车。夜幕降临,我们走的很缓慢,仿佛在一个自己熟悉的小城镇,如果一直这么过下去,岂不是也挺美好。我们两个都有算得上稳定的工作与收入,也在考虑计划买房,总之未来似乎没有烦恼。我女朋友是个简单的人,情绪外漏,很容易得到快乐与满足,对未来没有远大追求,这次国庆我们两人都没有回家,在这里过的挺快乐。 从大润发回来,我就发烧了,头晕,关节痛,喝了一...

Kubelet volume manager 工作原理概述

前言 本身是做 K8s 存储相关工作的,但对kubelet volume-manager怎么工作的,了解的还不够多,这里分析一下吧。基于的 K8s 版本为1.16。volume-manager的入口函数在pkg/kubelet/kubelet.go文件中。程序启动非常简单: // Start volume manager go kl.volumeManager.Run(kl.source...