Linux Replacing Netstat
本文讨论了 Linux 替换掉 Unix 标准的一套网络管理工具 netstat, ifconfig,使用新的工具例如 ss, ip 套件。
- Linux ss ip 这套工具使用 netlink sockets,比较高效. netstat, ifconfig 这套工具的缺点在于性能低,要从 /proc 中读取很多文件,而要改写底层估计很难,技术上倒是可以做到但是更多是个 political 问题。
- 另外一个问题是 ifconfig 的输出其实已经和现在的网络架构蛮不一样了,有些信息都不够全。要修输出格式,估计很多脚本都会坏掉。
- 既然升级成本太高,切到新工具也是个不错的办法。
Google - performance analysis of cloud applications
本文是一篇 Google 的论文的学习笔记,论文讲的是 Google 如何给像 Gmail 这样的 user-facing 服务做性能分析和性能数据收集。
- 要想分析生产环境的性能,只能上生产环境去收集,不能在实验环境里面收集。生产环境的数据实在是太难预测了。
- Google 使用的技术有两种:
- coordinated bursty tracing:所谓的 bursty 是指同一时间点,所有程序同时开启 tracing 几毫秒,然后同时关闭 tracing 一会儿,如此往复。
- vertical context injection:比较复杂,大约是整个系统各个层上的所有软件都直接触发 syscall,通过一些无副作用的 syscall 序列把需要的信息丢进 kernal traces。// 有点黑科技。。
Kubernetes Chaos Engineering - kubelet and kube-proxy
本文是一篇实验报告,在 GCE 上删掉 iptable 规则后,路由到那台节点的请求会怎么样呢?
- 理解的前提是:
- kube-proxy 运行在每台节点上
- kube-proxy 需要查询 master 才能知道每个节点能处理哪些 application 的请求。
- 就算请求到了节点,而应用不在这个节点上,kube-proxy 也能将请求导到临近可用的节点上。
- kube-proxy 负责管理 iptable 规则
- 当你删除了某个节点上的 iptable 的一条规则,请求会卡住大约 30 秒,不 timeout 的话,最终会等到结果响应回去。
- 原理:有 pod add/delete 的时候 master node 就会重新计算 routing list.kube-proxy 会每隔
--iptables-sync-period
(10-30s …
THE STATE OF DEBUGGING MICROSERVICES ON KUBERNETES
有了 Kubernetes 编排的容器,服务,部署,Pod,Secret 等系统部件,debug 反而变得比单体应用难多了,因为这些部件太动态了。一般出了问题,除了删掉 Pod,碰碰运气能否自己解决。如果不能解决,目前比较简单地做法:快速加个代码,打个日志,重新部署。文中提到了一个方案:部署 Squash Daemonset 到 Host,可以做 debug。另外一个方案是打包镜像的时候就把 debugger 打进去,然后部署的时候把 debugger 的端口暴露到 node localhost。最后一个方案是 kubernetes --feature-gates=PodShareProcessNamespace=true
和 kubectl debug --image=<your-debugger-image> <your-application-pod>
。