Technology

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,建议升级内核

...

使用Kubespray安装kubernetes的教程

本文使用 kubespray 容器部署 kubernetes v1.22, 提供了从国外搬运的离线软件包/容器镜像. 仅需要几步即可部署高可用集群. 所有离线文件都来自官方下载 kubespray 安装过程会进行软件包验证, 放心使用.

前提 #

  • 禁用防火墙
  • 重要: 本文使用 kubespray 的容器环境部署, 为避免影响节点部署(特别是 Runtime 部署), 所以需要一台独立于集群外的服务器执行下面的命令, 这台服务器安装 docker 19.03+ 并到所有节点SSH免密进入.
  • 目标服务器要允许 IPv4 转发, 如果要给 pods 和 services 用 IPv6, 目标服务器要允许 IPv6 转发.

注意: 下面配置是适合 kubespray 的配置, 实际配置取决于集群规模.

...

kubernetes 中的 pod 究竟是什么

前言 #

kubernetes 中 pod 的设计是一个伟大的发明, 今天我很有必要去聊一下 pod 和 container, 探究一下它们究竟是什么? kubernetes 官方文档中关于 pod 概念介绍提供了一个完整的解释, 但写的不够详细, 表达过于专业, 但还是很推荐大家阅读一下. 当然这篇文档应该更接地气.

容器真的存在吗? #

linux 中是没有容器这个概念的, 容器就是 linux 中的普通进程, 它使用了 linux 内核提供的两个重要的特性: namespace & cgroups.

...