- 博客(32)
- 资源 (10)
- 收藏
- 关注
原创 CPython的全局解释器锁-GIL即将成为历史
帧对象也不是线程安全的。最近,Cython 的维护者添加了对无 GIL 构建的支持,但你仍然需要确保你的代码是线程安全的。一般来说,任何在 Python 中使用的线程(而不是在外部,如扩展模块中使用的线程)都应该在 Python 中创建。无 GIL 的 Python 最大的障碍之一是确保用 C(或具有 C 兼容接口的语言)编写的 CPython 扩展能够尊重新的无 GIL 设计。举个例子,如果你有一个任务需要写入大量文件,如果每个任务都单独运行在一个线程中,效率会较低,因为写入文件本身是一个。
2025-07-18 11:14:22
278
原创 “Argument list too long”,为什么?
使用find的“-print0”选项主要为了解决文件名包含空格的情况,加了这个选项,文件名与文件名之间就会直接连接起来,xargs使用选项“-0”,可以区分这些用“null”连接起来的文件名,这样就可以正常使用rm命令。其实是Linux内核限制导致,内核限制命令行参数长度不能超过128K,如何规避这个限制,以上面的“rm *”命令为例,改写如下,
2025-07-17 14:35:07
38
原创 如何通过公网IP访问部署在kubernetes中的服务?
有时候业主的域名没有申请下来,我们会配置临时的域名,测试同事配置主机hosts来完成功能验证,等功能验证完毕后,交给业主使用,业主配置hosts比较麻烦,这里通过配置Nginx直接使用公网IP访问服务。客户端访问服务时直接使用公网IP地址,请求到达Nginx时没有携带主机头“Host”,请求到达后端k8s集群返回是404状态码,技巧就是在Nginx将请求转发到后端k8s集群时,人为配置上“Host”主机头,这样请求就可以路由到正确的Pod,在k8s集群上配置了域名为“www.example.com”,
2025-07-11 16:25:24
280
原创 你真的了解Nginx的proxy_pass指令吗?
结论:location指令配置了“/abc”,proxy_pass指令后的链接有路径(即"/app/"),Nginx将客户端原始的“/abc”替换成“/app”,然后转交后端。结论:proxy_pass指令后的链接有路径(即"/app/"),Nginx将“/app”插入客户端原始的路径前,然后转交后端。结论:proxy_pass指令后的链接没有路径(仅一个"/"也是路径),Nginx原样将请求转发后端。浏览器---->Nginx---->Web后端服务(由Python Flask框架实现)
2025-07-09 10:41:52
202
原创 k8s面试题-Pod定义中的command与args
从上面的输出看,Dockerfile中ENTRYPOINT指定的命令echo没有被覆盖,运行时指定的命令“ip a”被当成echo命令的参数。ENTRYPOINT指定的命令当使用docker来运行镜像时,是不能被覆盖的,但是在k8s中,当pod定义中同时配置command和args时会被覆盖。pod中指定的command和args生效了,日志输出了pod的IP地址信息。在k8s的资源对象pod中,经常会使用command和args。docker运行镜像时,指定命令“ip a”,运行后,查看pod的日志,
2025-07-02 14:27:09
214
原创 配置Systemd的定时器-timer
如果一个服务“myapp.service”需要定期执行,只需要在目录“/etc/systemd/system”下创建一个同名但以“.timer”结尾的文件即可,这里要创建的定时器Unit文件就是“myapp.timer”,这样它们就可以自动绑定。要在麒麟V10中修改采样间隔,更新文件“/usr/lib/systemd/system/sysstat-collect.timer”,这里注意,服务的单元文件不需要“[Install]”部分,它的“[Install]”定义在定时器单元文件中。
2025-06-30 18:03:46
394
原创 Cgroup初探
在生产环境中,运行在服务器中的程序如果对系统资源(CPU、内存等)过量使用,可能导致服务器Hang住,影响其他程序的正常运行。这里使用了两个controller,cpuset和memory,cg1里面的进程仅能使用cpu1和cpu2,使用的内存不能超过1G,cg2类似。接着定义cgrules.conf文件,这个文件的作用是将选定进程和cgroup绑定。删除cgroup,执行命令cgdelete删除,语法如下:cgdelete subsystems:path,path是相对路径。使用下面命令使规则生效。
2025-06-30 15:53:33
377
原创 Minio的扩容
本文对minio的扩容做了简单介绍,生产环境需要规划好服务器的数量和每台服务器上硬盘的数量,每个池要留够硬盘用于存放校验数据(parity),防止设计不合理降低高可用性。加入新的服务池(server pool)后,集群容器翻倍,但是原有的数据不会自动从Pool 1移动到Pool 2,可以看到Pool 2的空间并没有使用,为了保证客户端访问minio的稳定性,使用Nginx作为前端负载均衡,Nginx的配置文件如下,,安装完成后不要启动,修改环境变量文件/etc/default/minio,
2025-06-27 15:06:24
545
原创 Kubernetes中的容器生命周期回调
这里直接给出结论,因为redis使用的内存量超过1024M,进程被kubernetes杀死后又重启了,配置的密码失效,后端程序通过带凭据的方式访问redis,导致访问失败。有个私有化部署的项目需要跑一个redis用作缓存,因redis中的数据不需要持久化,选择在Kubernetes中通过deployment的方式部署,下面是deployment的代码片段,什么是回调,它是一种事件执行机制,将指定的函数注册到特定事件上,在事件发生前或发生后执行注册的函数。,此时运行的redis是没有配置访问密码的。
2025-06-26 10:00:47
335
1
原创 如何给Kubernetes的Dashboard创建合适的Token?
默认Dashboard在安装后,会创建一个服务账号“ dashboard-read-user”,该服务账号绑定集群角色“dashboard-read-clusterrole”,该角色可以只读访问整个集群。比如有一个命名空间为“rocket”,创建一个服务账号“manage-rocket”,该账号对“rocket”命名空间的pod资源有管理权限,对集群的其他资源有只读权限,服务账号“dashboard-read-user” 的权限不足,不能完成日常的维护任务,比如重启pod,增加pod的副本数等,
2025-06-25 16:31:27
547
原创 谷歌Agent2Agent项目迁移至Linux基金会
Linux 基金会表示,在 Linux 基金会的治理下,A2A 将保持中立,强调包容性贡献,并继续专注于协议的可扩展性、安全性和实际应用性。“通过加入 Linux 基金会,A2A 确保了长期的中立性、协作性和治理,这将释放出下一代由代理到代理驱动的生产力。”“通过与 Linux 基金会和领先的科技提供商合作,我们将在一个值得信赖、开放治理的框架下,实现更多创新和有价值的 AI 功能。该协议由谷歌开发,是一个开放协议,旨在实现代理 AI 之间的互操作性,并在不同系统和平台之间实现可信代理通信。
2025-06-25 14:00:33
195
原创 Kubernetes中探测容器的三种探针
如果三个探针同时存在,先执行 StartupProbe 探针,其他两个探针将会被暂时禁用,直到 pod 满足 StartupProbe 探针配置的条件。通过使用不同类型的探针,可以检测应用程序的各种状态,从而帮助自动化地管理容器集群,并提高应用程序的可靠性和可用性。探针的类型和检测方式可以根据应用程序的需求进行配置。Kubernetes 探针(Probe)是用于检测容器内部状态的机制,有以下三种探针,分别是Liveness、Readiness、Startup,前两种使用的比较多。用于确定容器是否仍在运行。
2025-06-24 13:55:40
362
原创 在Ingress NGINX Controller中如何配置gzip压缩
Ingress-nginx修改全局作用域的配置,大都会使用ConfigMap实现,对于"server"作用域的修改可以使用"annotations",比如要修改的域名为"app.example.com",找到包含这个域名的Ingress,增加下面配置即可,Nginx使用ngx_http_gzip_module模块来压缩返回给浏览器的数据,Ingress-nginx默认是启用这个模块的,所以,开启压缩只需要修改配置即可,不需要再考虑模块ngx_http_gzip_module的集成,
2025-06-24 13:52:11
265
原创 如何配置Minio桶复制
在单向复制中,源Minio中的对象写入与删除会同步到目的Minio,但是目的Minio上的对象写入及删除操作不会同步到源Minio中,双向复制的话,就可以。这里有一点需要注意,Minio的桶复制可以对目的Minio执行正常的写入和删除操作,这和MySQL的主从复制不一样,在MySQL的主从复制中,是不能对备库做写入操作的。在对象存储中,文件都是放在一个个的桶中,桶是对象存储里面的一个概念,可以想象成文件系统的一个目录,客户端上传的文件会被存放到预先选择的桶中。连接Minio A执行复制操作,其中。
2025-06-23 14:42:55
362
原创 Kubernetes中Dashboard部署
您可以使用Dashboard将容器化应用程序部署到 Kubernetes 集群中,排查容器化应用程序的问题,并管理集群资源。为了保护您的集群数据,Dashboard默认使用最小的 RBAC 配置进行部署。上面的方法临时使用可以,长期使用的话,可以使用nginx ingress controller创建一个“ingress”对象。目前 Kubernetes Dashboard 仅支持基于 Helm 的安装,因为它更快,并且能让我们更好地控制 Dashboard 运行所需的所有依赖项。
2025-06-20 17:09:43
246
原创 Ceph块存储
在Ceph中,有几个daemon进程,创建用户权限时,要选定访问的daemon进程并分配所需权限,以上面的命令中授予访问mon进程的权限“profile rbd”为例(为了规避翻译的偏差,直接引用官方文档),利用Ceph可以将存储整合起来,一套系统涵盖存储的各个方面,而且Ceph的水平扩容也比较方便,当存储空间不足时,可以快速进行扩容。创建目录“/etc/ceph/”,将上面生成的文件ceph.keyring拷贝进去,并创建配置文件ceph.conf,内容如下,安装ceph客户端包,实际执行,输出如下,
2025-06-19 14:47:02
382
原创 如何让服务器CPU跑的高一些?
服务器的CPU跑的过高不是什么好事情,但如果CPU长时间维持一个较低的使用率也不是一件好事情,比如我们在大数据中心的几台服务器,就是因为CPU长时间使用率较低被通报。为了让服务器看起来很忙,可以依赖stress命令。脚本不复杂,主逻辑放在一个死循环里面,根据服务器的实际情况修改变量“max_cpus”的值,为了让监控效果更真实些,stress命令运行5到10秒,命令“$((RANDOM % 6 + 5))”实现。stress命令还可以模拟硬盘IO和内存的使用,如果有使用要求,参考上面的脚本自行实现。
2025-06-18 13:57:43
467
原创 配置Nginx TCP转发
Nginx一般用在HTTP的转发,TCP的转发大都会使用HAProxy。这样推送服务器就可以使用Nginx服务器的公网地址+6020端口访问到后端应用服务器。这里有个问题,当推送服务器使用proxy.example.com这个域名访问进来的时候,后端应用服务器看到的是哪个主机头呢?上面的配置对于后端应用服务是非HTTP的TCP服务和HTTP服务都适合。如果后端服务是HTTP服务,也可以使用下面的配置,,如果这不是你想要的,可以使用Nginx的“proxy_set_header”指令。
2025-06-18 13:53:08
350
原创 搞懂Kubernetes的Taints和Tolerations
有两种思路,一是手动去掉这个节点的“Taints”,二是配置Pod的容忍度,容忍这个“Taints”,因为Redis Pod使用的硬盘空间不大,这里选择第二种,编辑Redis的“deployments”,增加下面配置,因为这个redis使用了“HostPath”类型的卷,必须要调度到服务器10.0.10.123上,从上图看出是因为服务器加了“Taints”导致,查看服务器10.0.10.123的“Taints”详情,这样配置后,你的Pod就可以调度到有上面“Taints”的节点上。
2025-06-16 09:55:26
251
原创 Dnsmasq一个超有用的选项
Dnsmasq上游服务器使用的是腾讯DNS服务器119.29.29.29,dig命令同样得不到结果(公共DNS因为请求量大,会不太稳定),公司内网使用的DNS服务是用软件Dnsmasq搭建的,最近经常有同事反映一些网站打不开,先前都是可以的。配置文件“/etc/dnsmasq.conf”中加入两个上游DNS服务器,一个阿里的223.5.5.5,另一个还是使用腾讯的DNS,这样就相当于给上游的DNS服务器加了负载均衡,理论上一台出问题也不会影响整个解析结果。运行了几周,再没有解析超时的情况出现。
2025-06-13 13:56:33
123
原创 为什么通过Nginx下载大文件有时会不完整?
这个缓存用来存放从上游服务器接收到的数据,如果收到的数据将缓存填满,Nginx会将收到的数据存放在硬盘中的一个临时文件,文件最大大小由参数“proxy_max_temp_file_size”控制,默认是1G,这个文件也填满后,Nginx将不去请求上游服务器,Nginx与上游的连接默认保持60s,超时后连接会断开。明白这个原理后,我们禁用掉缓存,这样Nginx从上游服务器收到的数据将不在本地缓存,收到上游返回的数据后将立即发送给客户,整条下载路径的速度完全由客户端控制,这样就可以解决这个问题。
2025-06-11 09:37:35
423
原创 对象存储代理那些事
访问公有云上的对象存储一般使用域名,这个域名映射的IP地址一般是随机变动的,如果要配置IP白名单就不方便,可以使用Nginx来做代理规避这个问题。Minio使用的持久化存储是“minio-pvc”,为了减少网络的传输带宽,还配置了文件压缩。在Minio里面访问指定桶里的文件,URL访问前缀是“域名/桶名”,访问的桶是“frontend”,这里配置了对应的路径,在测试或私有化部署环境中,公有云上的对象存储使用起来并不方便,可以使用Minio替代。这里以阿里云上的OSS为例,比如一个桶的访问域名是“
2025-06-05 09:30:07
145
原创 如何在kubernetes中配置转发和代理
因业主的要求,对原本运行在数据中心的服务(域名是www.a-site.com)做了迁移,服务迁移后,新的域名为“www.b-site.com”,原有的域名因已广播出去,不能下线。客户访问域名“www.a-site.com”也需要跳转到服务,这里通过配置转发来解决,具体的配置如下,上面配置中,“www.a-site.com”是使用https访问的,通过配置代理,请求路径以“/outer/”开头的链接都将代理到第三方的接口,这样Chrome就不会报“Mixed Content”异常了。
2025-06-04 16:35:31
355
原创 玩转Grafana-Infinity插件使用
公司公有云上有很多购买的服务器,不少服务器使用率不高,我们需要通过采集公有云的监控数据将使用率低的服务器信息整合到Grafana上,对长期使用率低的服务器进行降配。服务器的内存和CPU使用情况等,公有云平台会周期性采样,通过,人为设置阈值,将低于指定阈值的服务器信息展示在Grafana上,方便各业务线同事进行降配。因为服务器很多,实时查询并计算这些数据速度慢,也没有这个必要,我们选择每天晚上20:00执行脚本,并将数据存储在一个文件上。Grafana插件Infinity。
2025-06-03 11:00:22
379
原创 Cherry Studio接入OpenRouter API
它通过单一 API 聚合了来自不同供应商(如 OpenAI、Anthropic、Google、Meta 等)的数百种 AI 模型,简化了模型选择、集成和使用的过程。OpenRouter 的核心目标是优化价格、性能和可用性,让用户能够根据需求灵活选择最适合的模型,同时享受更高的效率和成本效益。二者结合最大的好处是OpenRouter 聚合了数百种来自不同供应商的模型,包括最新的前沿模型(如 GPT-4o、Claude 3.5、Grok 3)和开源模型(如 LLaMA 系列、Mixtral)。
2025-04-10 13:50:31
841
原创 使用协程从Zabbix中获取低负载服务器清单
上一篇使用的脚本没有使用并发,在请求的服务器数目较多时,耗时很长,基于此,这里使用python 3的模块“asyncio”和“aiohttp”来实现并发。实际测试中,请求服务器数量不变,且增大CPU和内存历史数据为30天,耗时不到2分28秒,比原来未用并发机制快1分30秒左右,创建一个公共的http请求函数,为了应对请求量大导致Zabbix API服务响应失败的问题,使用了回退机制,调用函数对每次的请求数也做了限制,每次请求10台主机的信息,以防Zabbix服务器的响应异常,关于脚本编写的背景和环境参考。
2025-03-19 14:53:05
318
原创 Python脚本实现Zabbix监控服务器低资源使用率告警
编写Python脚本,从Zabbix服务器的API接口采集一周以内CPU和内存的使用率数据,求平均值,如果值低于设定的阈值则发邮件告警处理。
2025-02-28 14:44:39
496
原创 从零开始在线安装Kubernetes
以上就是在CentOS操作系统下,在线安装kubernetes的方法,这里有个问题,api server没有使用负载均衡,当master-1服务器上运行的api server异常后,整个集群就出问题了,可以部署一个nginx或haproxy在四层上代理对api server的访问,后端是运行在master-1、master-2、master-3上的api server。默认kube-proxy工作模式为iptables,在集群服务不多的时候,可以不用修改,如果集群服务较多,建议修改工作模式为ipvs。
2024-11-17 22:18:08
848
原创 从零开始-kubernetes搭建
如果想对Kubernetes工作原理有更深入的了解或者准备考取CKA/CKS认证,可以对Kubernetes进行一次从零开始的搭建。
2024-10-12 13:58:42
217
原创 Calico异常处理一则
使用kubectl top nodes命令看,集群worker节点的内存使用较高,推测是这个原因导致,已经加了节点,这个问题没有再出现。判断是calico的问题,执行下面命令删除已有的calico-node,让集群创建新的calico-node即可,
2024-10-09 17:09:37
519
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人