1、背景
春节后的周六补班,累啊,到公司发现docker和kubelet服务都被停止了,可能是春节期间担心发生安全隐患吧,服务启动后发现很多镜像无法拉取了
到相关的节点上去尝试拉取镜像发现报了404错误
docker pull xxx.xxx.xxx.xxx/dgms/dgms-kettle:2.15.0
Error response from daemon: error parsing HTTP 404 response body: invalid character '<' looking for beginning of value: "<html>\r\n<head><title>404 Not Found</title></head>\r\n<body>\r\n<center><h1>404 Not Found</h1></center>\r\n<hr><center>nginx/1.23.2</center>\r\n</body>\r\n</html>\r\n"
2、查看harbor镜像仓库
直接给我来了一个404
查看harbor容器均为正常
相关nginx日志也无错误信息
停掉harbor仓库docker-compose stop
,使用curl -I 10.18.104.154
,依然报404错误状态,由此推测是端口问题
使用ps -ef | grep nginx
发现存在很多nginx进程,但是使用netstat -tnlp
查看不到80端口
使用kill
命令kill掉之后无法访问,重新创建harbor镜像仓库,同样会创建很多nginx进程,还是报同样的404错误,无奈只能修改端口测试
3、解决办法
修改配置端口为8081,使用install.sh
重新创建harbor,访问正常
修改每个节点的/etc/docker/daemon.json
配置文件,重启docker服务,并重新配置应用镜像仓库地址
cat /etc/docker/daemon.json
{
"log-opts": {
"max-size": "5m",
"max-file":"3"
},
"insecure-registries":["dockerhub.kubekey.local","xxx.xxx.xxx.xxx:8081","xxx.xxx.xxx.xxx"],
"live-restore": true,
"experimental": true,
"data-root":"/home/var/lib/docker"
}
此刻已经部署了大量的应用,挨个修改镜像地址比较麻烦,还好k8s使用了名称空间进行资源隔离,并且在部署项目时使用了名称空间对各个系统进行分离,使用kubectl get deployment -nxxx -oyaml > xxx-deploy.yaml
方式导出相关需要修改的资源清单,使用sed
命令进行批量修改地址,之后使用yaml清单重新创建!至此问题处理
遗憾的是没有想明白404错误是什么导致的!为什么所有容器停止了,甚至docker和harbor服务都停止了nginx进程依旧存在
春节刚过就这么忙,😭😭😭😭😭😭😭😭😭😭😭😭😭