既然有了Docker, 为什么还要Kubernetes ?
常言道:“一千个读者眼里有一千个哈姆雷特”。同样的话也适用于 Kubernetes,同样的系统在不同的开发人员眼中也是不同的,甚至在不同阶段对于它的理解也截然不同。
在尚未开始学习Kubernetes之前,我认为它是一套非常复杂的系统,各种抽象概念以及复杂的安装过程。差点因为安装不顺,打算就此放弃。理由很简单:既然有了 Docker,为什么还要 Kubernetes?
之所以觉得Kubernetes系统复杂、难,关键是不知道它到底是干啥的?再加上老版本繁琐的安装过程,愿意啃它是需要一点毅力的。现在,就通过一张简单的对比图告诉你,它到底干了啥!
单看图示上部分,发生的变化仅仅是HOST换成了Pod,底层网络由真实网络换成了覆盖网络,即虚拟网络。对于APP应用开发者而言,即使你完全不懂容器技术也没关系.这是Kubernetes的厉害之处,它提供的抽象层对于APP应用开发者而言是完全透明的。应用在POD中和在HOST主机上并没有本质区别。
还是老问题: 既然有了 Docker,为什么还要 Kubernetes?
回答这个问题,得从为什么需要引入Docker这个问题先开始。你会说,因为需要容器化部署。那为什么需要容器化部署呢?就这个问题还可以走得更远一点。这里我就偷懒了,先打住。看看容器化部署后出现的新问题,即容器实例越来越多。因为容器实例越来越多,就像鸡蛋太多需要一个篮子来装一样,Kubernetes就是那个篮子。当然这不是一个简单的篮子,此处也不扩展了。
标准答案就是:因为有了 Docker,所以才要Kubernetes。是不是感觉进入一个loop,我也这感觉。
从图中也可以看出,Docker容器技术是Kubernetes平台的基础。容器技术主要作用是隔离,通过对系统的关键资源的隔离,实现了主机抽象。Kubernetes平台则是在抽象主机的基础上,实现了集群抽象。
如果用一句话做个总结,就是:
- 容器,提供应用级的主机抽象;Kubernetes,提供应用级的集群抽象。