Kubernetes - 为什么要用Kubernetes

2019-11-18

Kubernetes带来的变革

  对于开发/测试人员

  正常公司都会有多套环境,如:开发环境、测试环境、预生产环境和生产环境都是隔离的,而且出于成本考虑,除了生产环境,其他环境是没有日志收集的。

  在没有用k8s的时候,查看线下测试的日志,需要开发或者测试人员,找到对应的机器,在找到对应的容器,然后才能查看日志。
  在用了k8s之后,开发和测试可以直接在k8s的dashboard到对应的namespace,即可定位到业务的容器,然后可以直接通过控制台查看到对应的日志,大大降低了操作时间。

  把应用部署到k8s之后,代码的发布、回滚,以及蓝绿发布、金丝雀发布等都变得特别简单,不仅加快了业务代码迭代的速度,而且全程无需人工干预。

  遵守一次构建,多集群、多环境部署,通过不同的启动参数、不同的环境变量、不同的配置文件实现区分不同的环境。

  使用服务网格后,开发人员在开发应用的过程中,不用再关心代码的网络部分,这些功能都被服务网格实现,让开发人员可以只关心代码逻辑部分,即可实现网络部分的功能,比如:断流、分流、路由、负载均衡、限速和触发故障等功能。

  测试过程中,可能同时多套环境,当然也会需要再创建一套测试环境,之前测试环境的创建,需要找运维或者自行手工搭建。
  在迁移至k8s集群后,只需要在点点鼠标即可在k8s集群上创建一套新的测试环境。

  对于运维人员

  如果你是一名运维人员,可能经常因为一些重复、繁琐的工作感觉厌倦。比如:新增环境,可能需要装系统、装依赖环境、开通权限等等。
  而如今,可以直接用镜像直接部署一套新的测试环境,甚至全程无需自己干预,开发人员通过平台即可一键式创建,大大降低了运维成本。

  一开始,公司业务故障,可能是因为基础环境不一致、依赖不一致、端口冲突等等问题,现在实现镜像部署,所有的依赖、基础都是一样的,大大减少了因为这类基础问题引发的故障。也有可能公司业务是由于服务器宕机、网络等问题,造成服务不可用,此类情况均需要运维人员及时去修复。
  而如今,可能在你收到告警信息的时候,k8s已经帮你恢复了。

  在没有使用k8s时,业务应用的扩容和缩容,都需要人工去处理,从采购服务器、上架、到部署依赖环境,不仅需要大量的人力物力,而且非常容易在中间过程出现问题,又要花费大量的时间去查找问题。成功上架后,还需要在前端反代端添加或该服务器。
  而如今,可以利用k8s的弹性计算,一键式进行扩容和缩容,不仅大大提高了运维效率,而且还节省了不少的服务器资源,提高了资源利用率。

  对于反代配置方面,比如可能你并不会,或者对nginx的配置规则并不熟悉,一些高级的功能你也不会实现。
  而如今,利用k8s的ingress即可简单的实现那些负责的逻辑。并且也不会在遇到nginx少加一个斜杠和多加一个斜杠的问题。

  对于负载均衡方面,之前负载均衡可能是Nginx、LVS、HAProxy、F5等,云上可能是云服务商提供的不在均衡机制。每次添加删除节点时,都需要手动去配置前端负载均衡,手动去匹配后端节点。
  而如今,使用k8s内部的service可以动态发现实现自动管理节点,并且支持自动扩容缩容。之前遇到高峰流量时,经常服务器性能不够,需要临时加服务器面对高峰流量,而如今对于高性能k8s集群,无需管理,自动扩容。

  对于高可用方面,k8s天生的高可用功能,彻底释放了双手,无需再去创建各类高可用工具、检测检查脚本。k8s支持进程级别的健康检查,如发现接口超时或者返回值不正确,会自动处理该问题。

  对于中间件搭建方面,根据定义好的deploy文件或开源helm charts,可以实现秒级搭建各类中间件高可用集群,如Redis、RabbitMQ、Zookeeper等,并且大大减少了出错的概率。

  对于应用端口方面,传统行业中,一个服务器可能跑了很多进程,每个进程都有一个端口,需要人为的去配置端口,并且还需要考虑端口冲突的问题,如果有防火墙的话,还需要配置防火墙。
  在k8s中,端口统一管理,统一配置,每个应用的端口都可设置成一样的,之后通过service进行负载均衡。

  无论是对于开发人员、测试人员还是运维人员,k8s的诞生,不仅减少了工作的复杂性,还减少了各种成本。上述带来的变革只是其中比较小的一部分,更多优点只有用了才能体会到。

总结

单机docker 缺点

  • 宕机需要人为介入,并影响用户体验。
  • 资源占比需人为判断。
  • 维护成本极高。

Kubernetes 优点

  • 可快速扩容/缩容。
  • 无需考虑容器/宿主机自愈。
  • 无需考虑容器分布点(只要宿主机资源够)。
  • 无需额外编写应用检测/自愈脚本。
  • 快速创建高可用中间件。
  • 无需考虑端口是否冲突。
  • 无脑增加宿主机节点。

Kubernetes 缺点

  • 学习成本高
  • 集群故障可能导致权限崩盘。

Kubernetes 难点

  • 人员普及性偏低。
  • 有状态应用的接入。

标题:Kubernetes - 为什么要用Kubernetes
地址:https://blog.njqhome.com:8443/articles/2019/11/18/1574065424194.html