zhangguanzhang's Blog

zhangguanzhang's Blog

站在巨人的肩膀上

openwrt 的在线升级固件和扩容的研究
前言手上有 r2s、N1 和 x86_64 的固件维护,r2s 的参照别人的脚本搞了在线升级固件的脚本,别人的脚本只支持 ext4 升级,而后面我也把 squashfs 格式的固件升级搞出来了。恩山上有的人的固件我也看 x86_64 也可以在线升级,后面我也会去测下 x86_64 的,理论上是通用的。 升级过程以 r2s 为例讲解。参照目前看到的的 1988 的升级脚本 ,最初的人不知道是谁搞的在线升级,因为很久之前就看到有些人的固件能在线升级了。 升级前准备相关命令确保固件有下面命令: command package name 用途 parted parted 修改分区和获...
docker数据盘损坏后启动报错 Error starting daemon: Error initializing network controller: Error creating default "bridge" network: package not installed
前言客户现场的数据盘损坏了,修复启动机器后 docker 无法启动 123456789101112131415[root@db1 docker]# /data/kube/bin/dockerdWARN[0000] The "graph" config file option is deprecated. Please use "data-root" instead. WARN[2021-12-11T21:16:07.917969366+08:00] could not change group /var/run/docker.sock to doc...
1.15 kubelet 在 nodefs 容量富裕下循环 reclaim ephemeral-storage
故障现场 k8s node 很多 pod 都被硬性驱逐显示 Evicted ,现场人员查看分区容量和 inode 都正常,但是一直 reclaim ephemeral-storage。 处理环境信息12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879$ uname -aLinux xxx-2 3.10.0-693.el7.x86_64 #1 SM...
在非容器环境上实现散装的 IPVS SVC
前言内部有非 K8S 环境上需要类似 SVC 的负载实现,一开始是用 NGINX 做的,所有 SVC 域名都解析成一个 dummy IP ,然后 NGINX 根据 server_name 去 proxy 不同的 upstream 。 开始还是能用的,结果后面很多服务依赖 host 这个 header ,报错签名错误,而且毕竟这样是在用户态,效率不如内核态高。于是打算搞下之前的打算:把 IPVS 的 ClusterIP 的 SVC 扣到非 K8S 环境上使用。 kube-proxy 的 SVC 简单讲就是 node 上任何进程访问 SVC IP:SVC PORT 会被 dnat 成 end...
解决 docker 的 read unix @->/run/containerd/s/xxx read: connection reset by peer: unknown
由来为了测试关机对集群的影响,关机了几台机器后很多 pod 一直 CrashLoopBackOff 和 RunContainerError 或者一直无法就绪 环境信息1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253[root@CentOS76 ~]# docker infoClient: Debug Mode: falseServer: Containers: 404 Running: 258 Paused: 0 Stopped: 146...
[持续更新] - Openwrt USB 网络
about记录下 openwrt 下 usb 网络的折腾,后续折腾这块内容的话也在这个文章内更新 N1 上的 usb 网络共享折腾固件依赖暂时没完全区分 usb 网络共享和 usb-cdc 的关系,所以我编译的时候把很多 usb-net-xxx 都编译进去了 听其他大佬说编译的时候主要有下面的包: 安卓: kmod-usb-net kmod-usb-net-rndis 苹果: kmod-usb-net-ipheth usbmuxd 建议下面这些也安装上方便调试: 123456789101112131415161718CONFIG_PACKAGE_luci-proto-3g=yCONF...
fio 静态编译和基础使用
由来amd64,arm64 的静态编译和基础使用 buildx 使用见文章 buildx 使用 编译buildx Dockerfile 构建: 123456789101112131415161718FROM ubuntu as buildWORKDIR /optARG VER=fio-3.29#ARG DEBIAN_FRONTEND=noninteractiveRUN if [ -e /etc/apt/sources.list ];then sed -ri 's/[a-zA-Z0-9.]+(debian.org|ubuntu.com)/mirrors.aliyun.com/g...
干掉烦人的 open /run/xtables.lock: is a directory
环境信息suse 这辣鸡系统,使用官方文档 docker-static 的二进制安装的话会无法起来,所以我们在 suse 上用的是很久之前的 rpm 安装的 docker。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162$ cat /etc/os-release NAME="SLES"VERSION="12-SP5"VERSION_ID="12.5"...
flannel下集群有个节点网络不通的一次排查
故障问题和版本没关系,客户的 node 信息啥的后面排错里有。有个节点通信有问题,其余节点都没问题。 排查惯例信息先看下 flannel 的 vxlan 的 vtep 信息,客户是双网卡的,但是默认路由是这个网卡,不用管另外的网卡了。下面信息看了下 VtepMAC 和 public-ip 都正常。 123456789101112131415161718192021222324252627282930313233343536$ kubectl get node -o yaml | grep -B4 public annotations: flannel.alpha.core...
一次 cni-plugins 导致集群 dns 无法解析的排错
问题环境是 1.15.5 的 x86_64 的 k8s 。命令输出被我查看日志给冲掉了,大致描述下。中间件 kafka 无法连上 zookeeper ,看了下日志报错域名无法解析。看了下 coredns 都挂了: 12345$ kubectl -n kube-system get po -o wide -l k8s-app=kube-dnsNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS ...
kubelet 为系统配置预留资源
前情提要我们环境有部分 pod 特殊,单独节点部署,oom 的时候会搞挂一些系统进程,这几天折腾了下配置了下 kubelet 相关的 reserved。主要是 kubelet 的配置文件一些参数,不写 systemd 里,全部写配置文件里。版本是如下,因为我们不单单是 x86_64 ,由于还有其他的架构以及会部署在客户的现场,为了减少维护,所以我们都是除了 flanneld 和 coredns 以外。k8s 相关的二进制的形式部署的。 12345678910111213141516171819202122232425$ kubectl version -o json{ &qu...
鲲鹏920的麒麟v10物理服务器断电后无法启动处理
前情提要珠海园区升压前置检查,上周六整个园区关电检查,然后今天来后连不上我们在 鲲鹏920的麒麟v10机器上开的虚拟机了,进 bmc 的 web 看了下是开机进入后卡住。 信息同步是当初安装系统的同事去处理这个事情的,他 bmc 的 web 上去重启在菜单那里按 e 编辑准备改 boot cmdline 进单用户,结果按 e 后要输入用户名和密码,询问了麒麟他们。很久也没给答复。然后就在那干等,上面的虚机有我的环境,我就过去看了下。 尝试的处理麒麟那边的人员没有回复,我打算这边同步尝试下其他手段,而且不只一台无法开机,哪怕麒麟的回复了密码也能同步尝试不同手段。Linux 无法开机的就搞个...
dlv命令行的远程调试 golang 进程步骤(包含容器进程)
前情提要记录下 dlv 的远程调试,建议不要在代码里加 fmt 去调试。不谈 goland 啥的远程调试,本文章目前只写 dlv 的命令行配合远端调试。 一些前提须知符号链接路径1234567891011package mainimport ( "fmt" "os")func main() { f, _ := os.Open("asdasdasd") fmt.Println(f.Name())} 上面代码你编译了后,在其他机器上运行,panic 的堆栈信息会是你机器上的路径信息,路径信息是保留的,例如下面的...
编译mips64le架构的consul
编译建议使用容器编译,否则建议 clone 进 GOPATH 里 clone12git clone https://github.com/hashicorp/consul.gitcd consul 线上使用的是 v1.8 版本,这里我以 v1.8.14 (2021/07/19 发布的)搞的。 1git checkout v1.8.14 准备工作拉取需要的镜像。貌似 golang 1.16 更好的支持 mips64 了,所以条件允许的话,这里可以下改下 golang 的版本试试 1234$ head -n2 build-support/docker/Build-G...