- 博客(259)
- 资源 (10)
- 收藏
- 关注
原创 kubelet开机重启为什么起不来
发现开机后直接调用 kubelet 并没有调用swapoff,于是我修改。发现这个问题解决了,重新启动服务器,kubelet自动启动了。于是我使用systemctl status kubelet。这是因为使用kubelet 需要提前swapoff。发现还是起不来,并没有起作用,于是我修改。开机启动后发现错误日志。
2025-01-10 17:25:58
299
原创 c++ cpu_features 调研使用
最近我一直在思考,如何能发觉机器的硬件能力?经过一段时间调研,我发现了谷歌的一个非常好用的cpu能力探测的工具,他的名字叫cpu_features,我们能不能发现机器硬件的cpu feature 然后上报成指标呢?很多时候我们都会去关注内核,但是忽略了硬件本身的能力;尤其是可观测领域,大家一直在追求 trace、log的采样,metric也一直围绕集中在机器使用情况进行采集。
2024-07-27 02:13:02
468
原创 你好rust
几年前就听说过rust,自己一直是个c++爱好者,所以比较抵触rust,早年还有什么rust向上突破群。一直比较抵触,直到这几年rust已经渐渐深入到linux内核、云原生可观测以及zend社区当中,所以渐渐也接受了rust。第一次安装rust,记录一下笔记。
2024-06-14 01:09:22
429
原创 频繁oomkill引发的hungtask
Pod的flow进程在写IO时进getblk(),等待可用的内存,只有拿到足够内存,才能完成ext4_journal_stop()将t_updates 递减,其对应的内核Journal线程才能被唤醒,但是由于该pod的内存占用已经达到了其运行使用的上限,且无可回收的内存,导致进程触发了pod所在memory cgroup oom,但是由于引起oom的进程因为申请不到足够的内存无法从getblk()函数里退出到do_signal触发oom,kill收到信号杀死进程释放内存,最终引起了死环。
2024-02-15 17:00:37
536
原创 内核hungTask日志引发的思考,为什么进程变成了TASK_UNINTERRUPTIBLE
当我们的进程变成了D状态,收不到任何信号了,不要慌,去使用去查看调用栈,然后再去读内核源码,就可以找到背后的真相。
2024-02-02 12:20:24
533
原创 linux内核进程调度
这是一段关于的一段读书笔记什么是进程调度?进程调度是linux 内核的一个子系统,它主要负责辅助内核决策,哪个可运行状态的进程应该被调度,以及要占用多少时间片。也就是说进程调度就是在可运行态进程之间分配优先处理器时间资源的内核子系统。
2024-01-19 10:05:56
990
原创 谁是linux SIGKILL的凶手---linux审计日志排障的杀手锏
使用strace 只可以捕获客捕捉的信号,当我们使用不可捕捉信号的时候strace 就已经回天乏术了在没有ebpf 的情况下,我们可以使用strace 找到相关系统调用,然后进一步使用审计日志,找到问题出现的根源,从而解决问题。
2024-01-09 00:48:36
1045
2
原创 日志采集nfs挂载的问题分析
Docker 采集器目录映射赢得linux 内核的UnionFs,UnionFs 会形成一层cache 目录,去把容器中的文件,联合挂载到本机文件里,比如说。但是当我去采集容器内日志的时候发现nfs 文件并没有,nfs 文件挂载位置在。nfs 是作为一个单独模块运行的,与hostpath 不一样,所以说需要去。这个目录并不在UnionFs 路径下,于是我看K8s 源码。pkg/volume/nfs/nfs.go下面。
2024-01-02 18:11:50
517
原创 K8S集群中PLEG问题排查
k8s集群排障真的很麻烦今天集群有同事找我,节点报 PLEG is not healthy 集群中有的节点出现了NotReady,这是什么原因呢?
2023-11-28 15:35:58
2375
原创 Linux内核中的overlay文件系统
Docker 内核实现容器的功能用了linux 内核中的三个特性 Namespace、Cgroup、UnionFs,今天我们来说一下UnionFs。linux UnionFs 实现的是overlay 文件系统OverlayFs 文件系统分为三层,lower 是只读层Upper 是可读写Merged 是 lower 和Upper 合并的目录。
2023-11-25 22:09:28
4858
原创 深入解析docker内核网桥
Docker 创建网桥和Veth设备都是通过AF_NETLINK 套接字实现的,我需要去读 <精通linux内核网络>这本书去调研一下。
2023-10-22 22:31:18
796
原创 linux 内核中的pid和前缀树
写这个文章的初衷是因为今天手写了一个字典树,然后写字典树以后忽然想到了之前看的技术文章,linux kernel 之前的pid 申请方式已经从 bitmap 变成了 基数树,所以打算写文章再回顾一下这种数据结构算法。这里我发现了一个问题,linux 最大的pid 是 0x8000 而不是 0xFFFF,这是为了和老的内核兼容,我们可以通过。旧的内核中pid的申请就不多说了,是使用的是bitmap去实现的,新版的换为了基数树。上面的start 就应该是要申请的pid,我们最后看next_index。
2023-10-15 23:23:44
610
原创 使用ebpf 监控linux内核中的nat转换
Linux NAT(Network Address Translation)转换是一种网络技术,用于将一个或多个私有网络内的IP地址转换为一个公共的IP地址,以便与互联网通信。在k8s业务场景中,业务组件之间的关系十分复杂.由于 Kubernetes 的网络模型假设Pod之间访问时使用的是对方Pod 的实际地址,所以一个Pod内部的应用程序看到的自己的IP地址和端口与集群内其他Pod看到的一样。它们都是Pod实际分配的IP地址。
2023-10-06 15:30:55
392
原创 java 中没有主清单属性 问题解决
查原因 打开 jar,文件,发现里面并没有把web包打进去,于是追 查原因。发现把mainClass 打包skip掉了,去掉skip,运行正常。今天用java 做了一个小项目,使用java 的mvn进行打包。
2023-08-25 13:49:51
265
原创 Envoy 物联网模块开发---串口服务器 (一)
最近业余时间想基于Envoy 开发一个串口网关,主要是想把一些 modbus、bacnet 以及 mqtt 等物联网协议接入Envoy中,当读到串口数据后可以转发成对应的网络协议。
2023-05-29 21:44:50
1295
原创 linux的namespace实战,我们在k8s中切换到另一个namespace
我们有时候做中间件会遇到以下场景这种场景适应于 Docker 以及K8s 等等场景,但是linux 内对多个进程进行了隔离,大家都是用不同的namespace,每个namespace都是弱隔离的,他隔离了不同容器的net namespace 和 mount namespace。当我们做基础架构中间件的时候需要从 namespace 去切换到不同的namespace里,去读取他们的一些网络信息和 文件信息,这就需要我们去切换 net namespace 和 mount namespace。
2023-05-27 11:43:13
1120
原创 一次关于Docker buildx 跨平台打包问题的排查
发现打包的镜像在arm里并没有正常运行,除了主程序,容器里ls 一类的工具一运行就出现。根本原因不是很清楚,但是排查思路是要看打包日志观察问题解决。发现buster-slim只编译了amd64。arm和amd64都做了打包。
2023-05-26 16:24:08
981
原创 supervisor 用其他用户启动
sudo userdel tg-bot-apisudo useradd tg-bot-api -m -d /home/tg-bot-api/ -s /bin/bash[program:telegram-bot-api]user=tg-bot-apidirectory=/home/tg-bot-apiautorestart=truestdout_logfile=/var/log/tg-bot-api.logstderr_logfile=/var/log/tg-bot-api.log.errcommand=/h
2023-04-30 10:24:32
570
原创 FRP 内网穿透,绕过防火墙控制内网机器
内网穿透,端口映射技术是一门十分古老的技术,他一直是一把双刃剑,可以绕过防火墙入侵目标服务器,也可以方便我们运维,工作。早年的lcx 或者portmap都是比较老的工具了,frp这个工具比之前的lcx或者portmap都好用,下面介绍一下这个工具。实验环境介绍(原理也是这样):一、启动远端Listener在远端开一台主机,运行frpcs 监听7000端口[common]bind_port = 7000dashboard_user = admin #控制
2023-04-22 17:17:30
1089
原创 envoy-filter-example
由于envoy的不断迭代,估计envoy-filter-example的更新迭代并没有跟上,于是出现了这个错误。最近学习开发envoy扩展,希望给envoy加一些功能,但是出现一个错误。
2023-04-03 10:27:31
317
原创 HTTP2RFC 笔记整理
相似的,终端接收到带有END_STREAM标记设置的数据DATA帧之后的任何帧,或在带有END_STREAM终止流标记且后面没有延续CONTINUATION帧的报头HEADERS帧之后收到任何帧都必须作为类型为流关闭STREAM_CLOSED的连接错误(章节5.4.1)处理。发送流错误的终端应当首先发送一个超时(GOAWAY)帧(章节6.8),并带有最近的一个成功从对等端接收帧的流的标识符。帧类型定义了剩余的帧报头和帧主体将如何被解释。0的值阻止了新的流的创建,另外它也适用于被激活的流用尽的任何限制。
2023-03-30 16:38:34
593
原创 Centos搭建k8s
默认default,kubernetes用的是k8s.io。启动kubelet。注意,如果此时查看kubelet的状态,他会无限重启,等待接收集群命令,和初始化。如果下面命令失败,可从上一节"初始化master结点"从头再来。如果init失败,可以"kubeadm reset --force"后再次尝试。,用户可在iptables和eBPF之间选择,默认是iptables。初始化master,成功将输出“初始化worker结点”的命令。已指出,在安装pod网络插件之前,coredns不会启动。
2023-03-30 12:55:39
1444
原创 使用ebpf 监控golang 应用
使用ebpf 监控grpc-go的应用,grpc-go http2 client的处理点运行流程:我们在 uprobe__probe_http2_client_operate_headers 里做一些处理,统计grpc的数据,进行遥测。编写代码过程中我们需要关注的一些事情。
2023-03-20 16:40:47
1803
3
原创 Kubernetes集群搭建
注意:[官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network)已指出,在安装pod网络插件之前,coredns不会启动。[kubeadm官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/)
2023-02-02 17:16:17
363
原创 使用ebpf 监控mysqld 内核
我们使用ebpf 监控mysql的话有两个思路去做这件事情1、kprobe -> hook 掉tcp_sendmsg 和 tcp_recvmsg 一类的内核函数去分析网络协议2、uprobe -> hook 掉 mysqld 的api函数,然后在此基础上进行统计。
2023-01-24 13:51:00
2063
4
原创 资料库的webrtc文件传输
一个简单的事情往往会倾注你的心血,也许你看到很简单往往其实没那么简单;其实想想今年业余时间的大把代码,真正能成品的好像并不多。马上年底了,写下这篇文章。每一行程序就像写小说一样,不管好不好;代码都倾注了我的心血。webrtc演示网址:文件下载测试把数据存储到百度网盘上大该有半年时间,后来发现了一些致命的问题1、发现分享外链到了10几万条之后就不能分享了2、分享的百度外链经常会被屏蔽掉3、分享速度不能过快,1小时只能分享100多条外链,如果分享的过快整个网盘的分享功能都会4、百度账号需要实名认证,很容易被人认
2022-12-04 01:25:20
1834
2
原创 关于ebpf 的co-re
底层库依靠的是libbpfkernel代码include/uapi/linux/bpf.h解释了`CO-RE`的原理。clang有内置标记`__attribute__((preserve_access_index))`(等效于`__builtin_preserve_access_index`)。ebpf.c代码这样标记所有它需要访问的结构体。clang在对象ELF文件ebpf.o中为每个这样的访问生成一个`bpf_core_relo`。
2022-11-21 19:36:41
1456
2
原创 datadog ebpf模块 offset-guess.o 问题排查解决
offset-guess.o 模块是偏移量猜想的一个模块,我估计datadog这么做的原因是处于linux内核兼容性的原因,但是这种兼容性的代码为什么会在这里出现问题呢?定位到出问题的文件是/opt/datadog-agent/embedded/share/system-probe/ebpf/offset-guess.o。我安装的是clang-14,所以我需要把/usr/bin下面的clang 替换为和我的主机兼容的。我是ubuntu系统,所以我只需要安装和我主机兼容的clang 和llvm版本就行了。
2022-11-04 16:09:31
625
原创 如何使用c语言开发ebpf程序
最近开始陆续负责ebpf相关的项目,于是对ebpf相关知识内容进行复习。ebpf的优势是避免了痛苦的kernel开发工作,如果没有ebpf之前,我们如果想做内核可视化,必须要开发kernel的驱动,但是如果我们有了ebpf,开发的程序就可以很好的和kernel隔离开,避免了kernel的崩坏。开发ebpf程序你需要掌握哪些知识1、linux 内核相关的知识2、掌握常用的ebpf 工具3、熟悉libbpf4、有一定c语言开发功底。
2022-10-28 01:04:17
1687
2
原创 c++ 巧妙的字节编码转换设计
业余时间写一些程序,想用c++ 设计一些字节转换功能函数,参考了envoy 中的设计。设计的非常巧妙,这样就可以很潇洒的做到大小端转化了,比自己用c去写宏定义简洁了很多。::from ::to会传入不同类型的变量,从而触发下面的模板。fromEndianness 是把不同的编码转换为主机字节序。toEndianness 是把主机字节序转换为对应的编码。envoy中的字节转换主要是依赖linux 的头文件。这个头文件在mac上不存在,envoy巧妙的做了兼容。发现envoy的设计真的很巧妙,在这里记录一下。
2022-10-25 00:25:35
1097
原创 kubernetes event 的内幕
学习背景:之前同事问我kubectl get event 这个命令到底是怎么回事,为什么只能拿到一段时间的,这段时间是多久?在这里写下笔记kubernetes 中 kubelet 负责维护整个pod的生命周期,当有pod创建、崩溃都会产生日志消费kubelet 产生日志发送给apiserver,然后apiserver 存储到etcd, 当然只保存 --event-ttl时间的数据。当我们使用拉取event-ttl时间的event。
2022-10-18 21:48:46
1518
2
原创 shutdown 和close的区别
1、shutdown 不会关闭掉fd,但是会忽略fd的计数器,直接关闭掉链接。2、close 会减少fd计数器,当为0的时候会close掉链接和fd。3、close调用后会直接从epoll中删除,不会触发epoll事件。4、shutdown后会触发epoll事件。5、shutdown是会冲刷缓冲区的。5、close会直接丢弃缓冲区。
2022-09-29 15:02:31
447
原创 tcpdump flags 常见标志位汇总
flags MF表示有更多分片,DF表示不分片,这里是DF,未使用分片,所以id和offset的值都可以忽略。S : SYN - 同步;P : PUSH - 推送;R : RST - 复位;F : FIN - 结束;A : ACK - 应答。
2022-09-09 14:33:15
3866
sciter-sdk-master.zip
2020-03-17
MQTT中文文档以及带书签的英文文档
2019-08-15
mqtt中文版pdf.zip
2019-07-14
linux系统编程
2019-04-17
c primer plus 中文版
2019-03-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人