诺志
软硬件开发技术笔记

前置概念
1.spdkcsi : spdk提供的csi对接插件,其本身不在spdk代码中,为spdk为k8s-csi提供的对接插件
2.spdk-server : 真正提供存储服务的spdk服务器节点,接收业务端connect/login/io请求
3.spdk-server-api : spdk-serve本身提供的是基于socket文件的rpc统信,为对外暴露更通用的配置接口,spdk提供了rpc_http_proxy.py代理,该代理的作用是将apt-restful请求转换为spdk-server-rpc请求
4.调用顺序: k8s-> spdkcsi -> spdk-server-api -> spdk-server-rpc -> spdk-server

配置文件用于告知spdk插件,spdk-server地址和支持的传输协议,用于spdkcsi插件向spdk-server(以rpc_http_proxy.py方式运行的http代理转发给spdk-server)发送配置请求

配置spdk节点地址和传输协议支持通过deploy时的配置项ConfigMap

...

部署k8s提示cgroups v1不再支持cgroups v1 support is in maintenance mode, please migrate to cgroups v2
参见: https://kubernetes.io/blog/2024/08/14/kubernetes-1-31-moving-cgroup-v1-support-maintenance-mode/

该限制是从k8s-1.31开始,实际不影响使用,但是新功能不再支持,如果想将cgroup迁移到v2,可按如下方式设置
注意: 仅比较新的内核支持cgroup-v2,老的操作系统可能无法开启

...

目前已知的3种方法都有一定的局限性,不能很完美实现当进程内存泄漏时杀掉进程
1. systemd的服务配置中增加MemoryMax=XXX的配置项,该配置项仅能限住物理内存,如何服务器未配置swap,内存达到时则会触发oom杀掉进程。如果服务器配置swap,将继续消耗swap直到swap也消耗完,systemd还有一个MemorySwapMax=XXX配置项可以限制swap,但是除非很新的操作系统使用了cgroup2该配置项才能生效。
2. systemd配置的MemoryMax=XXX参数,会同时作用到被主进程拉起的其他进程,如主进程拉起mysql进程,虽然systemd的MemoryMax参数是作用在主进程上,但是mysql会继承该限制。原因是MemoryMax参数是通过cgroup生效的,systemd启动的主进程和子进程都将在该cgroup组中。
3. ulimit和prlimit设置进程最大内存地址,这两种方式是作用在系统函数行为上,比如malloc分配内存时被限制了内存上限,内存分配不出来的时候panic,但是如果上层调用捕获了这个异常,程序就不会退出了,并不会处罚oom杀掉进程。

当前机器cgroup为v1,若是v2将显示为cgroup2fs

测试脚本
该脚本使用python构造一个很大的内存,触发方式是在/root下创建start文件,touch /root/start,用其他语言可以类似

...

程序运行过程中发现有内存泄漏,需要主动触发coredump用于分析,可以按以下步骤操作

本质是通过kill命令发送信号触发coredump,可以触发的信号有很多,常用的的信号SIGABRTSIGSEGV

...

温故知新,任何一个初学linux的教程,都会介绍man的使用,以前感觉作用不大
偶尔在别人的博文中看到man的介绍,才正儿八经的看了下man的使用,记录一下
通过几个例子介绍下不同类别的帮助信息

操作系统默认带有man命令,但是内容显示的比较少,需要安装补充内容

部分帮助信息有中文版本,可以通过安装下面的包获取中文帮助信息

...

温故知新,任何一个初学linux的教程,都会介绍man的使用,以前感觉作用不大
偶尔在别人的博文中看到man的介绍,才正儿八经的看了下man的使用,记录一下
通过几个例子介绍下不同类别的帮助信息

操作系统默认带有man命令,但是内容显示的比较少,需要安装补充内容

部分帮助信息有中文版本,可以通过安装下面的包获取中文帮助信息

...
2022-02-23

简单一个例子介绍eventfd的使用,其中包括阻塞和非阻塞两种方式

...

从源码安装python3
本文在centos7.6系统上实践

此处下载最新的3.9.9版本,其他版本可以自行到https://www.python.org/ftp/python/查看
/opt/python-3.9.9可以根据习惯更换路径

python3安装后,不要卸载原有python2的任何包,因为python3和python2有很多不兼容的地方
操作系统有很多工具都依赖原有的python2,直接替换会导致包括在yum在内的很多包不可用

...

简单介绍virtualenv的使用和原理
本文在centos7.6系统上实践

可以通过pip或者yum安装virtualenv,推荐使用pip安装,因为pip安装版本较新,老版本有些参数已经在新版本中废弃
pip安装virtualenv

yum安装virtualenv

...

本文演示如何在docker中运行zookeeper,以及链接方式
centos7.6系统上实验,其他环境操作类似

已经搭建好docker环境的本章节可以跳过
docker基本使用可以参见之前的文章,此处仅简单描述安装docker过程
宿主机准备源:

安装docker并启动

...
分类
2篇
c
1篇
8篇
18篇
8篇
2篇
k8s
2篇
搜索