K8s 组网实践1

接触k8已经有半年,从一个普通的Tomcat 应用开始。把一个产品核心组件容器化并在k8s上面部署加管理起来。也经历很多弯路,对于kubernetes的使用还在持续的优化和研究中。

这是一篇实用性 使用文章。没有太多的原理介绍,大家要了解k8s 网络原理的可以去自行百度。有很多介绍,但是正真用起来用好的文章很少。

先不废话介绍一下我们的

使用场景:

我们的产品主要的业务是使用云存储做文件上传下载和文件管理的。这里面就有两类网络通信诉求,1 普通的rest请求用的是HTTP协议。2 文件传输请求用的也是HTTP 直接传的是字节流。

我们最早的

组网设计:

所有的产品组件都docker化之后通过POD部署,服务直接调用分几种

1. 内部服务即部署在k8里面的服务用的是service。

2. 外部调用通过nginx 做的SSL 卸载然后从master节点的IP+ Service的NodePort进K8。

注意这里只对服务调用方做了划分。没有考虑请求的类型。

再说一下我们的k8

Kubernetes:

我们用的是 1.8的版本,部署时选择的是Calico 网络。master 也是单节点部署。

背景就阐述这么多了。

现在是描述一下

问题和改进方法:

方法不一定 可以照搬但是希望能给大家一个思路。毕竟是正真解决了问题。

1. 上线没多久就出现了的问题,在文件上传时其他的rest 请求会超时。现象是nginx里面大量的超时日志。业务自己的日志里面没有记录到请求。也就是说会有那么一段时间业务组件docker是脱离网络的。

这个现象很明显是和文件传输有关。我们的解决方案是吧对接云存储的组件移除K8网络。做独立部署。这样做了以后有两个明显的改善,A 文件上传的速度提升了,确切的说是回复到docker化之前的样子(这个其实就是一个回退的操作。。。。难过)B 请求超时大大的减少了。

2. 但是好景不长,我们的是周末做的改造,但是到了周一却出现了一个时间段 10分钟左右的用户登陆不上,现象和之前的有类似,nginx有大量超时报错,但是业务日志没有记录。

说一个插曲。我们在周末把文件流传输的组件迁出K8之后还专门做了多用户的压力测试,很不幸没有发现问题敲打

有了之前的经验我一下就怀疑到网络上了。这次处理的方案做了一个大胆的尝试。我们把登陆请求分到别的service上去。具体的做法就是新创建几个POD挂一个新的service,通过Nginx只把登陆请求转发到这个新的service上。说明一下这一系列操作都是通过配置完成的。新POD里的Docker和旧的是一样的就是service不一样 NODE PORT不一样。然后登陆接口超时问题就解决了,并且经过一周的观察问题不再出现。


最后再说说我们的定位过程,因为之前对k8比较相信没想K8的问题。首先是想到master节点就一个所有请求都从master Ip做入库。Master的VM 连接数会达到上线。所以就用Nginx做了分流。从不同的Node 上进如,问题没有解决。然后就再定位业务日志。发现日志在报超时的那段时间没有收到任何请求。所以才最终确定是K8的service网络阻塞了。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值