做开发的基本都听说过沙盒 (Sandbox) 和虚拟机 (Virtual Machine,简称 VM) ,如今容器技术很火,其中以 docker 最受大家欢迎。作为一种集群管理工具,K8s 最近也是火的不要不要的。 我们经常会讲 docker 和 K8s 联系起来,那么两者之间又存在什么关联呢?
首先 Sandbox 和 VM 都是属于 虚拟技术 ,用来虚拟软件运行环境并具有资源隔离的功能。Sandbox 比较“轻”(只需要虚拟出一个小的环境)且一旦退出就释放之前占用的资源;VM 则比较重(虚拟出整个 *** 作系统,相当于子电脑)。关于 Sandbox 和 VM 的区别可以参考博客: >首先看看k8s[中间8个字母,数过了(逃](Kubernetes)是什么以及为啥会出现这个东西。
总的来说,k8s的出现和使用容器进行部署的趋势是分不开的。
总的来说,app的部署大致分为三个阶段。
最传统的方式中,所有app公用一个物理系统,这种方式会造成很多资源分配上的冲突。
而后进入了虚拟机部署的时代,各个app运行在其自己的VM上,允许一个物理服务器上运行多个系统,并提供了一定的安全级别(各个VM相互隔离)。
现如今,更流行使用容器进行部署。容器类似于 VM(见前文详细比较),但是它们具有轻量级的隔离属性,可以在应用程序之间共享 *** 作系统(OS)。因此,容器被认为是轻量级的。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等。
在使用容器进行app部署的今天,需要一个平台对容器进行管理:
通俗一点,我理解的k8s就是对容器进行管理的工具。其中提供的很多功能能够提升部署的鲁棒性以及整体的运行效率:
至此,Docker和k8s的关系也就明了了:
Docker隔离并打包applications及依赖项。
Kubernetes部署协调管理容器,并提供一些其他的相关功能。
Kubernetes(简称K8S) 是Google开源的分布式的容器管理平台,方便我们在服务器集群中管理我们容器化应用。
节点 (Master node and Worker node)
节点通常指的就是服务器,在k8s中有两种节点:管理节点(Master Node)和工作节点(Worker Node)
管理节点(Master Node):负责管理整个k8s集群,一般由3个管理节点组成HA的架构。
工作节点(Worker Node):主要负责运行容器。
命名空间 (Namespace)
k8s命名空间主要用于隔离集群资源、隔离容器等,为集群提供了一种虚拟隔离的策略;默认存在3个名字空间,分别是默认命名空间 default、系统命名空间 kube-system 和 kube-public。
Object
k8s 对象(Object)是一种持久化存储并且用于表示集群状态的实体。k8s 对象其实就是k8s自己的配置协议,总之我们可以通过定义一个object让k8s根据object定义执行一些部署任务、监控任务等等。
POD
Pod是 Kubernetes 部署应用或服务的最小的基本单位。一个Pod 封装多个应用容器(也可以只有一个容器)、存储资源、一个独立的网络 IP 以及管理控制容器运行方式的策略选项。
副本集 (Replica Set,RS)
是一种控制器,负责监控和维护集群中pod的副本(replicas)数,确保pod的副本数是我们期望的样子。
部署 (Deployment)
表示对k8s集群的一次更新 *** 作,是k8s集群中最常用的Object,主要用于部署应用。支持滚动升级。
服务 (service)
是对应用的抽象,也是k8s中的基本 *** 作单元,一个服务背后由多个pod支持,服务通过负载均衡策略将请求转发到容器中。
Ingress
是一种网关服务,可以将k8s服务通过>
无状态应用 & 有状态应用
无状态应用指的是应用在容器中运行时候不会在容器中持久化存储数据,应用容器可以随意创建、销毁;如果一个应用有多个容器实例,对于无状态应用,请求转发给任何一个容器实例都可以正确运行。例如:web应用
有状态应用指的是应用在容器中运行时候需要稳定的持久化存储、稳定的网络标识、固定的pod启动和停止次序。例如:mysql数据库
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)