1、前言

随着容器技术的快速发展,诸如Kubernetes(以下简称k8s)此类容器编排技术应运而生,当人们逐渐意识到容器是云计算的未来,越来越多的人投入到容器技术的怀抱,也就是在这短短几年里,k8s赢得了这场战争,实际上,k8s的带来的影响已经远超容器管理领域本身。
服务网格的概念已经走进大家视线,而这也恰好让人们意识到,k8s岂不正是实现微服务的一种解决方案,这也进一步将k8s推向风口浪尖。

2、k8s的核心概念

本文是建立在已经对docker技术有一定了解的基础上的,就不再赘述docker相关的概念了,初步介绍一下k8s的核心概念和思想,目的是让大家快速熟悉,更好理解接下来的内容。

1. POD

这是k8s里定义的最小单元,因为k8s是源于google,而该项目目标也不仅仅是支持docker这一种容器技术,抽象出一个pod的概念,其实k8s本身不关心pod内部是什么类型容器,可以有多个容器在pod内启动(官方建议单一pod单一容器),pod内容器共享网络,共享存储,pod可以由控制器启动,控制器也就是k8s负责编排的组件之一,常见的有

  • Deployment,通过指定副本数量等属性,根据配置的pod模版,部署无状态的服务,能够提供强力的回滚,滚动更新等能力,这个也是最常用的一种;

  • Statefulset,有状态副本集,一般部署etcdelasticsearch等等这种有状态的服务,一般同时会挂载存储卷(也是k8s中定义的一种对象);

  • DeamonSet,守护进程集,一般指定节点部署一些服务,比如cpu监控等;

2. Service

pod被启动后,在k8s中是无法从外部访问的,这时候就需要service将其暴露出去,service相当于pod的负载均衡器,一般通过以下方式:

  • CluserIP(默认), 通过iptables做nat规则转换,将流量转到相应的pod内,集群内部服务之间访问就是通过这种方式;

  • NodePort,暴露主机随机端口,kube-proxy组件将相应规则写入iptables表,访问主机端口将会被引流至相应的pod,这种方式能够对集群外部暴露服务;

  • LoadBalancerNodePort的变种,一般由具体的云服务商实现,比如阿里云,一旦service创建后, 会自动创建一个负载均衡,会自动做80:3xxxx端口的映射,流量通过负载均衡,会转到相应主机端口,最终根据iptables规则 将流量转发到pod内;

  • ingress, 作为7层http负载,作用相当于反向代理的nginx的服务,流量通过一台负载均衡进来,可由ingress配置域名或者路径,转发到相应service;

这里只是简单介绍核心概念,深入学习的话请移步官方文档

3、技术对比

有几种竞争技术可用于管理大型Docker部署和基于容器的服务。你可能听说过其中一些退役的解决方案:Docker Swarm,Apache Mesos,OpenStack Magnum等。然而,现在Kubernetes已经淘汰了其中大多数竞争对手
会被与k8s拿来对比的,应该就Docker Swarm可以应战,swarm是docker原生的集群工具,部署简单,而且对于熟悉docker的人,学习成本低,而k8s最令开发者头疼的莫过于非常高的复杂度,和学习成本,不过目前不管是阿里云还是其他云服务商,都同时提供了这两个解决方案,而且都有在生产环境大规模使用的案例,这里拿比较成熟的阿里云的这两种解决方案对比:

  1. 资源调度 
    这一点上两者都都做到可以按集群资源调度分配,只是调度的粒度不同,swarm是容器,而k8s是pod;

  2. 自动伸缩
    swarm本身不支持,但是依靠阿里云实现了该功能,而k8s有水平自动拓展HPA,可以根据监控数据进行自动伸缩;

  3. 负载均衡
    k8s本身提供了多种方案,内部service是通过iptables实现,外部7层负载均衡有ingress层,阿里云也提供了LoadBalancer支持负载均衡;
    swarm本身没有负载均衡层,不过阿里云也通过

  4. 滚动更新
    swarm目前也支持了滚动更新,并且在阿里云上实现了蓝绿部署等,k8s本身的deployment支持滚动升级

  5. 容灾恢复
    swarm没有做到,在节点挂掉的情况下,服务无法快速恢复;
    k8s是能够做到这一点,副本控制器能够维持副本数量,节点挂掉也会迅速从其他节点启动一定数量的副本,并且比较完善的监控也可以及时发现问题;

而从swarm本身来看的话,由于其是集成到docker中的,swarm集群只会有两层交互,容器启动是毫秒级,要远快于k8s, 但是兼容的docker API也使得其无法进行更精细的管理,
相对的k8s有副本控制器可以监控并维护容器的生命周期,有pod可以进行更加精细的管理,
总结来看,其实swarm本身的重心是放在了docker容器编排上,而k8s的却是在考虑如何管理,事实上,现在还是越来越多的人倾向于使用k8s,也正是看中了其诸多优点。

4、实践

我们在使用自建集群的过程中,由于官方的dashboard操作yaml的学习成本很高,所以我们使用了wayne这个开源的k8s管理项目,其功能包含但不限于dashbaord的功能,权限管理,人员划分,部门划分等,属于是一个面向大型项目团队的k8s集群管理后台,以下是一些实例

在使用过程中,改后台,确实是带来了许多便利,可以免去k8s的yaml配置的学习成本,通过可视化界面完成服务的创建,我们前期的一些试验性服务都是通过这个部署;
但是同时也存在一些弊端,在k8s的基础之上,抽象出了更多的概念,包括项目划分,权限管理等等,这些模块的目的是为了针对大型团队,控制项目人员,分配资源,不过同时,这些额外的概念对于使用者,尤其是对k8s也不熟悉,只是关心如何部署服务的开发人员,会混淆k8s本身的概念,导致学习成本进一步上升,针对小型团队,一些复杂的资源划分,项目划分功能反而显得冗余。

当然,正如前文说的,目前我们还是倾向于是用现有的云提供商所实现的k8s解决方案;在阿里云上的实践也证明了其带了的许多便利,确实会极大减少集群维护人员的负担,其相对完善的后台,也能够满足绝大多数情况的开发人员使用,其优势还主要体现在以下方面:

  1. 阿里云维护的高可用集群,免去了自维护的所面临的机房,网络诸多问题;

  2. 负载均衡的支持,不需要自己搭建配置ingress组件,创建服务会自动生成负载均衡

  3. 阿里云镜像仓库支持,可以直接从镜像创建pod,且有创建模版,可以轻松的创建服务;

  4. 云盘等文件系统支持,非常方便的声明和挂载存储卷;

  5. 优秀的监控报警系统,从多个维度,对服务进行详细的监控,灵活配置报警;

6、搭建注意事项

想要更加深入的理解和使用k8s, 通过自建k8s集群是一种不错的手段,搭建方法参考官网即可;
这里有一些搭建过程中的值得注意的一些细节:

  1. 建议使用阿里的源

1cat <<EOF > /etc/yum.repos.d/kubernetes.repo
2[kubernetes]
3name=Kubernetes
4baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
5enabled=1
6gpgcheck=0
7EOF
  1. 如果遇到kubeletdocker的文件驱动不一致,可以修改docker的驱动

1//;/etc/docker/daemon.json
2{
3  "exec-opts": ["native.cgroupdriver=systemd"]
4}
  1. kube-proxy默认使用iptables,考虑性能可以改为ipvs

  • yum install -y ipvsadm

  • 查看内核模块是否加载 lsmod|grep ip_vs

  • 加载内核模块

1modprobe -- ip_vs
2modprobe -- ip_vs_rr
3modprobe -- ip_vs_wrr
4modprobe -- ip_vs_sh
5modprobe -- nf_conntrack_ipv4
  • 修改 kube-proxy 配置 
    kubectl edit configmap kube-proxy -n kube-system,把 mode 改为 ipvsscheduler默认为空,使用轮训方式负载均衡

7、压测数据分析

自建集群进行了一些性能测试,以下有一些压测数据的分析,仅供参考
压测环境

k8s集群 并发60

Task63 | ReqTPS: 4522 | RespTPS: 4522 | RT: 12 | TotalSend: 3144614 | TotalPass: 3144558 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:55
Task63 | ReqTPS: 4538 | RespTPS: 4536 | RT: 12 | TotalSend: 3140137 | TotalPass: 3140081 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:54
Task63 | ReqTPS: 4583 | RespTPS: 4584 | RT: 12 | TotalSend: 3135644 | TotalPass: 3135590 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:53
Task63 | ReqTPS: 4615 | RespTPS: 4616 | RT: 12 | TotalSend: 3131107 | TotalPass: 3131052 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:52
Task63 | ReqTPS: 4525 | RespTPS: 4527 | RT: 12 | TotalSend: 3126538 | TotalPass: 3126482 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:51
Task63 | ReqTPS: 4480 | RespTPS: 4480 | RT: 12 | TotalSend: 3122058 | TotalPass: 3122000 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:50
Task63 | ReqTPS: 4537 | RespTPS: 4531 | RT: 12 | TotalSend: 3117623 | TotalPass: 3117565 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:49
Task63 | ReqTPS: 4529 | RespTPS: 4530 | RT: 12 | TotalSend: 3113131 | TotalPass: 3113079 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:48
Task63 | ReqTPS: 4521 | RespTPS: 4522 | RT: 12 | TotalSend: 3108647 | TotalPass: 3108594 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:47
Task63 | ReqTPS: 4495 | RespTPS: 4496 | RT: 12 | TotalSend: 3104171 | TotalPass: 3104117 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:46

相比之下,裸机java

Task63 | ReqTPS: 7391 | RespTPS: 7392 | RT: 7 | TotalSend: 3970815 | TotalPass: 3970763 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:24
Task63 | ReqTPS: 7363 | RespTPS: 7366 | RT: 7 | TotalSend: 3963498 | TotalPass: 3963445 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:23
Task63 | ReqTPS: 7231 | RespTPS: 7229 | RT: 7 | TotalSend: 3956209 | TotalPass: 3956153 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:22
Task63 | ReqTPS: 7394 | RespTPS: 7392 | RT: 7 | TotalSend: 3949050 | TotalPass: 3948996 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:21
Task63 | ReqTPS: 7227 | RespTPS: 7228 | RT: 7 | TotalSend: 3941730 | TotalPass: 3941678 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:20
Task63 | ReqTPS: 7078 | RespTPS: 7080 | RT: 8 | TotalSend: 3934575 | TotalPass: 3934522 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:19
Task63 | ReqTPS: 6932 | RespTPS: 6933 | RT: 8 | TotalSend: 3927568 | TotalPass: 3927513 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:18
Task63 | ReqTPS: 6887 | RespTPS: 6882 | RT: 8 | TotalSend: 3920698 | TotalPass: 3920642 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:17
Task63 | ReqTPS: 6837 | RespTPS: 6840 | RT: 8 | TotalSend: 3913880 | TotalPass: 3913829 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:16
Task63 | ReqTPS: 6866 | RespTPS: 6864 | RT: 8 | TotalSend: 3907111 | TotalPass: 3907057 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:15

k8s集群 并发40

Task63 | ReqTPS: 4569 | RespTPS: 4571 | RT: 8 | TotalSend: 1716607 | TotalPass: 1716573 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:59
Task63 | ReqTPS: 4571 | RespTPS: 4568 | RT: 8 | TotalSend: 1712084 | TotalPass: 1712048 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:58
Task63 | ReqTPS: 4517 | RespTPS: 4520 | RT: 8 | TotalSend: 1707559 | TotalPass: 1707526 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:57
Task63 | ReqTPS: 4542 | RespTPS: 4541 | RT: 8 | TotalSend: 1703087 | TotalPass: 1703051 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:56
Task63 | ReqTPS: 4473 | RespTPS: 4473 | RT: 8 | TotalSend: 1698590 | TotalPass: 1698555 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:55
Task63 | ReqTPS: 4510 | RespTPS: 4514 | RT: 8 | TotalSend: 1694162 | TotalPass: 1694127 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:54
Task63 | ReqTPS: 4539 | RespTPS: 4536 | RT: 8 | TotalSend: 1689697 | TotalPass: 1689658 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:53
Task63 | ReqTPS: 4563 | RespTPS: 4561 | RT: 8 | TotalSend: 1685203 | TotalPass: 1685167 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:52
Task63 | ReqTPS: 4573 | RespTPS: 4575 | RT: 8 | TotalSend: 1680686 | TotalPass: 1680652 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:51
Task63 | ReqTPS: 4555 | RespTPS: 4555 | RT: 8 | TotalSend: 1676159 | TotalPass: 1676123 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:50

总的来说,使用k8s集群的优势在于使用镜像,方便快速部署,以及集群的资源控制等方面,性能相对裸机会有一些损耗,不过这些损耗对于绝大多数服务是没有任何影响的 。

最近热文:某程序员动了公司的祖传代码“屎山”,半年后怒交辞职报告!最新7月份编程语言排行榜,R语言史无前例的高光时刻
百度网盘这波666,自带不限速下载,真香!
网络世界有哪些不为人知的秘密?明天见(。・ω・。)ノ♡

花椒服务端k8s技术实践相关推荐

  1. nuxt服务端渲染技术

    第5章 网站前台-活动与招聘 学习目标: 掌握NUXT框架的基本使用方法 完成十次方网站前台的搭建 完成十次方网站前台活动模块的功能 完成十次方网站前台招聘模块的功能 1 服务端渲染技术NUXT 1. ...

  2. 普元微服务与容器技术实践沙龙第二期

    企业数字化转型已成为全球CXO们的共识,而微服务架构.DevOps是实现IT精益运营的重要手段.普元通过全面开放普元企业界云计算平台的研发过程.文档和技术,形成软件行业的"众筹模式" ...

  3. react服务端渲染技术

    Webpack和react的项目一般打包出来的文件会包括 js css 文件, 在html里也就只需要用标签引入这几个文件就可以在客户端抓到JS信息之后动态渲染HTML,可是再右键点击显示网页源代码的 ...

  4. Day210.服务端渲染技术NUXT、整合前台主页面、名师、课程静态页面、首页整合banner数据后端部分【创建banner微服务、接口、banner后台前端实现】 -谷粒学院

    谷粒学院 服务端渲染技术NUXT 一.服务端渲染技术NUXT 1.什么是服务端渲染 服务端渲染又称SSR (Server Side Render)是在服务端完成页面的内容,而不是在客户端通过AJAX获 ...

  5. 一、服务端渲染技术NUXT

    文章目录 一.服务端渲染技术NUXT 1.1 什么是服务端渲染 1.2 什么是NUXT 2.NUXT环境初始化 2.1 下载压缩包 2.2解压 2.3修改package.json 2.4修改nuxt. ...

  6. 即构互动白板音视频同步、多端协作技术实践

    8月27日晚,即构联合技术社区LiveVideoStack在线上举办了互动白板的技术分享直播活动,吸引了大量在线教育及音视频相关的开发者参与.即构科技互动白板研发负责人陈晓聪在活动上分享了我们在互动白 ...

  7. JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践

    任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层, ...

  8. SSI服务端包含技术

    1.基于微服务,页面内容多如何进行管理? 将页面拆分成一个一个的小页面,通过cms去管理这些小页面,当要更改部分页面内容时只需要更改具体某个小页 面即可. 2.页面拆分出来怎么样通过web服务浏览? ...

  9. Web服务端性能提升实践

    随着互联网的不断发展,日常生活中越来越多的需求通过网络来实现,从衣食住行到金融教育,从口袋到身份,人们无时无刻不依赖着网络,而且越来越多的人通过网络来完成自己的需求. 作为直接面对来自客户请求的Web ...

最新文章

  1. linux一个进程通知另外一个进程,Linux进程通信学习笔记
  2. Scrum联盟发布《2016年度Scrum状态调查报告》
  3. php文件里直接写上?xml version=1.0 encoding=utf-8?出错?
  4. 1年排名前进13位 ,这个论题成顶会新宠!
  5. 从0成为Facebook广告高手系列教程
  6. 干货!一文带您读懂区块链溯源!
  7. 【JY】2021全国首届工程仿真大赛154个项目视频教程分享
  8. 医疗行业某集团公司财务系统迁移阿里云的案例分享
  9. 服务器端给客户端发送消息,linux 服务器端给客户端发送消息
  10. DC离职率预测案例分析
  11. 这两他安搬家,今天终于搬完了!
  12. [Unity ECS] 游戏对象转换和子场景 [1]
  13. Redhat Linux 5.3环境实施DB2 V9.7 HADR
  14. 旺店通·企业奇门与金蝶云星空对接集成查询退货入库单打通销售退货新增
  15. 高通平台ITS:scene2_a/test_effects fail
  16. python 拦截windows弹窗广告_win10系统怎样拦截各种软件的广告弹窗
  17. MCAFee(麦咖啡)进程解释
  18. python爬虫(以简书为例)
  19. win10 安装office 2016 plus 备忘
  20. excel数据统计技巧:如何对表格区域内所含字母进行计数

热门文章

  1. python 好用的库存尾货女装_品牌女装库存尾货服装赚钱的秘密你们怎么可以不知道呢?...
  2. KKT条件,百度还是清晰的,主要个人的逻辑比较严密,感觉讲的意识到位但是逻辑不通,这里把百度到的理顺
  3. php分享朋友圈源码,php微信分享到朋友圈、QQ、朋友、微博
  4. this与super。
  5. aspcms首页content内容html代码过滤,ASPCMS内容调用去掉html标签
  6. LayoutInflater源码分析
  7. Java读写pdf、pdf转图片工具类
  8. 学校计算机教室张贴些,适合微机室张贴的名言警句
  9. 蓝海创意云vray渲染使用环境光遮挡
  10. [codevs]失恋28天题目系列