01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况
近几年容器相关的技术大行其道,容器、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集群的部署。
- 物理机+k8s
- 虚拟机+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) 实践之路 : 开篇及概况的更多相关文章
- 02 | 健康之路 kubernetes(k8s) 实践之路 : 生产可用环境及验证
上一篇< 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况 >我们介绍了我们的大体情况,也算迈出了第一步.今天我们主要介绍下我们生产可用的集群架设方案.涉及了整 ...
- aspnetcore.webapi实践k8s健康探测机制 - kubernetes
1.浅析k8s两种健康检查机制 Liveness k8s通过liveness来探测微服务的存活性,判断什么时候该重启容器实现自愈.比如访问 Web 服务器时显示 500 内部错误,可能是系统超载,也可 ...
- DolphinScheduler & K8s 在优路科技的实践
T 摘要 · 本文通过介绍DolphinScheduler on Kubernetes 在优路科技的实践,阐述了DolphinScheduler如何在云原生时代,更好地助力企业实现高效的数据调度解决方 ...
- aspnetcore.webapi实战k8s健康探测机制 - kubernetes
1.浅析k8s两种健康检查机制 Liveness k8s通过liveness来探测微服务的存活性,判断什么时候该重启容器实现自愈.比如访问 Web 服务器时显示 500 内部错误,可能是系统超载,也可 ...
- 从 Spark 到 Kubernetes — MaxCompute 的云原生开源生态实践之路
2019年5月14日,喜提浙江省科学技术进步一等奖的 MaxCompute 是阿里巴巴自研的 EB 级大数据计算平台.该平台依托阿里云飞天基础架构,是阿里巴巴在10年前做飞天系统的三大件之分布式计算部 ...
- Kubernetes(k8s) docker集群搭建
原文地址:https://blog.csdn.net/real_myth/article/details/78719244 一.Kubernetes系列之介绍篇 •Kubernetes介绍 1.背 ...
- 知乎技术分享:从单机到2000万QPS并发的Redis高性能缓存实践之路
本文来自知乎官方技术团队的“知乎技术专栏”,感谢原作者陈鹏的无私分享. 1.引言 知乎存储平台团队基于开源Redis 组件打造的知乎 Redis 平台,经过不断的研发迭代,目前已经形成了一整套完整自动 ...
- 深入剖析Kubernetes k8s
深入剖析Kubernetes k8s 毫无疑问,Kubernetes 已经成为容器领域当之无愧的事实标准.除了 Google.Microsoft 等技术巨擘们在容器领域里多年的博弈外,国内的 BAT. ...
- 【葵花宝典】lvs+keepalived部署kubernetes(k8s)高可用集群
一.部署环境 1.1 主机列表 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 lvs-keepal ...
随机推荐
- Verilog写一个对数计算模块Log2(x)
网上一个能用的也没有,自己写一个把. 1.计算原理: 整数部分 网上找到了一个c语言的计算方法如下: int flog2(float x) { return ((unsigned&)x> ...
- vue 开发webapp 手机返回键 退出问题
vue 开发webapp 手机返回键 退出问题 mui进行手机物理键的监听 首先安装 vue-awesome-mui npm i vue-awesome-mui 在main.js注册 在index.h ...
- SpringBoot系列——加载自定义配置文件
前言 SpringBoot启动时默认加载bootstrap.properties或bootstrap.yml(这两个优先级最高).application.properties或application. ...
- Azkaban —— 编译及部署
一.Azkaban 源码编译 1.1 下载并解压 Azkaban 在3.0版本之后就不提供对应的安装包,需要自己下载源码进行编译. 下载所需版本的源码,Azkaban的源码托管在GitHub上,地址为 ...
- spring cloud 系列第3篇 —— ribbon 客户端负载均衡 (F版本)
源码仓库地址:https://github.com/heibaiying/spring-samples-for-all 一.ribbon 简介 ribbon是Netfix公司开源的负载均衡组件,采用服 ...
- Mui a 链接失效的解决办法
方法一: mui('body').on('tap', 'a', function() { if(this.href){ //判断链接是否存在 location.href = this.href; ...
- EhCache注解 (转载)
其实EhCache使用的就是Spring Cache的注解. 1.1 @Cacheable @Cacheable可以标记在一个方法上,也可以标记在一个类上.当标记在一个方法上时表示该方法是支持缓存的, ...
- 使用回调的方式实现中间件-laravel
$app = function ($request) { echo $request . "\n"; return "项目运行中....."; }; // 现在 ...
- C#简单的连接数据库
- Python 3.6 安装
1. 下载 # 我下载到了 /tmp 目录中 cd /tmp wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz 2. 安装依赖 ...