Kubernetes是银弹还是智子?

  • A+
所属分类:分布式系统

Kubernetes,当前最热门的系统,很多公司甚至将其列入战略计划,但也有不少人对其三缄其口。
本文仅代表个人简介,如有不同意见,请留言讨论。

前言

名词解答:
1. 银弹: 比喻为具有极端有效性的解决方法,作为杀手锏、最强杀招、王牌等的代称。
2. 智子: 科幻小说《三体》系列中锁死人类科技的人工智能。

毕竟Kubernets在非常底层的位置,用的舒服是得心应手,用的悲剧是鸡飞狗跳

越来越复杂的Kubernetes

Kubernets越来越像全家桶,除了集群管理外,加入了越来越多的功能。相比之下,Borg只能算是它的一个子集。
全家桶,使用Windows的朋友应该会想起曾经的百度全家桶360全家桶,反正是要的和不要的都给你装了。

对于部分用户来说可能是好事,但也使得Kubernets越来越复杂。

场景

非常小的规模

本来就只有几个进程的乞丐版服务器,裸奔就行了。

小规模场景

一般公司发展初期,开发力量有限,像什么流量调度,自动化部署之类的。有能用的绝不自己造轮子。
Kubernetes似乎正好提供所有需要的能力,至于数据库之类的有状态服务,可以直接使用云产品,或者另外部署。
小规模的体量,Kubernetes也不会有太大压力。

大规模场景

有大规模场景的公司,通常都已经成为巨头。这样公司通常有一定的技术积累,更关注性能和稳定性。
对于这样的公司而言,相比收益,使用Kubernetes面临的挑战或许更多用看上去不是很靠谱的新系统去替换现有的牛逼技术,大概率会鸡飞狗跳
保不齐是Google为了带歪大公司的智子呢,开个玩笑。

容器管理

Kubernetes显然不是第一个集群管理系统。抛开Borg不说,阿里的T4,百度的Metrix都是不错的集群管理系统
由于有自身的体量锤炼,稳定性,规模都是开源生态较少关注的。
于是我们发现,Kubernetes能优化到几千的规模,就感觉厉害的不得了,但老系统可能默默无闻的支撑着万级的规模。

标签

Borg: Kubernetes的前身中,有提到Kubernetes相对于Borg的一个改进,是增加了服务和标签。
显然,这是分布式中间件的地盘,比如阿里系的ConfigServer。我想,在管理功能上应该是强于通用的标签和服务吧。

网络

Kubernetes使用服务抽象支持命名和负载均衡:带名字的服务,会映射到由标签选择器定义的一组动态Pod 集。
Kubernets默认的网络模式是Bridge模式,每个容器会有独立的网络平面,单独的IP。负载均衡则是通过iptables/Proxy实现。
显然,这有两个风险:
1. 大吞吐量下的网络性能堪忧
2. 增加了网络的复杂性,网络问题通常是最难排查的问题。

在大规模的场景下,Host模式直连通常是首选方案。简单而可靠。比如在Borg中,网络就是直连的,由于并没有给每个容器分配IP,所以Borg Name Server解析地址的时候,会返回ip:port,然后直连。阿里也有类似的实现,称之为Vipserver。

除了Host模式直连,硬件虚拟化也是一个办法,比如SR-IOV技术,可以让网卡直接进入Pod。硬件加持下,性能甚至会强于Host模式。

无论哪种方式,都是尽可能简化通信链路。简而言之,大规模场景下,谁都不希望多一次转发

单元化

如果我们用的是标准的Kubernetes全家桶,那么网络通信其实是封闭在集群内的。Kubernetes做跨城市部署似乎还是有些难度。
这种情况下,就需要一个可以跨Kubernetes的网络平面来实现网络通信。

结论

  1. 对于规模不是很大的场景,Kubernetes是个不错的选择。
  2. 对于超大规模的场景,Kubernetes的全家桶模式显然力不从心,所以大公司通常会有一些改造,反过来影响Kubernetes的生态。
  3. 是得心应手还是鸡飞狗跳,能否用好Kubernetes或许比Kubernetes本身更关键。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: