ITPub博客

首页 > 云计算 > Docker/K8 > DCOS私有云容器化交付日常问题集

DCOS私有云容器化交付日常问题集

原创 Docker/K8 作者:jaymarco 时间:2020-09-28 22:47:50 0 删除 编辑

如下是在DCOS私有云项目交付过程中碰到的一系列问题整理如下:

 

问题1

DCOS 节点容器分布不均衡

问题描述

生产过程中,发现个别计算节点 CPU 使用率较高,其上的应用访问速度慢甚至异常的情况。

                                                                                 

问题分析

发现该服务器上的容器数量过多,导致资源紧张。

解决方法

设置 Marahon constrains 策略为 hostname:GROUP_BY

 

问题2

Calico 虚拟网络无法释放IP 地址

问题描述

当应用容器使用的 calico 虚拟网络中的 IP 地址,容器停止或删除, IP 地址无法从原来的容器中释放出来,导致其它容器启动的时候使用此 IP 时报服务已存在, IP 地址占用,影响应用容器启动。

Error response from daemon:   container ebb091e0aabc5270fac970d0e26087495a6bdfd03f261a63558713d165bc1d40:   endpoint create on GW Network failed: service endpoint with name   gateway_ebb091e0aabc already exists

Error: failed to start   containers: ebb091e0aabc

问题分析

发现192.168.0.33 在etcd 库里面注册了两个地址,最后导致路由表错乱了。

解决方法

1 、查看异常容器的 calico ip 地址

[root@dsv_app_06_04 ~]# docker   exec -it 2b2 ip add 

-->10.x.x.132

 

2 、然后查看本地址容器 IP 对应路由

[root@dsv_app_06_04 ~]# netstat   -rn|grep 192.168.0.33

192.168.0.33    10.x.x.132   255.255.255.255 UGH       0 0          0 eth1       

发现 192.168.0.33 路由到 10.101.12.132 主机,路由策略错乱

正常应该如下:

192.168.0.33    0.0.0.0     255.255.255.255 UGH       0   0          0 eth1 

 

3 、检查 etcd 数据库注册数据

在 etcd 服务端 10.x.x.21 排查注册信息

发现地址 192.168.0.33 真的写入到 10.x.x.132 ,因此需要删除这条注册信息

etcdctl ls   /calico/v1/host/dsv_app_03_02/workload/libnetwork/libnetwork/endpoint/

etcdctl get     /calico/v1/host/dsv_app_03_02/workload/libnetwork/libnetwork/endpoint/795211bd932ab94e85a7588a331f1c3e65f83820631b5e4b66c663eb3bfbc704

etcdctl rm   /calico/v1/host/dsv_app_03_02/workload/libnetwork/libnetwork/endpoint/795211bd932ab94e85a7588a331f1c3e65f83820631b5e4b66c663eb3bfbc704

 

4 、启动应用容器

 

问题3

应用容器附件大小下载问题

问题描述

业务系统上传 10M 附件报 504 错

问题分析

用户的应用部署到nginx 容器中,统一应用访问入口走的nginx ,然后上传文件大小提示不能超过10M 大小,否则就会报504 Gateway Time-out ,其原因是nginx 端有一个参数可以控制了文件上传大小。查看到nginx.conf 配置文件client_max_body_size 2m 默认设置成2M 。

 

解决方法

修改 nginx.conf 文件 client_max_body_size 参数,调整如下:

client_max_body_size  500m;

然后重启 nginx 服务。

说明:由于 nginx 是基础镜像,修改参数时需要重新封装基础镜像,然后二层镜像将应用打进去。

 

问题4

DCOS 平台持续构建问题

问题描述

DCOS 平台构建失败

问题分析

DCOS 平台构建失败,会有很多可能性的问题,像基础镜像不可用,目录权限问题。镜像仓库账号密码没有在jenkins 平台登录时导致镜像构建失败。

解决方法

登录 jenkins 控制台,打开构建历史,点击改状态条,进入详情页面,点击 Console Output ,查看构建 log ,就可以清晰的看到整个镜像构建的全部过程,报错也会在这里打印出来。

 

 

问题5

网络中断引起服务注册发现异常

问题描述

应用前台大范围报错: no available app found 。

问题分析

网络一直波动导致zk 频繁选举,web 从zk 中获取的app 信息未及时更新。

解决方法

增加 APP 节点信息定期对比校验机制。

 

问题6

HAProxy 健康检查异常

问题描述

测试过程中,发现基于 TCP 健康检测策略的 F5 设备出现 HAProxy 健康检测失败的情况。

问题分析

F5 TCP 健康检查时需要HAProxy 进行回包才能认为健康检测正常,而HAProxy 只是代理功能,无回包功能。

解决方法

修改 haproxy.cfg 配置文件

Timeout connect 5s

Timeout queue 5s

Timeout client 30s

Timeout server 30s

Timeout client-fin 30s

Timeout server-fin 30s

 

问题7

容器CPU 资源占用高

问题描述

生产过程中,发现个别应用容器的 CPU 使用率过高,出现 CPU 争抢情况,影响其他应用正常运行

问题分析

通过Marathon 设置的CPU 大小,无法限定容器CPU 实际使用大小,出现超高情况

解决方法

通过 marathon 设置 Docker 的 cpu-quota 参数,限制单容器 CPU 使用率

 

 

问题8

HAProxy 负载不均衡

问题描述

压力测试过程中,发现无论如何调整集群容器数量, TPS 一直上不去。

问题分析

通过对负载均衡HAProxy 的路由分析,发现请求分发并不均衡

解决方法

修改 haproxy.cfg 配置文件,将 balance 负载均衡策略由 roundrobin (轮询策略)修改为 leastconn (最小连接)策略。

 

问题9

Docker 容器日志旋转问题

问题描述

应用容器的业务日志默认打印到 docker 日志中,发现最近一段时间业务日志没有在容器中刷出来。

问题分析

Docker 默认日志参数设置成3M ,所以日志文件超过此参数值就会停止刷日志,需要对日志输出大小调大设置

解决方法

修改 /usr/lib/systemd/system/docker.service 服务启动参数文件,设置以下日志参数

--log-opt max-size=10m --log-opt   max-file=3

然后重启 docker 服务

Systemctl restart docker

 

问题10

业务容器与redis 服务网络不通问题

问题描述

客户反应业务系统无法正常访问,用户页面访问时无反应,页面会话互串。

问题分析

开发商已将session 持久化到redis 缓存中,一旦应用容器与redis 容器之间网络失联就会影响到用户会话失效,页面无法正常加载。

需要检查redis 容器是不是挂死或是服务已停止。由于应用容器之间通讯采用的是网桥模式,需要检查redsis 网卡启动模式。

解决方法

docker stop redis

docker rm redis

docker run -itd --name redis

-v   /home/redisdump:/usr/local/redis/dumpdb \

-p 6379:6379 redis:v3.2.3

测试应用容器与 redis 之间的网络

 

问题11

容器中的时区与语言的问题      

问题描述

客户反馈启动的应用系统页面显示的时间不准确

问题分析

经检查数据库时间是准确的,而登录到应用容器里面确发现时间不准确,最终判断在打基础镜像的过程中没有将宿主机上面的/etc/localtime 时区文件没有同步到容器中。

解决方法

重新修改应用基础镜像,并将如下两条指令补充进去 dockerfile

Form app

ln -sf   /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

echo "Asia/Shanghai"   > /etc/timezone

然后用 docker build 命令生成新的基础镜像。

 

问题12

碰到网络问题,无法 pull 镜像包,需要配置网络代理

解决方法

1 、创建 docker.d 目录

mkdir   /etc/systemd/system/docker.service.d

2 、创建 http_proxy.conf 配置文件

touch   /etc/systemd/system/docker.service.d/http-proxy.conf

http_proxy.conf 增加如下内容

[Service]

Environment="HTTP_PROXY=http://proxy.example.com:80/"

3 、重启 docker

systemctl daemon-reload

systemctl show   --property=Environment docker

systemctl restart docker

 

问题13

镜像数据问题

问题分析

由于容器重启后数据会被清空,所以 docker 中的数据需要通过映射存放到本地磁盘持久化

解决方法

启动docker 镜像的时候加-V diskPath:dockerPath 的参数。如:

      docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql -v   /opt/data/mysql:/var/lib/mysql -p 3306:3306 mysql

 

问题14

docker 容器中 systemctl 问题

问题分析

在容器中使用 systemctl 报 Failed to get D-Bus   connection: Operation not permitted 的错误,则在启动的时候把 sys/fs/cgroup 映射到 docker 容器中

解决方法

在容器启动时加入sys/fs/cgroup 与本地映射关系

docker run --privileged --name=test   --hostname=test -v /sys/fs/cgroup:/sys/fs/cgroup image /usr/sbin/init

 

问题15

Docker 的 network 已经被占用的情况

解决方法

1. 先删除容器

2. 使用 docker network inspect 网络模式( host 、 bridge )查看名字

3. 使用 docker network disconnet -f 网络模式 要删除的名字

 

问题16

docker 启动进程时提示报端口被占用

问题分析

端口被占用情况会存在以下几种情况:

一种是已经发布的服务端口占用,另一种是发布的服务中没有使用该端口

解决方法

1. 选择停止所有容器

2. 停止docker 服务,systemctl stop docker

3. 释放网络策略与停止docker0 网卡

iptables -t nat -F 

ifconfig docker0 down 

brctl delbr docker0 

docker -d 

4 、启动docker 服务,systemctl start docker

 

有需要的朋友可以关注我的公众号,文章每日一更


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28833846/viewspace-2724924/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
负责数据库、中间件、大数据等基础软件建设、优化和业务保障工作。具有10年的电信与银行企业一线/二线运维管理经验。目前专注研究云计算、中间件和数据库等领域技术研究。持有Oracle OCP、weblogic OCP、Docker容器、PGCE、OBOCP和阿里云ACP等认证

注册时间:2020-06-22

  • 博文量
    82
  • 访问量
    135664