Technology

[译]什么是 eBPF?

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

Linux 常见错误码

下表是 Linux 操作系统一些常见的错误代码和对应的错误描述 1 EPERM Operation not permitted 2 ENOENT No such file or directory

load average 过高, mount nfs 问题处理

周末, 有一台服务器告警: 系统负载过高, 最高的时候都已经到 100 +, 以下是排查&处理的具体过程.

发现的问题/现象 #

uptime 显示 load average 都在70+ #

因为服务器是40核心, 原则上负载40是满负荷, 现在明显存在大量等待的任务. 继续往下分析进程, 看具体那个进程一直在堵塞.

ps -ef 执行到某一个进程就卡住了 #

命令执行如下:

...

容器化部署 openldap

使用容器化安装非常便捷, 参考 osixia/openldap仓库使用说明安装即可, 如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
docker stop openldap && docker rm openldap && \
docker run --name openldap --detach \
    -p 389:389 \
    -p 636:636 \
    --env LDAP_ORGANISATION="Rutron Net" \
    --env LDAP_DOMAIN="rutron.net" \
    --env LDAP_ADMIN_PASSWORD="your-password" \
    --env LDAP_READONLY_USER=true \
    --env LDAP_TLS_VERIFY_CLIENT=try \
    --volume /data/openldap/data:/var/lib/ldap \
    --volume /data/openldap/slapd.d:/etc/ldap/slapd.d \
    --hostname ldap.rutron.net \
    osixia/openldap:1.5.0

好了, 现在该服务同时支持 ldap 和 ldaps 协议, 有一个初始化的账号 readonly/readonly, 可以使用了~

...

解决 kubelet cannot allocate memory 错误

问题描述 #

查看 pod 相关 events 如下:

1
2
3
4
5
Events:
  Type     Reason                    Age                   From               Message
  ----     ------                    ----                  ----               -------
  Normal   Scheduled                 18m                   default-scheduler  Successfully assigned container-186002196200947712/itms-5f6d7798-wrpjj to 10.206.65.144
  Warning  FailedCreatePodContainer  3m31s (x71 over 18m)  kubelet            unable to ensure pod container exists: failed to create container for [kubepods burstable pod31f4c93c-c3a1-49ad-b091-0802c5f1d396] : mkdir /sys/fs/cgroup/memory/kubepods/burstable/pod31f4c93c-c3a1-49ad-b091-0802c5f1d396: cannot allocate memory

这是内核bug,建议升级内核

...