Technology

Linux 控制组(cgroups)和进程隔离

控制组(cgroups)是内核的一个特性,它能限制/统计/隔离一个或者多个进程使用CPU、内存、磁盘I/O和网络。cgroups技术最开始是Google开发,最终在2.6.24版本的内核中出现。3.15和3.16版本内核将合并进重新设计的cgroups,它添加来kernfs(拆分一些sysfs逻辑)。cgroups的主要设计目标是提供一个统一的接口,它可以管理进程或者整个操作系统级别的虚拟化,包含Linux容器,或者LXC。

分析告警 kubernetes 节点 load 过高问题

负载过高分析 #

通过 linux 提供的几个命令可以从不同的纬度分析系统负载。

vmstat #

这命令能从一个系统的角度反应出服务器情况,报告虚拟内存统计信息,报告有关进程、内存、分页、块的信息 IO、陷阱、磁盘和 CPU 活动。看个例子:

1
2
3
4
5
6
7
8
$ vmstat --wide --unit M 5
procs ----------------memory---------------- ---swap--- -----io---- ---system--- ---------cpu--------
 r  b     swpd      free      buff     cache   si   so    bi    bo     in   cs     us sy  id  wa  st
 1  1        0    127691      1535     73572    0    0     0     3      0    0     2   1  97   0   0
93  0        0    127674      1535     73573    0    0     0    80   49267 67634   5   1  94   1   0
 0  2        0    127679      1535     73573    0    0     0    66   38537 56283   3   1  95   1   0
 2  2        0    127738      1535     73574    0    0     6    86   41769 61823   5   1  93   2   0
 2  0        0    127729      1535     73574    0    0    18    18   41002 59214   4   1  95   0   0

命令以及输出解释:

...

在 kubernetes 中找出使用 jdk9 及以上版本的应用

近日, Spring Cloud (SPEL) 中发现 RCE 0-day 漏洞, 为了排查 kubernetes 中所有存在安全威胁的应用. 特地开发了一个小工具来寻找。该工具基于 golang&client-go 开发, 程序会找出当前集群中所有 Running 的 pods, 然后逐个进入容器,执行 java -version 命令,将命令输出打印到文件中,使用编辑器进行查找检索即可。

Harbor 双主复制解决方案实践

既然使用了外部的服务, 那么高可用的压力自然而然的转移到了外部服务上. 我们一开始采用的外部的 NFS 共享存储服务, 由于我们团队实际情况, 我们暂时还不能保证外部存储的高可用. 同时, 鉴于我们对镜像服务高可用的迫切需求, 决定调研新的 Harbor 的高可用方案.

在 kubernetes 中找出过度使用资源的 namespaces

我们知道, 在 kubernetes 中, namespace 的资源限制在 ResourceQuota 中定义, 比如我们控制 default 名称空间使用 1核1G 的资源. 通常来讲, 由于 kubernetes 的资源控制机制, .status.used 中资源的值会小于 .status.hard 中相应资源的值. 但是也有特例. 当我们开始定义了一个较大的资源限制, 待应用部署完毕, 资源占用了很多之后, 这时调低资源限制. 此时就会出现 .status.used 中的值超过 .status.hard 中相应值的情况, 尤其是内存的限制.

[译]什么是 eBPF?

eBPF 程序是事件驱动的, 能在内核或应用程序执行到一个特定的 hook 点时执行. 预定义的 hooks 包含系统调用, 函数出/入口, 内核追踪点, 网络事件等等. 如果预定义 hook 不能满足需求, 也可以创建内核探针(kprobe)或者用户探针(uprobe), 在内核/用户应用程序的任何位置, 把探针附加到 eBPF 程序上.