什么?宁完全不喜欢前端三件套的吗?用 Flutter + Golang 改造 K8s 升级小助手
前言今年二月份的时候,我提了下准备逐渐不用 Fyne ,换一种方式来做 GUI (见这篇文末:Golang 从零开始搭建自动部署平台,一键部署基础服务)
Golang 生态的 GUI 路线主要有三种
我正在用的,基于 OpenGL 的 Fyne 库,实现了一套自绘引擎,纯写 Go
用的比较多的,以 Wails 为代表的传统前端 GUI 方案,套皮 Chrome 类,需要会 html + js + css 三件套
基于 Qt 写 GUI ,最早从 C 那边出来的
准备换的原因,主要是 Fyne 无法应对复杂界面绘制,加上远程桌面默认的 OpenGL 版本很低,程序会跑不起来
基于此,我能选的只有 Wails 为代表的传统前端 GUI 方案。所以我就去稍微看了看前端。我之前也学过一点点前端,博客的主题切换,以及博客 V2 的 dark-mode 都是我写的,也能稍微写一点点,但是每次看前端的时候,那感觉就像上高数课一样,看着看着就要睡着了!说好的前端简单呢😡
因为不知道为什么,前端的内容是一点儿都看不进去,这次看也是越看越困,所以只能放弃这个方案,Qt 那套东西太费劲了。但是该解决的 ...
arm64 真的省电又好用吗?小测一手国产芯
前言早在 21 年初的时候,我当时写了篇文:高性能、低功耗——ARM Server到底香不香?,当时 Arm 的服务器价格还不是很香,一直就没有入手,上个月的时候公司开始提前准备国产化适配了,买台飞腾的机器,据说价格 3w+,就去提了一下其实可以去海鲜市场超低价买一台,于是就搞了台之前文章写的泰山服务器,价格不到 1k ,通过这两台服务器,咱们可以来看看国产的 Arm Server 到底香不香
这里先提一嘴,像 Oracle 云还有 Azure 以及腾讯云阿里云都已经开始在数据中心里面上 ampere 家的服务器了,说明 Arm 肯定整体运行成本肯定要比传统 x86 要好。所以咱们这次讨论 Arm 服务器到底香不香,就仅限定于
①个人玩家用途(不会去正经花大价格买全新带保的那种)
②国产 arm 芯(ampere 的比较贵而且服务器板子不大好找&板子也贵)
简单介绍这一部分,咱们先来看看本次到货的两台服务器都长啥样
华为泰山这个是我推荐的,买的就是 21 年文章里面说的那个,当时那个 999 的并不是实价,二手到手价在 3-4k 左右。而目前的话,配满盘架、带电源阵列卡的价 ...
harbor 搭配镜像加速服务,提升多架构容器分发效率
前言公司软件和镜像仓是在天翼云上,8 台机器共用 20M 带宽,速度非常之慢,全国各地的客户都用这个镜像仓库,k8s 滚动更新用的是组里大哥写的容器管理平台(大部分用这个)和我写的无网更新小助手(少数断网的学校用的这个)。大哥写的容器管理平台做了15分钟的超时,也就是说15分钟没有完成整个更新流程(调度、下载、启动、探针 Ready)就会报异常,所以遇到同时更新的时候,经常被实施被拉去看更新异常原因,一去看异常基本上都是15分钟镜像没下载出来,实施不会看异常原因,也不会等镜像下载到本地了之后重新走更新流程(镜像拉取策略是 IfNotPresent,超时了等下载完成再重新更新就行,但是停了之后重新走流程已经下载的进度会丢),只会找运维看原因,每次让他们等镜像下完了再重新滚动更新也不懂,很无奈。
前段时间,隔壁组的大佬提出来可以用免费的镜像仓来加速,推荐了阿里、华为、天翼云的容器镜像加速服务(都不要钱),正好最近在做国产化适配,给容器上多架构镜像,就一起做了,解决下这个问题
思路公司目前的 CI 是用 Jenkins +Shell 脚本做的,有一说一,用过 Github Action 和 ...
k8s NFS 服务器更换 ip 后持久卷处理
前言k8s 的服务器在安装完成后,难免会遇到服务器需要整个更换 ip 段的情况,虽然很麻烦,需要改各种外部依赖的 Endpoints、重装 k8s ……但是也不得不做,其中最麻烦的就属以 NFS 为基础的持久卷了
遇到的小问题k8s使用的 NFS 服务器更换 ip ,会导致 pvc 挂载不上,按说修改下挂载参数的 NFS 服务器 ip 就行,而挂载参数是在 pv 里面设置的,但是 pv 在创建后里面的参数无法修改,使用 kubectl edit 时候提示 k8s 禁止修改已经创建好的 pv
尝试解决狗歌搜索下,发现前人也遇到了这个问题 https://serverfault.com/questions/1033326/kubernetes-persistencevolume-nfs-ip-change
文章里面第一个回答本质还是去改 pv 的配置,等 kubectl apply -f pv.yaml 就会发现 kubectl 提示不能更改,看到了下面提供了一个 k8s 论坛的链接:https://discuss.kubernetes.io/t/update-persistentvol ...
Golang 从零开始搭建自动部署平台,一键部署基础服务
前言为什么要做公司用到的中间件和用到的组件超级多,JDK、Nginx、Docker、Rabbitmq、Harbor、Mysql、pgsql、MinIO……大概有 20 多个,虽然写了部署文档,直接复制粘贴就能部署,但是每次都得折腾差不多 5-6 个小时左右,而且这期间得一直盯着,和组里另一个运维(已经奏了😭)聊天的时候,他是这么说的:“来公司的别的没学会啥,复制粘贴倒是变得很熟练了😂”
做了一段时间之后,总感觉每次都这么折腾很没有意义,纯属浪费时间,就决定要把这个过程自动化
为什么不选择 Ansible在运维(网工也有)自动化部署里面,有着非常好用的工具——Ansible ,那么为什么还是要自己折腾一番,自己单独搞一套出来捏?考虑按照优先级有以下几点
想做一些定制化的东西,用 Ansible 不大好弄
有一些定制化的需求,如果是自己开发就很好做,但是用 Ansible 就不大好整,随便举几个例子
1、公司的软件仓库非常慢(共享 20Mbps 带宽,和镜像仓和代码仓还有一堆服务器共用,在开发提交代码、CI/CD 传镜像和客户服务器下载镜像的时候下载会非 ...
Golang 写爬虫快速拿到数据的小技巧
前言最近在帮忙做内蒙那边的爬虫项目,因为公司基本上都是做业务开发的,会写爬虫的基本上是没有,我之前又做过一点,所以就找到我咯
目标是爬取知网、超星期刊和读秀的文章数据,不过知网那边在做的时候史诗性的加强了反爬虫策略(①今天打开和明天打开的页面都看起来一样,但是元素的位置变了 ;②需要获取文章的链接,但是链接在 5 分钟到 3 小时左右的随机时间就会过期,这就导致批量获取完链接再去抓详情页的数据的时候进不去详情页了😂)
协商之后,只需要做超星和读秀的,难度小了不少
验证码由于提供的服务器没有显卡,加上 CPU 的性能也比较拉,人家不愿意给设备加钱但是愿意盯着去手点验证码,这块就没有怎么去折腾,知网的验证码比较简单,当时尝试了 OCR 的方法,用的 sml2h3/ddddocr: 带带弟弟 通用验证码识别OCR pypi版 (github.com) 这个搭了个 API Server ,然后去调它的接口拿 OCR 的结果,知网验证码的问题解决了,读秀和超星是一套验证码机制,里面是扭曲图形加扭曲文字的形式,因为上面的原因,就没有深入研究
开发按说爬虫一般都是用 Python 写,也 ...
Golang 搞定 k8s 应用无网自动化滚动升级
前言我们有一些客户为了网络安全,在我们把服务部署完之后,就把服务器全部断开外网访问,在我们需要更新的时候,给我们一个 Windows 的跳板机,我们需要先找一台 Linux 的机器 dcoker pull image ,然后 docker save 保存 tar 包,scp 保存这个 tar 包到电脑,用 ToDesk 把这个 tar 包传到跳板机,然后在跳板机上 scp 这个 tar 包到 k8s 集群的各个节点上,然后 kubectl edit deployment.apps 修改应用负载配置文件里面 image 配置,把 tag 修改成新版的,然后 kubectl get pods 查看启动情况,如果没有启动再 kubectl logs -f 看日志
上面这套流程,实在是太过麻烦,公司有一套应用中心,可以直接滚动升级,之前的文章也稍稍提到过,但是这个应用中心设计的时候要求必须联网才能使用,需要和公有云上面跑的应用市场联动,如果没有外网就不能用它一键升级,也就得回到上面叙述的超复杂更新流程
体会了几次这样的流程,加上开发那边发版频繁,每次更新都走一遍这样的流程,实在是不能忍,反复的 ...
解决 docker 和 docker-compose 和内网 IP 冲突问题
前言docker 一键部署爽,内网冲突火葬场。最近实施去客户那边调试,某个屋的设备可以连上网关,而某个屋的设备都不行,找了半天没有找到原因,于是晚上直接一个电话敲到了我这里,让我帮忙康康
寻找原因之前也遇到过了这种情况,简单排除掉了物联网设备那边的网关设置问题,马上想到了 docker 的问题,docker network ls 一看,发现 docker 和 docker-compose 占用的客户的地址,客户使用了 172.0.0.0/8 做为内网地址(不是很标准的做法,但是很常见),docker 占用了 172.17.0.0/16 作为桥接地址,docker-compose 跑了个 Harbor ,把 172.18.0.0/16 也给占了,物联网设备那边的网关下一跳是 172.18.12.1 ,于是华丽丽的冲突了,物联网路由访问咱们网关机器不通,于是连接不上
修改 Docker 桥接网段非常简单,有个 bip 的设置
vim /etc/docker/daemon.json
"bip":"10.255.0.1/16" ...
Jenkins Golang CI 打包上传到镜像仓,一个 shell 脚本搞定
前言写程序难免经历要很多调试,对于 K8S 开发,如果需要和集群内的其它服务进行交互,要么需要用 VPN 连接到集群内部,要么就需要打包 Docker 镜像,然后更新集群内的版本,就我来说,不是很喜欢前种方法,因为连到集群之后查资料就不是很方便,另外每次发版也是要走 CI 流程的,不妨做下 Golang 的 CI
公司技术栈是 Java + SpringBoot ,基本上没啥 Golang 的项目,自然也没有 Golang 的 CI 脚本,所以需要自己做,之前我弄过不少 CI ,不过是 Github Action 和 Gitea + Drone 之类的,需要写一个 yaml 文件,同时有很多可以用的组件 (use:xxx 这样的),是基于 Docker 的流水线,很方便,而公司使用的是 Jenkins ,而且是非常老版的 Jenkins ,所以只能写 Shell 脚本来打包
编写 Shell 脚本虽然我很不喜欢 Shell 脚本,不愿意写这玩意儿,不过还好不需要从零开始,找隔壁组大佬要到了 Java 的 CI 脚本,可以在它的基础上简单改改就行
之前我做了套 Gitea + Dron ...
【低价好物】50块钱的光纤交换机(三)?皖通邮电ZXWT CTNS 180X&150X
本篇为系列文章之第三篇
第一篇传送门:【低价好物】50块钱的光纤交换机(一)?分组传送终端格林威尔GPN710
第二篇传送门:【低价好物】50块钱的光纤交换机(二)?瑞斯康达iTN系列分组传送终端
往期【低价好物】合集(从新到旧):
【低价好物】50块钱的光纤交换机(三)?皖通邮电ZXWT CTNS 180X&150X
【低价好物】50块钱的光纤交换机(二)?瑞斯康达iTN系列分组传送终端
【低价好物】50块钱的光纤交换机(一)?分组传送终端格林威尔GPN710
【低价好物】让10多年前的防火墙继续在今天发光发热——DPTech FW1000-GC-N
皖通邮电的文档超难找,不建议没有网管交换机配置经验的同学入手
前言一时捡漏一时爽,一直捡漏一直爽!在前两期之后又有上交换机的需求了,又想玩点儿新的,于是又开始在海鲜市场搜寻起来,于是让我发现了皖通邮电(中兴子公司)的 180X & 150X ,价格也是相当的合适,赶紧入手几个康康
入手渠道、价格、设备基本信息和外观如图
ZXWT CTNS 150X(2台的价格)
ZXWT CTNS 180X(3台的价格)
...