Kubernetes(K8S)
什么是 Kubernetes ? Kubernetes 是 google 开源的一个管理 docker 的集群服务。由于 K 和 S 之间有 8 个字符,通常简称为 K8S。 它存在的目的是什么呢?这里假设你对 Docker 已经有了初步了解。那么 Docker 解决了哪些问题呢。我们简单回顾下:Docker 可以打包服务及服务所依赖的环境,方便迁移;Docker 可以方便地隔离资源,相
什么是 Kubernetes ?
Kubernetes 是 google 开源的一个管理 docker 的集群服务。由于 K 和 S 之间有 8 个字符,通常简称为 K8S。
它存在的目的是什么呢?这里假设你对 Docker 已经有了初步了解。那么 Docker 解决了哪些问题呢。我们简单回顾下:
- Docker 可以打包服务及服务所依赖的环境,方便迁移;
- Docker 可以方便地隔离资源,相当于有了自己独立的运行环境;
Docker 有了镜像私仓后,可以方便地在任何一个可以访问私仓的服务器上进行安装运行,就像我们在手机上安装一个 APP 的畅快感;
有了这些仿佛很美好,但不够完美。如果一个微服务打包成一个 docker 镜像后,如何编排这些微服务,使它能够方便地组装起来形成一个完整的服务就成为了一个亟待解决的问题。
K8S 解决了哪些问题
有了 docker 虚拟镜像(服务)后,保证这些服务满足 HA 部署,能够方便地进行多副本运行(平行扩展),不同服务之间方便地打通网络,进行访问,只有满足了这些,才能够充分利用 docker 的优势,组成一个完整的解决方案。
那 K8S 为我们解决了哪些问题呢?
- 可以让服务高可用运行
- 多副本可以灵活扩容或者减容
- 方便地进行服务编排,很容易地解决服务发现问题
- 方便地对某些服务进行资源控制
- 以上都是建立在集群上,方便地进行集群管理
简单点说,就是如果你需要让你的服务运行在集群上,并且恰好你的服务已经进行了前期的 Docker 虚拟化,更过分点,你还想让自己的服务不经过其它改造和开发就有 HA 部署能力,那么选择 K8S 就对了,如果你贪得无厌还想可以随意扩容,进行灰度发布,方便地做服务发现,不想为网络配置去精心设计服务占用 IP,设置 Docker 映射端口让其向服务的话,那就更得选 K8S 吧。
设计思想
它的设计思想主要以以下几个对象进行说明,先上一副说明图。
其中几个重要的对象,Pod, Replication Controller(RC), Service, 其它的 Node 很简单,略过。简单介绍下几个重要的对象。
Pod,可以理解为代表一组 docker 容器,暂且简单认为是同一种,且为一个容器。RC, 即副本控制器,用来控制某一类 Pod 的数量,你可以控制 RC 中设置的 Pod 数量来动态,增加或者减少集群中容器的数量。有了以上概念,就很容易地把你的单个微服务镜像,以容器的形式运行在集群中了,但此时它还不能向外提供服务,这里 Service 该上场了,Service 代表一种服务,它也是管理 Pod 的,可以设置向外提供的端口,并且把它映射到相应的 Pod 管理的容器中。
简化一点,Pod 是 K8s 中最基本的控制单位,而 RC 和 Service 从两个不同维度管理着 Pod, 其中,RC 去控制所管理的 Pod 的副本数,保证集群中有一定数量的 Pod 存活,动态增减其数量。而 Service 从另一个维度去管理 Pod, 它代表一种微服务,向外提供服务,并且把流量导入给它管理的 Pod,在这个基础上,如果有多个 Pod ,还可以做集群内部的负载均衡。
More
知道了以上这些,其实就理解整个 K8s 的设计核心。当然 K8s 远不止这些,比如它的调度控制,可以智能地让你的 Pod 均衡地运行在一不同的结点上,它可以精确地控制每个服务的运行资源,它可以高可用地监控你的 Pod ,当不等你设置的值时进行动态调整,它打通了集群内部的网络(这点值得分享),让服务之间可以很容易地引用,并且发现,它可以方便地进行服务编排,使你的应用方便地转型为微服务化。等等这些都值得去研究。
如果有时间,对 K8s 的网络处理这块,还可以再分享一篇文章,看看它是如何打通集群网络,打通容器间通信的。
这些都值得你去亲自尝试!
更多推荐
所有评论(0)