近几年容器相关的技术大行其道,容器、docker、k8s、mesos、service mesh、serverless等名词相信你们多少都有听过,国内互联网公司无一不接触和使用相关技术。前端
健康之路早在2016年就启动了容器化的评估。眼观如今容器化相关技术的稳定性和可行性也获得了不少的验证,在这样的前提下咱们启动了容器化实践之路。java
固然在实践的过程当中咱们也不乏遇到了一些问题,咱们但愿经过文字来记录和分享咱们遇到的一些事情,也但愿为你们的容器化之路带来帮助。node
此系列文章不会涉及到不少的k8s技术,只涉及到咱们最终定案和使用的方案。而且文章不会从头开始,会假设你们对k8s有必定了解有一些基础,最佳的目标读者是正在应用k8s初期和准备应用k8s的公司。docker
由于k8s的生态很是好,相关文章也特别多,入门及介绍文章、文档很是的多,你们能够自行的去补充相关的知识。后端
但有一个很重要的问题是没有完整的生产可用的系列文章,不少是针对k8s能力的技术文章和实现剖析。服务器
就算有大厂的应用案例文章但谈及的粒度也比较粗只能提供一个大概的解决思路细的问题还要须要本身去摸索。网络
若是你们刚入门k8s推荐主看官方文档(英文)不要由于英文而怯步,经过翻译软件基本能够大体看懂。缘由呢很简单:k8s发展的很是迅速,只有官方文档才是最可靠的,不少内容已是过期的了。架构
辅助的话你们能够去搜寻一些系列文章(同样的零散的文章由于k8s的版本不一致而容易形成困扰),本人是经过XX时间上的k8s系列课程入门的,推荐刚入门的同窗能够先从这个系列开始。对k8s有必定的掌握力后根据系列课程的内容再去k8s官方文档上增强学习一遍。负载均衡
近期阿里云有推出了一个系列课程:《CNCF × Alibaba 云原生技术公开课》(XX时间上面系列的做者也在其中哦)目前还在更新中,内容也写得很是好能够在用来增强学习一下。框架
Fleet(自研,基于k8s打造的公司适用的容器运维和持续集成系统)
公司微服务框架的升级(兼容k8s引入后的原微服务调用)
生产线高可用k8s集群搭建
服务器资源(CPU、内存)紧张时频繁宕机的优化和避免
高可用BGP ClusterIP和PodIP及经过交换机打通现有网络与k8s集群内网络的互通
全局容器hosts
Java8(JVM)在容器中的调优和优化
PHP容器化
简单的监控和告警(Prometheus + Grafana)
咱们以前有考虑过两种方案进行k8s集群的部署。
最终咱们选择了虚拟机+k8s。
由于咱们以为虚拟机带来的损耗是咱们能够忍受的。一些性能的损耗换来较好的维护性这是咱们想要的。
因为早期的技术正确选型,公司在以微服务的架构方式进行开发已经经历了很长的时间。
因此咱们的大部分应用都是无状态的。这点为咱们迁移k8s带来了很是多的帮助(总所周知有状态的应用程序是很是难迁移的,一样在k8s中也显得比较麻烦)。
因此若是你们如今大部分的应用仍是有状态的,能够先考虑进行应用重构在考虑迁移至k8s。
在开发线咱们基本上已经能够迁移到k8s上,也正在逐步回收资源,将回收后的资源逐步加入k8s中,目前运行了80天左右,最后一次故障在一个月前(开发线资源紧张,由于资源紧张触发了一个node频繁宕机的小坑,后面会有专门的篇幅跟你们详细分享),已稳定运行了30天左右。
目前咱们的开发线k8s集群由于资源关系不是高可用的。
master一台(etcd堆叠)
node五台
harbor一台
总计7台虚拟机
在生产线咱们腾挪了一部分资源用来搭建高可用的k8s集群环境。
同时咱们在生产线的动做也比较保守,目前迁移了小部分边缘应用(非核心业务)到生产线。同时公司RP微服务组件使用的是TCP长链接也踩了一个负载均衡的小坑目前还在优化兼容中。后面会有详细的篇幅来讲明这个问题。
因为生产线资源比较充足至搭建完成没有发生过k8s故障(中间有由于网络策略配置失误致使了一小段服务不可访问)。
目前已稳定运行53天。
master三台
node四台
etcd三台
harbor两台
lvs两台
haproxy两台
总计17台虚拟机
咱们目前没有使用到CSI相关的内容,咱们目前也不支持有状态的应用程序。后续咱们会考虑创建Ceph集群来加入这块的能力。
咱们目前也没有使用Ingress能力(咱们目前采用Service的ClusterIP),后续根据急迫程度可能会考虑加入Ingress能力。
咱们目前没有作日志收集(目前是依赖程序本身的日志传输逻辑自行查看或经过Fleet系统的控制台日志功能WebShell功能进行诊断)
咱们目前的构建系统比较固定,没有那么灵活,后续可能会引入Drone等第三方构建系统进行构建。
.net core的容器化
抱歉,我实在没有那么强的全局观去梳理出所有的分享大纲。我会根据咱们遇事的大体顺序进行分享。我会在每篇的结尾写出下一篇大概会分享什么内容。
下一篇应该会分享:高可用k8s集群搭建的内容,不会详细的说明搭建步骤(会分享咱们目前的拓补图、高可用测试方案等内容),此系列的主要目标读者仍是有必定基础的同窗,会点到为止。
首先是感谢。感谢领导CTO和经理的鼎立支持和协调。感谢k8s社区带来的优秀能力和文档。
ps:分享的全部内容不必定彻底是个人成果,其中咱们的小伙伴也一直在支持这个项目。
若是你们有疑问和须要交流的能够经过评论功能或私信我(推荐优先使用评论,评论的内容也是读者的一笔财富)。
公司(福建福州)目前还有一些技术岗位(java、大数据工程师)缺口,有兴趣的同窗能够给我发消息,我能够帮忙转发。
Fleet系统是咱们公司自研的一套容器运维和持续构建系统。
系统的后续出现方式未定。
Fleet系统咱们是有分期规划的。
目前处在2期进行中(1期是基本知足公司开发人员迁移到k8s的平常运维和使用)。
下面是部分系统截图