K8S是什么?在回答这个问题之前,让我们一起先了解下web应用部署方式的演化过程。
宿主机模式在我刚接触软件开发的时候,人们部署应用的方式通常是这样的:
首先需要一台服务器,然后在服务器上安装WebServer(例如:Nginx或者ApacheServer)。接着,根据应用的运行时要求,安装对应的软件包(例如:如果代码是用Node.js编写,就需要安装Node.js运行时环境)。最后,根据应用的其他功能,安装对应的软件,如数据库之类的。
应用部署的同时,宿主机上也多了各种软件程序。此时,这个web应用提供的服务如下图所示:
随着web应用的日趋复杂,这种部署方式的弊端逐渐出现了。
现代服务器性能非常强悍,如果一台主机上仅运行几个程序,就可能造成机器资源利用率偏低。而且,由于程序是直接运行在宿主机上的,程序之间存在资源竞争关系,会互相影响。如果某个程序造成宿主机卡顿或挂掉,那么其他程序也无法正常工作了。
在年出现Docker容器技术之后,这种部署方式逐渐被淘汰了。
容器容器技术有多种实现方式,比较主流的是Docker。
其logo很好的体现了“容器”的特点——程序就像一个个集装箱,彼此隔离的运行在宿主机上。
区别于传统的宿主机部署模式,容器化技术提供了一个隔离环境。程序之间既不会互相影响,也不会影响宿主机的稳定。
Docker方式运行的容器,可以理解为一个虚拟机(但和虚拟机还是有区别的,虚拟机是对硬件的虚拟化;Docker是操作系统层的虚拟化)。它包含了运行程序所需的运行时环境和程序代码,启动后能够以端口映射的方式,将容器自身的服务暴露给宿主机和外部用户。
容器之间除了彼此隔离之外,也能够通过Docker引擎实现互联。容器之间的访问通常是以内部IP的方式进行的。
随着web应用规模的继续扩大,单主机不再能满足性能要求。现在的部署是基于多主机、多容器进行的。那么,如何对这些主机资源和应用容器进行管理?这个问题的答案指向了本文的主角——K8S。
开源的容器管理平台K8S的全称是Kubernetes,因为在首字母k和尾字母s中间有8个字母,因此被简写为K8S(类似的还有i18n等)。它是由谷歌开源的,主流的容器管理平台。
它的logo也很有意思,K8S就像一个舵一样,让用户能够在茫茫大海中将满载集装箱的大船驶向成功的彼岸。
借助K8S提供的能力,运维人员——甚至是前端开发人员——能够很容易地在集群环境中部署和管理容器。并且,对于以下功能,K8S也能够很好地支持:
负载均衡高可用高并发(多实例)集群管理K8S环境需要先被安装和运行起来。由于这部分的操作需要服务器支持,这里就不做介绍了。下文的全部内容都基于读者能够连接到任一K8S系统这个前提之上。
K8S核心知识点在K8S中,所有资源都是通过声明式配置进行管理的,它们被称作K8S对象。以namespace为例:
apiVersion:v1kind:Namespacemetadata:name:demo-spacespec:finalizers:-kubernetesstatus:phase:Active
不同类型的对象所需的配置不完全相同,但他们都应有如下几个基础配置:
apiVersion-创建该对象所使用的KubernetesAPI的版本,不同的版本,对于yaml中可使用配置项的字段、格式有不同的要求。kind-想要创建的对象的类别metadata-帮助唯一性标识对象的一些数据spec-你所期望的该对象的状态更详细的文档,请移步K8S