Docker 与 K8S学习笔记(十五)—— 核心概念梳理
Kubernetes中涉及很多概念,比如Pod、RC、Label啊等等,初次接触容易蒙圈,所以今天我们将一股脑将这些概念梳理清楚,为后续的学习扫除障碍,大家后面在学习过程中也可以不断翻查本篇内容,强化记忆与理解。
一、Pod
Pod是Kubernetes中创建和管理的、最小的可部署的计算单元。它其实是由一组容器组成(最少一个),这一组容器共享存储、网络、以及怎样运行这些容器的声明。一个Pod的组成示意图如下:
我们可以看出一个Pod有一个我们称之为“根容器”的Pause容器和多个用户业务容器组成,为什么要这么设计呢?
-
当将一组容器作为一个基本单元时,可利用Pause容器这种业务无关的容器描述当前整个单元的状态;
-
Pod里多个业务容器共享Pause容器的IP和Volume,简化了业务容器间通信问题与文件共享问题。
二、ReplicaSet(加强版的RC)
ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合,简单的说就是保障用户应用集群的高可用性,当集群Pod数小于设定值则补充,大于设定值则剔除多余的Pod。其实ReplicaSet就是加强版的RC,它与RC用法基本相同,不同的是ReplicaSet支持集合式的Label Selector。
这里需要注意:我们在实际使用时应该避免直接使用ReplicaSet,而是应该通过Deployment来创建ReplicaSet和Pod。
三、Deploment
Deploment是Kubernetes 1.2开始引入的新概念,其目的是为了更好解决Pod编排问题,为此Deploment在内部使用ReplicaSet来实现目的,Deployment通过管理ReplicaSet间接管理Pod,即Deployment管理ReplicaSet,ReplicaSet管理Pod。Deployment有如下几种使用场景:
-
创建一个Deployment对象来生成对应的ReplicaSet并完成Pod副本的创建过程;
-
通过检查Deployment的状态来判断部署是否完成;
-
更新Deployment以创建新的Pod;
-
如果当前Deployment不稳定则会滚到先前的一个版本;
-
挂起或恢复一个Deployment。
四、Service(服务)
Service定义了外界访问一组Pod的方式,Service有自己的IP和端口,Service为这些Pod提供负载均衡。比如有一个文件上传应用,其后端应用有三个Pod副本,这三个副本由于会经常性被销毁重启,所以前端必然不能时刻维护这三个副本的地址,这时候Service的作用就体现出来了,它能解耦前端应用与后端应用的这种关联。
五、Label(标签)
一个Label是一组键值对,key、value都由用户定义,Lable可以附加在各种资源上,如Pod、ReplicaSet、Service等。一个资源对象可以定义任意数量的Label,同一个Label也能附加到任意数量的资源上,我们通过Lable可以实现多维度的资源分组管理能力,也可结合Label Selector实现类似SQL的对象查询机制。
六、Volume(存储卷)
Kubernetes中的Volume是Pod中能够被多个容器访问的共享目录,其概念、用途和目的与Docker中的Volume类似,但并不等价,首先Kubernetes的Volume定义在Pod上,然后被Pod内多个容器挂载;其次Kubernetes的Volume生命周期与Pod相同,但与容器的生命周期无关,当容器被终止或重启时,Volume中的数据也不会丢失;最后Kubernetes的Volume支持多种类型的实现如GlusterFS、Ceph等。
七、Namespace(命名空间)
试想,如果有多个用户或项目组使用同一个Kubernetes集群,那他们的应用该如何区分呢,答案就是Namespace。其通过将集群内的资源对象分配到不同Namespace中,形成逻辑上的不同分组,从而达到多组件件资源隔离的效果。
八、Annotation(注解)
Annotation与Label类似,也使用键值对形式进行定义,相比于Label,Annotation属于用户自定义的附加信息,主要方便外部工具进行获取或查找。