zhangguanzhang's Blog

zhangguanzhang's Blog

站在巨人的肩膀上

编译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-Go.dockerfi...
机器重启后 kube-apiserver 无法启动,etcd刷(error "EOF", ServerName "")
环境信息三个 master (etcd 也在 master 上,master上也有 kubelet)和 n 个 node。master 上组件(kube-controller-manager,kube-scheduler,kubelet)的 apiserver 的ip 都是 127.0.0.1:6443。kube-apiserver的 etcd 地址写了三个 etcd 的。k8s 版本为 v1.15.5 故障现象93 这台 master 机器重启后,发现 93 节点 NotReady,上去看了下 kubelet 无法连上本机的 kube-apiserver。kube-apiserver ...
Job for docker.service canceled
故障现象内部安装 docker 的脚本报错 docker 安装失败。然后启动发现下面奇怪的问题: 1234567$ systemctl status docker● docker.service - Docker Application Container Engine Loaded: loaded (/etc/systemd/system/docker.service; enabled; vendor preset: enabled) Active: inactive (dead) Docs: http://d...
openshift 4.5.9 etcd损坏+脑裂修复过程
前言介绍内部机器和环境都是在 vcenter 里,之前的 ocp 集群是 3 master + 1 worker,也就是之前的openshift 4.5.9 离线安装后的环境,后面有几台宿主机负载太高,同事看我机器负载最高,关了几台,这几天需要用下 openshift 环境。登录到 bastion 上 get 超时,看了下 haproxy 的 stat web,全部红了。。然后把所有机器开机后发现还是起不来。 操作openshift 的 master 节点和 kubeadm 很像,几个组件都是 staticPod 形式起的。客户端也不是 docker,使用 crictl 就行了 查看 k...
docker-ce 18.09.3 启动panic: invalid freelist page: 56, page type is leaf的解决处理
这个问题和之前的docker-18.06.3-ce启动panic: invalid page type: 0: 0的解决处理差不多,不过 db 文件不同。客户停止 docker 后起不来了,查看日志: 1journalctl -xe -u docker 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879805月 26 18:42:17 xxxx...
一次单节点单个pod网络问题排查过程
about现场反馈客户环境上业务不正常,根据调用链去看某个业务A日志,发现无法请求另一个业务B,把业务 A 的探针取消了,加上 12tty: truecommand: ["bash"] 起来后进去 curl 了下 B 对应的 svcIP 接口是能通的。然后手动起业务进程,再开个窗口 exec 进去 curl 发现就不通了,k8s node数量是只有一个,并且只有这一个 pod 有问题。后面排查到是用户的安全软件导致的。软件名是 1234567$ ps aux | grep agentroot 6349 0.3 0.1 21046316 116820 ?...
kubelet 和 runc 编译关闭 kmem
前提详情在 3.x 的内核上,cgroup 的 kmem account 特性有内存泄露问题。kubelet 和 runc 都需要修复。 网上有言论说升级 Linux 内核至 kernel-3.10.0-1075.el7 及以上就可以修复这个问题,详细可见 slab leak causing a crash when using kmem control group。但是我测试了下面的都不行: CentOS7.4 CentOS7.6 CentOS7.7的 3.10.0-1062.el7.x86_64 CentOS Linux release 7.8.2003 (Core) - 3.1...
iptables --wait -t nat -A DOCKER...: iptables NO chain/target/match by that name
由来我们内部有套部署的工具, 我们部署的流程是先在部署机器(部署机器可能也是node1 )上用脚本安装好 docker,然后进容器里去起我们部署平台,有个很久的 bug 就是,部署机器上端口映射起容器会有如下报错 1iptables --wait -t nat -A DOCKER -p tcp -d 0/8 --dport 8089 -j DNAT --to-destination 172.25.0.2:80 ! -i docker0: iptables NO chain/target/match by that name 排查也很简单,缺少链,添加上即可:...
Internal error occurred: jsonpatch add operation does not apply: doc is missing path: xxx
由来今天在折腾 admission webhook 注入一些属性的时候遇到了 Error from server (InternalError): error when creating "xxx.yml": Internal error occurred: jsonpatch add operation does not apply: doc is missing path: "/spec/template/spec/dnsConfig/options"。折腾半天才发现在代码里使用 jsonPatch 的话不能直接绕过结构体实例去 patch。 ...
使用github action 配合 docker buildx 编译 arm64 docker-compose
说明git 上搜索了很多 docker-compose 的 arm64 的编译基本都是使用 qemu-user-static 之类的设置下后编译的,也看到过用特权容器启动 qemu-user-static 或者 binfmt 之类的,但是我自己机器上试了无效,貌似是因为我操作系统是低版本内核的 centos ,github 上搜了下,其他很多人的编译感觉太啰嗦了。就在 action 上整了下,测试是可用的,而且非常简单。 docker-practice/actions-setup-docker@master 将会在在 action 的 runner 里安装 docker,创建 build...
集群节点关机导致dns在eviction pod之前几率不可用
由来这几天我们内部在做新项目的容灾测试,业务都是在 K8S 上的。容灾里就是随便选节点 shutdown -h now。关机后同事便发现了(页面有错误,最终问题是)集群内 DNS 解析会有几率无法解析(导致的)。 根据 SVC 的流程,node 关机后,由于 kubelet 没有 update 自己。node 和 pod 在 apiserver get 的时候显示还是正常的。在 kube-controller-manager 的 --node-monitor-grace-period 时间后再过 --pod-eviction-timeout 时间开始 eviction pod,大概流程是...
docker18.03 hang at 'restoring container'
由来起初是 k8s 有几个 node not ready,上去看了下 kubelet 日志刷 container runtime down,重启了下 docker 后还是没用,docker ps 命令都卡住。 环境信息1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253$ cat /etc/redhat-release Linux xxx-disk0 3.10.0-1127.13.1.el7.x86_64 #1 SMP Tue Jun 23 15:...
ansible hang in docker container
由来这几天同事发现在 docker 容器里运行 ansible 命令很卡,发来了个命令叫我试试 ansible localhost -m setup -a 'filter=ansible_default_ipv4' 2>/dev/null |grep '\"address\"' |awk -F'\"' '{print $4}' 环境信息12345678910111213141516171819202122232425262728293031323334353637383...
永久关闭swap的正确姿势
今天遇到了 kylin 系统上无法关闭 swap 的情况。记录下和方便别人搜到这个知识点。 环境信息1234$ at /etc/issueKylin 4.0.2 \n \l$ uname -aLinux H-192-168-63-132 4.15.0- 58-generic #64kord1k1'SMP Thu Aug 1S15:51:97 csT 2919 aarch64 ...... 尝试的步骤fstab 里没有 swap 的挂载, 1swapoff -a && sysctl -w vm.swappiness=0 重启后,内核参数是关闭的,但是实际没有关...
银河麒麟arm64系统克隆机器上k8s vxlan跨节点不通的一次排查
由来和前一篇文章不一样,从来没遇到过这样的问题,这里记录下。实施在客户那边部署业务后,业务在浏览器上无法访问,我远程上去查看日志发现 pod 内部无法 DNS 无法解析,nginx 连不上 upsteam 报错而启动失败,实际上也是跨节点不通。实际排查过程也有往错误的方向浪费了一些时间和尝试,就不写进来了,以正确的角度写下排查过程。 环境信息OS 是 arm64 的银河麒麟系统: 123456789$ cat /etc/os-releaseNAME="Kylin Linux Advanced Server"VERSION="V10 (Tercel)"...