K3s更换底层DataStore实现简易HA  [draft]

前言 K3s 自带的 SQLite 应付普通的嵌入式小服务来说绰绰有余,但是对于公司这种动辄吃掉几个核的高频调度来说,虽然勉强能支撑起日常的响应,却总有时候出现奇奇怪怪的 BUG,我已经不止一次碰到了因为默认 ServiceAccount 和 Namespace 中的资源无法做实时绑定,导致 SpringCloud 一直无法正常启动的问题了,虽然可以通过万能重启做解决,但这远算不上高可用边缘部署方案 下面是官方给 K3s 画的一副简图,我们之前已经将默认的 LB 换成了 MetaLB 并表示效果非常优秀,这次我们也来缝缝补补,按照文档来说,K3s 支持以下的外接数据库 K3s supports the following datastore options Embedded SQLite PostgreSQL (certified against versions 10.7, 11.5, and 14.2) MySQL (certified against versions 5.7 and 8.0) MariaDB (certified against version 10.6.8) Etcd (certified against version 3.5.4) Embedded etcd for High Availability 因为想要为以后的 Cluster Metrics 做接口准备,所以就暂时不考虑内嵌 Etcd 的方式,而是选择自己外接,这样对于整个集群的运行状况有一个直观的了解,也方便做监控 —— K3s 砍去了太多东西换取轻量化 我们都知道 K8s 的默认 Datastore 是 Etcd,而 K3s 则是使用了一种称为 Kine 的组件将 Etcd 的 K/V 操作翻译为了关系数据库的语法,Kine 将自己的接口暴露给 K3s ApiServer,也就是说,在集群组件看起来,自己还是针对 Etcd 进行读写,然而如果我们设置真正的 Etcd Backend,Kine 会略过并直接暴露真实的 Etcd-servers 给 K3s ApiServer...

November 22, 2022 · 9 min · Sxueck

记一次服务器异常延迟问题  [draft]

公司的某一台即将交付的生产环境数据库处理异步请求忽然异常缓慢,而且同事反馈说安装软件也有卡顿情况。 问题排查流程 初步尝试 首先我尝试将 PgSQL 服务进行重启,因为服务的异步处理速度延迟达到了1秒之久,况且该服务的依赖性没有那么高 $ kubectl rollout restart -n databases statefulset postgres-postgresql 结果出现了麻烦,整个 Pods 一直处于 Terminating 状态,一开始还以为是 PreStop 任务没有处理结束导致堵塞,后来发现 PgSQL 的日志已经在几分钟之前就不输出了,看起来是集群没有进行处理。 $ kubectl get event -n databases 47m Warning Unhealthy pod/postgres-postgresql-0 Liveness probe errored: rpc error: code = NotFound desc = failed to exec in container: failed to load task: no running task found: task dbd0aae87722bdababfdf720ec389aaeaab040f594b782451ea39edfbc1261bb not found: not found 47m Warning Unhealthy pod/postgres-postgresql-0 Readiness probe errored: rpc error: code = NotFound desc = failed to exec in container: failed to load task: no running task found: task dbd0aae87722bdababfdf720ec389aaeaab040f594b782451ea39edfbc1261bb not found: not found 通过查看错误事件即可发现,是清理 Container 的任务无法被正确处理,让我们手动清理一下...

October 18, 2022 · 7 min · Sxueck

浅析Linux内核中的Apparmor机制  [draft]

前言 最近有在帮公司制作一个 OpenVpn Snap 安装包,然而频繁遇到了 Apparmor 错误,其实之前安装 Shadowsock 包的时候也见过,但是当时没怎么太认真探究,现在回看起来发现国内这方面的相关资料还是比较少的,本篇博文从介绍到实践由浅到深,帮助自己也帮助读者理解。 错误样例 $ sudo snap install easy-openvpn-server_0.2_amd64.snap --dangerous error: cannot perform the following tasks: - Setup snap "easy-openvpn-server" (unset) security profiles (cannot setup apparmor for snap "easy-openvpn-server": cannot unload apparmor profile: exit status 2 apparmor_parser output: File snap-update-ns.easy-openvpn-server not found, skipping... File snap.easy-openvpn-server.easy-openvpn-server not found, skipping... File snap.easy-openvpn-server.hook.configure not found, skipping... File snap.easy-openvpn-server.hook.connect-plug-firewall-control not found, skipping... File snap.easy-openvpn-server.hook.connect-plug-network-control not found, skipping... File snap....

October 15, 2022 · 2 min · Sxueck

驾考学习与总结

距离考试倒计时只剩下约 3 天,可是几乎没怎么学习,就是把 500 题刷了一遍,视频过了一遍而已,干脆和学计算机一样来个总结 扣分须知 目前国内考试基本用的是四月一日后新出的新规题目,经常会遇到视频和实际考题不一致的情况,这里重新巩固一下对于扣分的理解 扣一分的情况 最轻微或者不会造成事故的扣分,这一档次也是我们生活中时时刻刻会触犯到的 不按规定使用灯光 不系安全带 普通道路不按规定倒车/掉头,或者超速 10%-20% 违反禁令标志禁止标线(例如压线等情况) 普通客车未按规定年检就上路 货车超载不超过 30%,或者擅自改变已登记结构 做题的时候,想一下自己在路上是不是经常触碰到某些行为,或者事件发生在普通道路或者载货汽车危害不严重的时候,基本就是一分没跑了 扣三分的情况 这一类扣分行为是种类最多也是易错点最多的,如果我们想要强行总结,可以概括为 此类行为可能造成危害,且危害后果是可以预见的 开车打电话 不避让校车:小朋友多且出事情后果相当严重,但出事概率不算大 不避让行人 不按规定超车 快速与高速路段不按规定车道行驶 出故障后停车不按规定使用灯光:可能会造成后车误判导致追尾 高速行驶低于最低时速:说的就是你,五菱牌移动路障 货车违反 420 法制(开车大于 4 小时后没有休息 20 分钟):不过我感觉这个挺难界定的 不按规定安装号牌:咋地,照不到牌就没法扣你分了吗,当然前提是号牌要完好 需要AB照才能开的车没有按规定年检就上路:C照是1分 你看,3分基本都是与别人交互导致的事故,1分多是半惩戒性质,例如不打转向灯这种 同时注意,扣分体系中,高速/快速 和 普通道路 有的时候是两套规则,载客汽车 和 客运车/危险物品运输车 也是两套,涉及客运车这种即使是最轻微的未按规定年检上路,就已经从3分起扣了 3分这个区间还有一个关键区域值 – 20%-50%,将该区域套到普通道路与载客汽车上,即为3分 普通道路逆行 / 超速20%-50% 载客汽车超过核定人数 20%-50% 载货汽车超重 30%-50%: 30% 以下1分 载货汽车用来载客:对,躲货拉拉后备箱要扣三分 校车上路前未做车况检查 / 带隐患上路 扣六分的情况 六分一般会出现在出现在,一旦出事则会导致重大危险,且本身事故概率极大的场景中,亦或者是 AB 照相关车辆违规 不遵守交通信号灯,例如闯红灯 占用应急车道:会导致特种车无法及时作业 驾驶证被暂扣期间驾驶机动车 逃逸致人轻伤 / 财产损失:逃逸最轻的后果 载运危险物品车辆未按照指定的时间、线路、速度行驶或者未挂载警示标志 下面开始涉及到高速或者 50% 以上的区间...

September 29, 2022 · 2 min · Sxueck

Go Grpc使用说明书-Protoc篇

前言 熟悉这个博客的朋友都知道,我一般都不会写语言类的说明书,但这次由于网络资料参差不齐,中间走了许多弯路,特此进行一次记录 故事背景 公司的工业机器人需要做车端行为树的汇总,系统组配合那边给出来一个 Grpc 接口(C++写),我们这边调用函数,车端进行充电等行为时候会触发行为树操作,而我们负责监听即可,本来是一个非常简单的需求。 项目准备 在这里推荐写代码还是使用 Linux 或者 Mac 更好,Windows 的配置实在是太折磨人了。 我们先来看看最终的,也就是实际跑起来的项目结构: 含有注释的都是重点文件 ➜ tree . ├── compatibility.go ├── config.go ├── debug │ └── main.go # Server ├── go.mod ├── go.sum ├── grpc.go # 主要的接受监听部分代码,也可以看成 Client ├── grpc_test.go # 测试代码 ├── main.go ├── mongo.go ├── xx.api.rfi # grpc 包名,要和调用方保持一致 │ ├── behavior_tree_engine_grpc.pb.go # 主要实现的方法 │ └── behavior_tree_engine.pb.go ├── mqtt.go ├── proto │ └── behavior_tree_engine.proto # ProtoBuf 定义文件 └── README....

September 5, 2022 · 3 min · Sxueck

利用 Google MT3 模型进行乐谱识别 - 本地篇  [draft]

前言 最近经常看 Youtube 有很多的钢琴家在分享他们的曲子,有的时候很想将其稍微做一点修改,但是这样的话就要扒谱到 FlStudio 里面,即使有 MIDI 键盘辅助,手工扒谱也是一项非常吃力的活,于是就想着能不能借助 AI,这不,Google MT3 模型就出现在了我的眼前。 需要注意的是,MT3 项目并不是 Google 官方推出的,而是 Google 使用了 T5X 训练框架而已,T5X 框架是一个研究友好的框架,可以用于高性能、可配置、自助式训练、评估和序列模型(从语言开始)的推理,而 MT3 是一个多乐器自动音乐转录模型。 环境 我的配置单 运行环境:WSL2 Ubuntu 22.04(我甚至不愿意用虚拟机) 显卡:NVIDIA RTX 3080 CPU:Intel i9-11900K 内存:64G 安装模型相应的依赖 我们需要安装如 Python、TensorFlow、NumPy、Pandas 等依赖项目 $ sudo apt-get update $ sudo apt install \ python3 python3-pip python3-dev python3-venv \ gcc g++ make build-essential \ libicu-dev libbz2-dev liblzma-dev \ libssl-dev libxml2-dev libxslt-dev ffmpeg libsndfile1-dev $ python3 -m pip install --upgrade pip $ pip config set global....

July 29, 2022 · 3 min · Sxueck

尝试使用手动部署 Kubernetes 集群  [draft]

本文更新于 2022-12-26,Kuberbetes 更新非常快,请注意可能有过时信息 前言 最近公司业务场景要一个高可用的集群节点用于工业环境,而且数据量非常大,刚刚好手上有一台 IDC 淘来的机架服务器,借机复习一下 K8s 的手动部署。 系统资源 虚拟机配置 $ free -h total used free shared buff/cache available Mem: 31Gi 901Mi 25Gi 4.0Mi 5.4Gi 30Gi Swap: 0B 0B 0B $ cat /proc/cpuinfo | grep -c processor 32 集群的安装 由于只安装一个 Control Panel,我们只需要配置好以下几个组件即可 ETCD Kube-ApiServer Kube-Controller-Manager Kube-Scheduler Kube-Proxy Kubelet 基础的配置 安装基础软件 $ apt install bash-completion git net-tools sudo build-essential golang conntrack $ go version # 这里的 Go 版本需要大于 1.12 go version go1....

July 3, 2022 · 5 min · Sxueck