![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go
文章平均质量分 69
lulu的云原生笔记
事在人为
展开
-
【博客693】alertmanager如何自定义告警template
alertmanager如何自定义告警template。原创 2023-08-12 13:26:12 · 870 阅读 · 0 评论 -
【博客686】k8s informer list-watch机制中的re-list与resync
client-go中的reflector模块首先会list apiserver获取某个资源的全量信息,然后根据list到的resourceversion来watch资源的增量信息。且希望使用client-go编写的控制器组件在与apiserver发生连接异常时,尽量的re-watch资源而不是re-list。原创 2023-08-05 14:40:18 · 1055 阅读 · 0 评论 -
【博客627】gobgp服务无损变更:graceful restart特性
当我们的bgp网关在对外宣告bgp路由的时候,如果我们网关有新的特性要发布,那么此时如果把网关停止再启动新版本,此时bgp路由会有短暂撤回再播出的过程,会有网络抖动。原创 2023-02-18 21:44:04 · 1078 阅读 · 0 评论 -
【博客623】Prometheus一条告警的触发流程与等待时间
即:group_wait决定每一个新告警组需要等待多久才发送出去,group_interval决定同一个告警组的告警间隔。因此一条告警到了alertmanager如果是一个新组那么等待group_wait的时间,如果是加入了已经有的组,那么这个组是新组则等待group_wait的时间,否则等待group_interval的时间。原创 2023-02-18 13:27:16 · 1238 阅读 · 0 评论 -
【博客620】prometheus如何优化远程读写的性能
为了解决prometheus本地存储带来的单点问题,我们一般在高可用监控架构中会使用远程存储,并通过配置prometheus的remote_write和remote_read来对接。原创 2023-02-12 15:25:10 · 1206 阅读 · 0 评论 -
【博客619】PromQL如何实现Left joins以及不同metrics之间的复杂联合查询
在限定匹配标签后,右向量中的元素可能匹配到多个左向量中的元素 因此该表达式的匹配模式为多对一,需要使用group修饰符group_left指定左向量具有更好的基数。多对一和一对多两种匹配模式指的是“一”侧的每一个向量元素可以与"多"侧的多个元素匹配的情况。在这种情况下,必须使用group修饰符:group_left或者group_right来确定哪一个向量具有更高的基数(充当“多”的角色)。多对一和一对多两种匹配模式指的是“一”侧的每一个向量元素可以与"多"侧的多个元素匹配的情况。原创 2023-02-12 14:01:04 · 2190 阅读 · 0 评论 -
【博客618】docker容器重启后读写层数据并不丢失的原理
docker run的时候其实是由create和start来完成的,create创建容器的时候会调用setRWLayer(container)创建读写层,start的时候会调用container.RWLayer.Mount(container.GetMountLabel())挂载读写层。restart的时候,则会使用新的镜像只读层 + 挂载当前容器的读写层,因为容器重启并不会丢失那些临时修改。原创 2023-02-11 22:45:55 · 2715 阅读 · 0 评论 -
【博客617】prometheus + alertmanager的搭配如何判定告警恢复
prometheus触发告警恢复:对于已经恢复的告警指标,如果之前是pending或者之前的ResolvedAt非空,且在resolvedRetention(15m)之前的,则删除此告警;否则更新告警的状态为恢复,且恢复的时间为当前时间对告警进行判断是否需要发送恢复时间是大于上次发送告警的时间,证明恢复是在告警后发生的,那么已经恢复了,需发送恢复设置告警的ValidUntil,如果这条告警过了ValidUntil的话,还没收到新firing,则代表恢复:ValidUntil = ts + max([c原创 2023-02-11 16:35:36 · 4463 阅读 · 0 评论 -
【博客616】prometheus staleness对PromQL查询的影响
运行查询时,将独立于实际的当前时间序列数据选择采样数据的时间戳。这主要是为了支持聚合(sum、avg 等)等情况,其中多个聚合时间序列在时间上不完全对齐。由于它们的独立性,Prometheus 需要在这些时间戳处为每个相关时间序列分配一个值。它通过简单地获取此时间戳之前的最新样本来实现。如果目标抓取或规则评估不再返回以前存在的时间序列的样本,则该时间序列将被标记为陈旧。如果一个目标被删除,它之前返回的时间序列将很快被标记为过时的。原创 2023-02-11 15:27:24 · 848 阅读 · 0 评论 -
【博客615】通过systemd设置cgroup来限制服务资源争抢
我们的宿主机上通常会用systemctl来管理一些agent服务,此时我们需要限制服务的cpu,memory等资源用量,以防止服务之前互相争抢资源,导致某些核心agent运行异常。原创 2023-02-11 12:28:26 · 1559 阅读 · 0 评论 -
【博客606】k8s如何查看pod崩溃前的日志及其原理
kubelet实现previous的原理:将pod的日志存放在/var/log/pods/podname,并且是链接文件,链接到docker的容器的日志文件,同时kubelet还会保留上一个容器,同时有一个链接文件链接到pod上一个崩溃的容器的日志文件,使用previous就是查看的这个文件。kubelet读的是/var/log/pods/下的日志文件,–previous读的也是/var/log/pods/下的日志文件,且专门有个链接文件来指向上一个退出容器的日志文件,以此来获取容器崩溃前的日志。原创 2023-02-04 14:51:07 · 6605 阅读 · 5 评论 -
【博客604】kubelet中的容器与镜像的垃圾回收机制
kl.containerGC.GarbageCollect 调用的是 ContainerGC manager 中的方法,ContainerGC 是在 NewMainKubelet 中初始化的,ContainerGC 在初始化时需要指定一个 runtime,该 runtime 即 ContainerRuntime,在 kubelet 中即 kubeGenericRuntimeManager,也是在 NewMainKubelet 中初始化的。原创 2023-02-02 20:51:59 · 1027 阅读 · 1 评论 -
【博客601】本地通信使用127.0.0.1会比使用本地ip更快吗?
大部分人都会认为访问本机 Server 的话,用 127.0.0.1 更快。原因是直觉上认为访问 IP 就会经过网卡。其实内核知道本机上所有的 IP,只要发现目的地址是本机 IP 就可以全走 loopback 回环设备了。本机其它 IP 和 127.0.0.1 一样,也是不用过物理网卡的,所以访问它们性能开销基本一样!原创 2023-01-29 22:13:45 · 1485 阅读 · 1 评论 -
【博客600】将iptables流量转到用户态进行特殊化处理
当我们需要将iptables匹配到的流量送到用户态来进行特殊化处理。原创 2023-01-29 21:59:58 · 1156 阅读 · 0 评论 -
【博客599】k8s利用client-go实现leader election
k8s利用client-go实现leader election。原创 2023-01-29 21:50:36 · 198 阅读 · 0 评论 -
【博客594】k8s进行cpu绑核优化后,再配合NUMA 亲和性以进一步优化cpu性能
在多cpu核心节点上,此时往往节点是NUMA节点的,我们一般开启了cpu绑核后,此时还可以通过开启NUMA 亲和性,以进一步优化cpu性能,这种优化在游戏训练等场景下,收益尤为明显。原创 2023-01-17 22:32:28 · 1819 阅读 · 0 评论 -
【博客593】k8s为pod进行cpu绑核以进一步提高性能
在k8s中,对于游戏训练等任务场景下,游戏worker模拟真实玩家时,性能对cpu依赖程度很高,此时如果对pod进行cpu绑核能够一定程度上再提高性能。原创 2023-01-17 22:18:43 · 3801 阅读 · 0 评论 -
【博客592】keepalived同时配置:vip + lvs负载均衡
在DR模式下时,会存在一个问题,所有的realserver和director都配置了VIP,从网络模型中,我们知道,最终传输的是mac地址,那么这个时候,到底谁的mac地址是准确的呢?我们要保证请求的VIP必须是director,这样我们的负载均衡才是生效的,因此要在realserver上进行ARP抑制配置,禁止它处理外部的arp请求,也不允许自己向外部广播ARP数据。lvs改写的是mac地址的,基于mac地址的通讯方式是2层的,所以需要限制在一个vlan或者局域网下。原创 2023-01-17 21:48:43 · 1497 阅读 · 0 评论 -
【博客591】LVS的DR和NAT模式下要注意的缺陷
在DR模式下时,会存在一个问题,所有的realserver和director都配置了VIP,从网络模型中,我们知道,最终传输的是mac地址,那么这个时候,到底谁的mac地址是准确的呢?我们要保证请求的VIP必须是director,这样我们的负载均衡才是生效的,因此要在realserver上进行ARP抑制配置,禁止它处理外部的arp请求,也不允许自己向外部广播ARP数据。lvs改写的是mac地址的,基于mac地址的通讯方式是2层的,所以需要限制在一个vlan或者局域网下。原创 2023-01-16 23:07:42 · 948 阅读 · 0 评论 -
【博客584】pod多种方式挂载远程存储
【代码】【博客584】pod多种方式挂载远程存储。原创 2023-01-14 22:54:49 · 600 阅读 · 0 评论 -
【 博客583】k8s常用集群运维操作命令汇总
k8s常用集群操作命令汇总。原创 2023-01-14 11:22:43 · 1002 阅读 · 0 评论 -
【博客571】“时序敏感应用“ 如何prometheus自定义上报时间戳
上报时使用Timestamp方法来创建metrics参考:NewMetricWithTimestampimport ("net/http""time"ch原创 2023-01-07 11:31:03 · 3214 阅读 · 6 评论 -
【博客567】http/2 goaway frame 与 grpc graceful restart
HTTP/2 中新的二进制框架层消除了这些限制,并通过允许客户端和服务器将 HTTP 消息分解为独立的帧、交织它们,然后在另一端重新组合它们,实现了完整的请求和响应多路复用。例如:快照捕获同一连接内正在运行的多个流。客户端正在向服务器传输一个DATA帧(流 5),而服务器正在为流 1 和 3 向客户端传输一个交错的帧序列。因此,存在三个并行流。将 HTTP 消息分解为独立帧、交织它们,然后在另一端重新组合它们的能力是 HTTP/2 最重要的增强功能。原创 2022-12-25 16:19:02 · 1254 阅读 · 0 评论 -
【博客556】检验k8s下gpu环境是否就绪
检验k8s下gpu环境是否就绪。原创 2022-12-12 21:51:22 · 694 阅读 · 0 评论 -
【博客555】prometheus的step,durations,rate interval,scrape interval对数据查询结果的影响
比如:采集点0s和10s,你按照step的5s来采集结果,那你在0s和5s时两个点都取了0s的结果,因为下一个data point在10s才有,可能导致部分峰值信息被遗漏。重复执行多次,得到不同结果:查询今天0点到6点,和今天1点到7点这两段的数据,都包含了今天3点的数据结果,但是两次区间对今天3点附近的展示结果却不一样,可能按照0点到6点查询,3点的时候有峰值,按照1点到7点查询,则峰值不见卢,为什么对历史数据查询会不一样呢,历史数据不是既定事实了吗?查询range query时,step是有用的。原创 2022-12-11 12:14:00 · 2517 阅读 · 0 评论 -
【博客549】利用go的lazy load实现defer的延迟判断
defer实现延迟判断原创 2022-12-03 12:01:31 · 174 阅读 · 0 评论 -
【博客544】golang pprof性能调试:寻找memory瓶颈
火焰图的调用顺序从下到上,每个方块代表一个函数,它上面一层表示这个函数会调用哪些函数,方块的大小代表了占用 CPU 使用时长长短。查看最消耗memory的地方:可以看到我们的concat逻辑函数就是memoory高消耗的地方。3、在交互命令中,使用top,list来查看最消耗memory的地方。查看程序暴露的/debug/pprof/ api。示例:随机拼接字符串。原创 2022-11-27 18:19:54 · 808 阅读 · 0 评论 -
【博客543】golang pprof性能调试:寻找cpu瓶颈
pprof debug原创 2022-11-27 17:54:26 · 1008 阅读 · 0 评论 -
【博客536】警惕go的 “lazy load“ 机制
go的lazy load机制,也即:运行时加载。就是对变量的引用等到真正运行才解析其真正对应的值。原创 2022-11-19 14:20:20 · 278 阅读 · 0 评论