01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况

近几年容器相关的技术大行其道,容器、docker、k8s、mesos、service mesh、serverless等名词相信你们多少都有听过,国内互联网公司无一不接触和使用相关技术。前端

健康之路早在2016年就启动了容器化的评估。眼观如今容器化相关技术的稳定性和可行性也获得了不少的验证,在这样的前提下咱们启动了容器化实践之路。java

固然在实践的过程当中咱们也不乏遇到了一些问题,咱们但愿经过文字来记录和分享咱们遇到的一些事情,也但愿为你们的容器化之路带来帮助。node

概要

目标读者

    此系列文章不会涉及到不少的k8s技术,只涉及到咱们最终定案和使用的方案。而且文章不会从头开始,会假设你们对k8s有必定了解有一些基础,最佳的目标读者是正在应用k8s初期和准备应用k8s的公司。docker

由于k8s的生态很是好,相关文章也特别多,入门及介绍文章、文档很是的多,你们能够自行的去补充相关的知识。后端

但有一个很重要的问题是没有完整的生产可用的系列文章,不少是针对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)

技术选型

  • 编排系统:kubernetes(当前版本1.14.1)
  • CRI:Docker(当前版本18.09.4)
  • CNI:Calico(当前版本3.7.2)
  • Image Registry:Harbor(当前版本1.7.5,准备升级1.8.0)
  • 负载均衡:LVS、HAProxy
  • 集群引导:kubeadm(当前版本1.14.1)
  • 监控告警:Prometheus + Grafana
  • Fleet
    • 后端:Java8 + Spring全家桶 + fabric8io kubernetes-client
    • 前端:TypeScript + React + Ant Design Pro

k8s部署方式的选择

咱们以前有考虑过两种方案进行k8s集群的部署。

  1. 物理机+k8s
  2. 虚拟机+k8s

最终咱们选择了虚拟机+k8s。

由于咱们以为虚拟机带来的损耗是咱们能够忍受的。一些性能的损耗换来较好的维护性这是咱们想要的。

咱们的现状

因为早期的技术正确选型,公司在以微服务的架构方式进行开发已经经历了很长的时间。

因此咱们的大部分应用都是无状态的。这点为咱们迁移k8s带来了很是多的帮助(总所周知有状态的应用程序是很是难迁移的,一样在k8s中也显得比较麻烦)。

因此若是你们如今大部分的应用仍是有状态的,能够先考虑进行应用重构在考虑迁移至k8s。

开发线(总体迁移进行中)

在开发线咱们基本上已经能够迁移到k8s上,也正在逐步回收资源,将回收后的资源逐步加入k8s中,目前运行了80天左右,最后一次故障在一个月前(开发线资源紧张,由于资源紧张触发了一个node频繁宕机的小坑,后面会有专门的篇幅跟你们详细分享),已稳定运行了30天左右。

目前咱们的开发线k8s集群由于资源关系不是高可用的。

master一台(etcd堆叠)

node五台

harbor一台

总计7台虚拟机

应用状况

image_thumb9

服务器资源状况

image_thumb10

生产线(边缘应用迁移)

在生产线咱们腾挪了一部分资源用来搭建高可用的k8s集群环境。

同时咱们在生产线的动做也比较保守,目前迁移了小部分边缘应用(非核心业务)到生产线。同时公司RP微服务组件使用的是TCP长链接也踩了一个负载均衡的小坑目前还在优化兼容中。后面会有详细的篇幅来讲明这个问题。

因为生产线资源比较充足至搭建完成没有发生过k8s故障(中间有由于网络策略配置失误致使了一小段服务不可访问)。

目前已稳定运行53天。

master三台

node四台

etcd三台

harbor两台

lvs两台

haproxy两台

总计17台虚拟机

应用状况

image_thumb14

服务器资源状况

image_thumb13

咱们的不足和后续要作的事情

咱们目前没有使用到CSI相关的内容,咱们目前也不支持有状态的应用程序。后续咱们会考虑创建Ceph集群来加入这块的能力。

咱们目前也没有使用Ingress能力(咱们目前采用Service的ClusterIP),后续根据急迫程度可能会考虑加入Ingress能力。

咱们目前没有作日志收集(目前是依赖程序本身的日志传输逻辑自行查看或经过Fleet系统的控制台日志功能WebShell功能进行诊断)

咱们目前的构建系统比较固定,没有那么灵活,后续可能会引入Drone等第三方构建系统进行构建。

.net core的容器化

有没有系列大纲?下一篇会分享什么?

抱歉,我实在没有那么强的全局观去梳理出所有的分享大纲。我会根据咱们遇事的大体顺序进行分享。我会在每篇的结尾写出下一篇大概会分享什么内容。

下一篇应该会分享:高可用k8s集群搭建的内容,不会详细的说明搭建步骤(会分享咱们目前的拓补图、高可用测试方案等内容),此系列的主要目标读者仍是有必定基础的同窗,会点到为止。

最后

首先是感谢。感谢领导CTO和经理的鼎立支持和协调。感谢k8s社区带来的优秀能力和文档。

ps:分享的全部内容不必定彻底是个人成果,其中咱们的小伙伴也一直在支持这个项目。

若是你们有疑问和须要交流的能够经过评论功能或私信我(推荐优先使用评论,评论的内容也是读者的一笔财富)。

公司(福建福州)目前还有一些技术岗位(java、大数据工程师)缺口,有兴趣的同窗能够给我发消息,我能够帮忙转发。

关于Fleet

Fleet系统是咱们公司自研的一套容器运维和持续构建系统。

系统的后续出现方式未定。

Fleet系统咱们是有分期规划的。

目前处在2期进行中(1期是基本知足公司开发人员迁移到k8s的平常运维和使用)。

下面是部分系统截图

image_thumb4

image_thumb5

image_thumb6

image_thumb7

相关文章
相关标签/搜索