Cloud
k8s 容器热替换/重启主进程 - gdb execve syscall 法
· ☕ 8 分钟
k8s 环境下,在不停止或重启 container 的情况下,重启应用进程(pid:1),甚至重新加载运行新版本的应用。本文以 gdb 作为工具,调用 execve syscall,去实现这个目标。

k8s 容器热替换/重启主进程 - gdb exec 法
· ☕ 6 分钟
k8s 环境下,在不停止或重启 container 的情况下,重启应用进程(pid:1),甚至重新加载运行新版本的应用。本文以 gdb 作为工具,调用应用容器自带的 libc 的 close & exec 法函数,去实现这个目标。

调试与观察 istio-proxy Envoy sidecar 的启动过程
· ☕ 7 分钟
学习 Istio 下 Envoy sidecar 的初始化过程,有助于理解 Envoy 是如何构建起整个事件驱动和线程互动体系的。其中 Listener socket 事件监初始化是重点。而获取这个知识最直接的方法是 debug Envoy 启动初始化过程,这样可以直接观察运行状态的 Envoy 代码,而不是直接读无聊的 OOP 代码去猜现实行为。但要 debug sidecar 初始化有几道砍要过。本文记录了我通关打怪的过程。

调试 Istio 网格中运行的 Envoy sidecar C++ 代码
· ☕ 5 分钟
调试在 Istio 网格中运行的 Envoy sidecar C++ 代码。 它有助于在代码级别深入研究 sidecar。 它使我们在解决 Istio 问题或编写更好的 EnvoyFilter 或 eBPF 跟踪程序时更有信心。 本文介绍如何使用 VSCode 和 lldb 调试 Envoy istio-proxy sidecar。

玩火的容器内存控制 CGroup - 容器基础拾遗 Part 1
· ☕ 20 分钟
容器内存限制是个矛盾而重要的选择,给多了浪费资源,给少了服务随机崩溃。CGroup 内存控制是容器资源控制的核心。她是个规律严明的看守者,在应用超限时狠心地 OOM Klll。她同时也有宽容的一面,在应用资源不足时,调配和释放 Cache 给应用使用。而其内心的记账算法却耐人寻味。要观察和监控她的状态和行为,更是千条万绪。本文尝试用作分析和梳理。

重新思考云原生时代的开发环境——从 Dev-to-Cloud 到 Dev@Cloud
· ☕ 7 分钟

大背景

滾滾長江東逝水,浪花淘盡英雄。

作为一个一直在底层苦苦挣扎多年程序员,保持一分学习的好奇心,对技术时势的感知,由为重要。因为这最终决定了技术方向。如果你是个在组织中有话语权的人,那么这影响到你组织的技术方向。而在技术驱动型的公司中,这个直接影响到公司的前途。


记一次 Istio 调优 Part 2 —— 饥饿的线程与 SO_REUSEPORT
· ☕ 7 分钟


图片来自:https://getboulder.com/boulder-artist-rocks-the-world/

话说,在很长一段时间,程序员依赖了摩尔定律。而在它到头之前,程序员找到了另一个救命稻草:并行/并发/最终一致。而到了今天,不是 Cloud Native / Micro Service 都不好意思打招呼了。多线程,更是 by default 的了。而在计算机性能工程界,也有一个词: Mechanical Sympathy,直译就是 机器同情心。而要“同情”的前提是,得了解。生活中,很多人了解和追求work life balance。但你的线程,是否 balance 你要不要同情一下? 一条累到要过载线程,看到其它同伴在吃下午茶,又是什么一种同情呢? 如何才能让多线程达到最大吞吐?


记一次 Istio 冲刺调优
· ☕ 5 分钟

为何要调优

如果说,引入一个技术需要兴趣和冲劲,那么,让这个技术上线需要的是坚持和执着。 Cloud Native 如是, Istio 如是。
在上线前的性能测试中,Istio 的使用提供了可观察性、运维上的便利,同时也引入了痛苦:增加了服务响应延时。如何让痛苦减到最低,成了当下之急。


K8s Custom Resources(CR)
· ☕ 2 分钟

Custom Resource 的入口

请求是这样分发到 api 扩展点的:

image-20210327224709520

例如我们有 (Custom Resource)CR

1
2
3
4
5
6
7
8
apiVersion: cnat.programming-kubernetes.info/v1alpha1
kind: At
metadata:
  name: example-at
spec:
  schedule: "2019-07-03T02:00:00Z"
status:
  phase: "pending"

相应的 CustomResourceDefinition (CRD) 会是这样: