简介
kubernetes简称k8s,是一种云平台应用部署,管理的解决方案。本文将简单说明从一个初学者来看,k8s。
容器技术
容器 Container
容器(Container)技术是K8s的底层支撑,K8s基于容器技术构建云应用。容器是一种虚拟化技术,核心思想是实现在os层之上的部分逻辑设备的虚拟化,这是容器和虚拟机的本质区别,因此容器相对于虚拟机会轻量很多,也只能和逻辑主机(物理机或者是虚拟机)的os使用相同的os。因此容器提供的虚拟化在于os之上的某些资源的虚拟化,例如虚拟化的cpu,gpu,卷等等,这些虚拟化的资源都叫做逻辑资源,因为对于应用来说,他不知道自己运行在容器之中,而只是普通的调用自己需要的资源,而外面包着的容器层会将对这些逻辑资源的调用转换成对os层资源的调用。
镜像 Image
容器中可以运行镜像(Image),目前镜像主要用途是打包应用和应用运行时的环境,例如运行时库,环境变量等等。
容器运行时 Container Runtime
容器运行时是一种容器实现的技术方案,例如docker就是最著名的container runtime。容器运行时基于容器的技术思想做出具体的实现,从而提供了一些增强的包装和功能,从而使得容器运行时具有差异化的竞争能力,例如容器命令行,ssh,虚拟化设备种类,个性化配置等等的差别。容器实例则是容器运行时基于若干配置产生的某个容器实例,包含了容器运行需要的所有资源,例如挂载的镜像, 卷(Volumn)等等。
K8S
负载均衡
K8s提供了集群级别的应用部署和管理方案,底层就是容器技术。因此很好理解,在单个应用的部署阶段,K8s只要将应用的镜像实例化到容器中就可以完成应用的部署。但是当场景来到集群中时,K8s要管理的是多个资源有限(主要是cpu和内存)的主机,因此如何将应用调用到合适的主机上,从而更好的利用集群的资源就成了一个学问,这也叫做负载均衡。
声明式资源
对于用户来说,对集群的底层管理是繁琐的,因此K8s提供了一类声明式的api,用户只需要声明自己需要部署什么样的应用,K8s就会自动的提供负载均衡的能力。为了给声明式api提供能力支持,K8s提供了许多声明式的资源 ,最典型的就是Node,Pod,Deployment,这些声明式资源是一类由K8s管理和解析的文本,用户通过对这类资源进行编辑,K8s会认识到这类资源发生的变化,从而认识到用户声明的集群理想状态发生了改变,从而自动的将集群的状态调整到理想状态。
Controller
K8s整体的设计哲学是包容开放的,能够拓展自定义逻辑,声明式能力。因此K8s引入了控制器的概念,控制器能够根据声明式资源的实际状态和期望状态的差别进行工作,从而使得集群能够趋于理想状态。