本文首发于个人公众号 Linux云计算网络(id: cloud_dev),专一于干货分享,号内有 10T 书籍和视频资源,后台回复**「1024」**便可领取,欢迎你们关注,二维码文末能够扫。编程
Hi,你们好,欢迎你们和我一块儿学 K8S,这是系列第三篇。网络
每一种技术,为了描述清楚它的设计理念,都会自定义一堆概念或术语。在进入一门技术的研究以前,咱们有必要扫清它的基本概念。负载均衡
K8S 的操做实体,在 K8S 中,有不少的操做对象,好比容器、Pod、Deployment、Service、Node 等,咱们通通称它们为资源对象。工具
K8S 集群,是计算、存储和网络资源的集合,K8S 基于这些资源来承载容器化的应用。云计算
K8S 集群的大脑,负责整个集群的管控、资源调度。能够部署在普通物理机或虚拟机上,为了实现高可用,能够部署多个 Master。spa
K8S 集群的执行者,受 Master 指挥,负责运行和监控容器应用、管理容器的生命周期,并向 Master 按期汇报容器的状态。一样,Node 也能够部署在物理机或虚拟机之上,也能够部署多个。设计
在 K8S 集群中,Pod 是资源调度的最小单位,一个 Pod 能够包含一个或多个容器应用,这些容器应用彼此之间存在某种强关联。Pod 内的全部容器应用共享计算、存储、网络资源。视频
Controller 是 K8S 中负责管理 Pod 的资源对象,它定义 Pod 的部署属性,好比有几个副本,副本异常怎么处理等,若是把 Pod 副本看作是一个公司职员,那么 Controller 就像是 HR,会不断根据人员的变更来招人知足公司的发展需求。对象
为了知足多种业务场景,K8S 提供了多种 Controller,包括 Deployment、ReplicaSet、DaemonSet、StatefulSet、Job 等。生命周期
Deployment 是最经常使用的 Controller,定义了用户的指望场景,实现了 Pod 的多副本管理,若是运行过程当中有一个副本挂了(员工离职),那么 K8S 会根据 Deployment 的定义从新拉起一个副本继续工做(招一个新员工),始终保证 Pod 按照用户指望的状态运行。
ReplicaSet 和 Deployment 实现了一样的功能,确切的说是 Deployment 经过 ReplicaSet 来实现 Pod 的多副本管理。咱们一般不须要直接使用 ReplicaSet。
DaemonSet 用于每一个 Node 最多只运行一个副本的场景,一般用于运行 Daemon。
Job 用于运行结束就删除的应用,而其余 Controller 则是会长期保持运行。
以上 Controller 都是无状态的,也就是说副本的状态信息会改变,好比当某个 Pod 副本异常重启时,其名称会改变。StatefulSet 提供有状态的服务,可以保证 Pod 的每一个副本在其生命周期中名称保持不变。这是经过持久化的存储卷来实现的。
Label 定义了其余资源对象所属的标签,相似于你在公司被分到 A 小组、B 小组。有了标签,就能够针对性地对每一个小组进行管理。好比把某个小组搬到哪一个办公区(把某个 Pod 部署到哪一个 Node 上)。给指定的资源对象定义一个或多个不一样的标签可以实现多维度的资源分组管理,方便进行资源分配、调度、配置、部署等管理工做。
Label 选择器,K8S 经过 Selector 来过滤筛选指定的资源对象,相似于 SQL 语句中的 where 查询条件,Label 实现了简单又通用的对象查询机制。
在 K8S 中,Service 是对 Pod 对象的抽象,一般,Pod 会以多副本的形式部署,每一个 Pod 都有本身的 IP,均可以对外提供服务,但 Pod 是脆弱的,也就是说,它随时都有可能被频繁地销毁和重启,IP 也会随之改变,这样,服务的访问就会出现问题。
Service 就是提出来解决这个问题的,它定义了一个虚拟 IP(也叫集群 IP),这个 IP 在 Service 的整个生命周期内都不会改变。当有访问到达时,Service 会将请求导向 Pod,若是存在多个 Pod,Service 还能实现负载均衡。
K8S 的存储卷,定义了一个 Pod 中多个容器可访问的共享目录。和 Docker 的 Volume 不太同样的是,K8S 的 Volume 是以 Pod 为单位的,也就是 Volume 的生命周期和 Pod 相关,和 Pod 内的容器不相关,即便容器终止或重启,Volume 中的数据也不会丢失,只有当 Pod 被删除时,数据才会丢失。
当有多个用户或租户使用同一个 K8S 集群时,如何区分它们建立的资源呢?答案就是 Namespace。
Namespace 将一个物理的集群从逻辑上划分红多个虚拟的集群,每一个集群就是一个 Namespace,不一样 Namespace 里的资源是彻底隔离的。每一个用户在本身建立的 Namespace 里操做,都不会影响到其余用户。
Annotation 与 Label 相似,但和 Label 不一样 的事,Annotation 不用于过滤筛选,它只是用户定义的某一种资源的附加信息,目的是方便外部查找该资源。有点相似于咱们常说的别名,没有它彻底能够,但有了它能够很方便查找。
个人公众号 「Linux云计算网络」(id: cloud_dev) ,号内有 10T 书籍和视频资源,后台回复 「1024」 便可领取,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎你们关注。