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

健康之路早在2016年就启动了容器化的评估。眼观现在容器化相关技术的稳定性和可行性也得到了很多的验证,在这样的前提下我们启动了容器化实践之路。

当然在实践的过程中我们也不乏遇到了一些问题,我们希望通过文字来记录和分享我们遇到的一些事情,也希望为大家的容器化之路带来帮助。

概要

目标读者

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

因为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台虚拟机

应用情况

服务器资源情况

生产线(边缘应用迁移)

在生产线我们腾挪了一部分资源用来搭建高可用的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:分享的所有内容不一定完全是我的成果,其中我们的小伙伴也一直在支持这个项目。

如果大家有疑问和需要交流的可以通过评论功能或私信我(推荐优先使用评论,评论的内容也是读者的一笔财富)。

关于Fleet

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

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

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

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

下面是部分系统截图

01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况的更多相关文章

  1. 02 | 健康之路 kubernetes(k8s) 实践之路 : 生产可用环境及验证

    上一篇< 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况 >我们介绍了我们的大体情况,也算迈出了第一步.今天我们主要介绍下我们生产可用的集群架设方案.涉及了整 ...

  2. aspnetcore.webapi实践k8s健康探测机制 - kubernetes

    1.浅析k8s两种健康检查机制 Liveness k8s通过liveness来探测微服务的存活性,判断什么时候该重启容器实现自愈.比如访问 Web 服务器时显示 500 内部错误,可能是系统超载,也可 ...

  3. DolphinScheduler & K8s 在优路科技的实践

    T 摘要 · 本文通过介绍DolphinScheduler on Kubernetes 在优路科技的实践,阐述了DolphinScheduler如何在云原生时代,更好地助力企业实现高效的数据调度解决方 ...

  4. aspnetcore.webapi实战k8s健康探测机制 - kubernetes

    1.浅析k8s两种健康检查机制 Liveness k8s通过liveness来探测微服务的存活性,判断什么时候该重启容器实现自愈.比如访问 Web 服务器时显示 500 内部错误,可能是系统超载,也可 ...

  5. 从 Spark 到 Kubernetes — MaxCompute 的云原生开源生态实践之路

    2019年5月14日,喜提浙江省科学技术进步一等奖的 MaxCompute 是阿里巴巴自研的 EB 级大数据计算平台.该平台依托阿里云飞天基础架构,是阿里巴巴在10年前做飞天系统的三大件之分布式计算部 ...

  6. Kubernetes(k8s) docker集群搭建

    原文地址:https://blog.csdn.net/real_myth/article/details/78719244 一.Kubernetes系列之介绍篇   •Kubernetes介绍 1.背 ...

  7. 知乎技术分享:从单机到2000万QPS并发的Redis高性能缓存实践之路

    本文来自知乎官方技术团队的“知乎技术专栏”,感谢原作者陈鹏的无私分享. 1.引言 知乎存储平台团队基于开源Redis 组件打造的知乎 Redis 平台,经过不断的研发迭代,目前已经形成了一整套完整自动 ...

  8. 深入剖析Kubernetes k8s

    深入剖析Kubernetes k8s 毫无疑问,Kubernetes 已经成为容器领域当之无愧的事实标准.除了 Google.Microsoft 等技术巨擘们在容器领域里多年的博弈外,国内的 BAT. ...

  9. 【葵花宝典】lvs+keepalived部署kubernetes(k8s)高可用集群

    一.部署环境 1.1 主机列表 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 lvs-keepal ...

随机推荐

  1. 记录一次关于Cookie、Json中文乱码的解决方法

    今天工作上遇到一个问题,需要把一个对象集合List<Model>存入一个Cookie,按照原来都封装方法存入都ok,但是到取值都时候中文会变成乱码. 首先,我们可以确认Json和Cooki ...

  2. python安装Django常见错误

    今天没事安装了一下python的web框架,Django.自己踩了一些雷,记录下来,留给后面的学者们,不要踩同样的雷了. 1.pip版本过低,安装不了,升级pip指令 python -m pip in ...

  3. docker安装gitlab-runner

    docker安装gitlab-runner docker pull gitlab/gitlab-runner:latest安装gitlab-runner 打开自己搭建的GitLab网站,点击顶栏的Sn ...

  4. esxi开启SSH

  5. zabbix2.4汉化

    zabbix的2.4版本安装完后,这里的语言界面选择没有中文,其实是这个版本把中文的屏蔽了. [root@zabbix-server opt]# vim /var/www/html/include/l ...

  6. React躬行记(6)——事件

    React在原生事件的基础上,重新设计了一套跨浏览器的合成事件(SyntheticEvent),在事件传播.注册方式.事件对象等多个方面都做了特别的处理. 一.注册事件 合成事件采用声明式的注册方式, ...

  7. 谈谈NOSQL

    从MongoDB引到NOSQL 要讲MongoDB之前,首先要提到一个概念NOSQL(NoSQL = Not Only SQL ) 很大一部分数据是由关系型数据库管理系统(RDMBSs)来处理的,关系 ...

  8. Java的一些基础知识,现在回顾一下,毕竟学了那么久!

    一.基础知识:1.什么是JVM.JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性,java语言是跨平台,jvm不是跨平台的,jv ...

  9. MagicBook屏幕频闪解决方案(Windows、MacOS)

    对于已经看到这篇文章的小伙伴们,就不解释何为PWM调光频闪了. MagicBook笔记本性价比高,但屏幕素质确实很一般,我们人眼看不出来的频闪,实际对眼睛损害很大,如图(需要设置快门参数,如1/400 ...

  10. java-IO各个区别

    BIO:JDK1.4以前用的都是BIO,阻塞IO. 阻塞到我们的读写方法.BIO,如果有一台服务器,能承受简单的客户端请求,那么使用io和net中的同步.阻塞式API应该是可以实现了.但是为了一个用户 ...