zhangguanzhang's Blog

zhangguanzhang's Blog

站在巨人的肩膀上

利用 docker buildx 静态编译 nginx
由来内部有需求需要静态编译 nginx,尝试了下,搞出来了。先是按照官方 nginx Dockerfile 的逻辑走不通,后面下载 nginx 官方源码编译才行。 buildx 使用见文章 buildx 使用 nginx Dockerfile先说下官方的失败尝试。先 clone 项目: 12git clone https://github.com/nginxinc/docker-nginx.gitcd docker-nginx 分为 stable 和 mainline。大概研究了下,发现 case "$apkArch" in x86_64|aarch64) 的情况是...
EmuELEC 笔记
EmuELEC 笔记后续关于 EmuELEC 的笔记和知识点都会在这里更新,假定看到这篇文章的人都具备一些 Linux 基础,命令,path,分区,挂载之类的知识。 EmuELEC 介绍EmuELEC 是专为 Amlogic(晶晨)S905/S912 方案的盒子开发的游戏系统,它基于 CoreELEC 系统,在 CoreELEC 的基础上移植了 RetroArch 和众多的独立模拟器。EmuELEC 前身为 Sx05RE。Sx05RE 整合了 Lakka、KODI、EmulationStation,常被人简称为三合一。它实际上也是一个 Linux 系统。 通常我们使用便宜的电视盒子(基本...
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...
干掉烦人的 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 的堆栈信息会是你机器上的路径信息,路径信息是保留的,例如下面的...