Docker 与 K8S学习笔记(十五)—— 核心概念梳理

Kubernetes中涉及很多概念,比如Pod、RC、Label啊等等,初次接触容易蒙圈,所以今天我们将一股脑将这些概念梳理清楚,为后续的学习扫除障碍,大家后面在学习过程中也可以不断翻查本篇内容,强化记忆与理解。

 

一、Pod

Pod是Kubernetes中创建和管理的、最小的可部署的计算单元。它其实是由一组容器组成(最少一个),这一组容器共享存储、网络、以及怎样运行这些容器的声明。一个Pod的组成示意图如下:

Docker 与 K8S学习笔记(十五)—— 核心概念梳理

我们可以看出一个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属于用户自定义的附加信息,主要方便外部工具进行获取或查找。

 

上一篇:k8s中计算资源策略


下一篇:计算资源管理