本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。

Hi,大家好,欢迎大家和我一起学 K8S,这是系列第三篇。

每一种技术,为了描述清楚它的设计理念,都会自定义一堆概念或术语。在进入一门技术的研究之前,我们有必要扫清它的基本概念。

资源对象

K8S 的操作实体,在 K8S 中,有很多的操作对象,比如容器、Pod、Deployment、Service、Node 等,我们统统称它们为资源对象。

Cluster

K8S 集群,是计算、存储和网络资源的集合,K8S 基于这些资源来承载容器化的应用。

Master

K8S 集群的大脑,负责整个集群的管控、资源调度。可以部署在普通物理机或虚拟机上,为了实现高可用,可以部署多个 Master。

Node

K8S 集群的执行者,受 Master 指挥,负责运行和监控容器应用、管理容器的生命周期,并向 Master 定期汇报容器的状态。同样,Node 也可以部署在物理机或虚拟机之上,也可以部署多个。

Pod

在 K8S 集群中,Pod 是资源调度的最小单位,一个 Pod 可以包含一个或多个容器应用,这些容器应用彼此之间存在某种强关联。Pod 内的所有容器应用共享计算、存储、网络资源。

Controller

Controller 是 K8S 中负责管理 Pod 的资源对象,它定义 Pod 的部署属性,比如有几个副本,副本异常怎么处理等,如果把 Pod 副本看做是一个公司职员,那么 Controller 就像是 HR,会不断根据人员的变动来招人满足公司的发展需求。

为了满足多种业务场景,K8S 提供了多种 Controller,包括 Deployment、ReplicaSet、DaemonSet、StatefulSet、Job 等。

Deployment

Deployment 是最常用的 Controller,定义了用户的期望场景,实现了 Pod 的多副本管理,如果运行过程中有一个副本挂了(员工离职),那么 K8S 会根据 Deployment 的定义重新拉起一个副本继续工作(招一个新员工),始终保证 Pod 按照用户期望的状态运行。

ReplicaSet

ReplicaSet 和 Deployment 实现了同样的功能,确切的说是 Deployment 通过 ReplicaSet 来实现 Pod 的多副本管理。我们通常不需要直接使用 ReplicaSet。

DaemonSet

DaemonSet 用于每个 Node 最多只运行一个副本的场景,通常用于运行 Daemon。

Job

Job 用于运行结束就删除的应用,而其他 Controller 则是会长期保持运行。

StatefulSet

以上 Controller 都是无状态的,也就是说副本的状态信息会改变,比如当某个 Pod 副本异常重启时,其名称会改变。StatefulSet 提供有状态的服务,能够保证 Pod 的每个副本在其生命周期中名称保持不变。这是通过持久化的存储卷来实现的。

Label

Label 定义了其他资源对象所属的标签,类似于你在公司被分到 A 小组、B 小组。有了标签,就可以针对性地对每个小组进行管理。比如把某个小组搬到哪个办公区(把某个 Pod 部署到哪个 Node 上)。给指定的资源对象定义一个或多个不同的标签能够实现多维度的资源分组管理,方便进行资源分配、调度、配置、部署等管理工作。

Selector

Label 选择器,K8S 通过 Selector 来过滤筛选指定的资源对象,类似于 SQL 语句中的 where 查询条件,Label 实现了简单又通用的对象查询机制。

Service

在 K8S 中,Service 是对 Pod 对象的抽象,通常,Pod 会以多副本的形式部署,每个 Pod 都有自己的 IP,都可以对外提供服务,但 Pod 是脆弱的,也就是说,它随时都有可能被频繁地销毁和重启,IP 也会随之改变,这样,服务的访问就会出现问题。

Service 就是提出来解决这个问题的,它定义了一个虚拟 IP(也叫集群 IP),这个 IP 在 Service 的整个生命周期内都不会改变。当有访问到达时,Service 会将请求导向 Pod,如果存在多个 Pod,Service 还能实现负载均衡。

Volume

K8S 的存储卷,定义了一个 Pod 中多个容器可访问的共享目录。和 Docker 的 Volume 不太一样的是,K8S 的 Volume 是以 Pod 为单位的,也就是 Volume 的生命周期和 Pod 相关,和 Pod 内的容器不相关,即使容器终止或重启,Volume 中的数据也不会丢失,只有当 Pod 被删除时,数据才会丢失。

Namespace

当有多个用户或租户使用同一个 K8S 集群时,如何区分它们创建的资源呢?答案就是 Namespace。

Namespace 将一个物理的集群从逻辑上划分成多个虚拟的集群,每个集群就是一个 Namespace,不同 Namespace 里的资源是完全隔离的。每个用户在自己创建的 Namespace 里操作,都不会影响到其他用户。

Annotation

Annotation 与 Label 类似,但和 Label 不同 的事,Annotation 不用于过滤筛选,它只是用户定义的某一种资源的附加信息,目的是方便外部查找该资源。有点类似于我们常说的别名,没有它完全可以,但有了它可以很方便查找。


我的公众号 「Linux云计算网络」(id: cloud_dev) ,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎大家关注。

Kubernetes 笔记 03 扫清概念的更多相关文章

  1. Kubernetes笔记(二):了解k8s的基本组件与概念

    前文 Kubernetes笔记(一):十分钟部署一套K8s环境 介绍了如何快速搭建一个k8s系统.为了继续使用k8s来部署我们的应用,需要先对k8s中的一些基本组件与概念有个了解. Kubernete ...

  2. C++ GUI Qt4学习笔记03

    C++ GUI Qt4学习笔记03   qtc++spreadsheet文档工具resources 本章介绍创建Spreadsheet应用程序的主窗口 1.子类化QMainWindow 通过子类化QM ...

  3. Kubernetes笔记(四):详解Namespace与资源限制ResourceQuota,LimitRange

    前面我们对K8s的基本组件与概念有了个大致的印象,并且基于K8s实现了一个初步的CI/CD流程,但对里面涉及的各个对象(如Namespace, Pod, Deployment, Service, In ...

  4. Java:并发笔记-03

    Java:并发笔记-03 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 3. 共享模型之管程-2 本章内容-2 Monitor wait/notify 3.6 ...

  5. 《30天自制操作系统》笔记(03)——使用Vmware

    <30天自制操作系统>笔记(03)——使用Vmware 进度回顾 在上一篇,实现了用IPL加载OS程序到内存,然后JMP到OS程序这一功能:并且总结出下一步的OS开发结构.但是遇到了真机测 ...

  6. JS自学笔记03

    JS自学笔记03 1.函数练习: 如果函数所需参数为数组,在声明和定义时按照普通变量名书写参数列表,在编写函数体内容时体现其为一个数组即可,再传参时可以直接将具体的数组传进去 即 var max=ge ...

  7. 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试

    机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...

  8. CS229 笔记03

    CS229 笔记03 局部加权线性回归 Non-Parametric Learning Algorithm (非参数学习方法) Number of parameters grows with the ...

  9. OpenCV 学习笔记03 边界框、最小矩形区域和最小闭圆的轮廓

    本节代码使用的opencv-python 4.0.1,numpy 1.15.4 + mkl 使用图片为 Mjolnir_Round_Car_Magnet_300x300.jpg 代码如下: impor ...

随机推荐

  1. HTTP之请求消息Request

    客户端发送一个HTTP请求到服务器的请求消息包括以下格式: 请求行(request line).请求头部(header).空行和请求数据四个部分组成. 请求行以一个方法符号开头,以空格分开,后面跟着请 ...

  2. Java匿名内部类访问外部

    匿名内部类访问外部局部变量必须是final修饰的,Java 1.8 会默认为其加上final 例子如下: public void send(String topicName, T obj) { Str ...

  3. Spark1.5.0 + Hadoop2.7.1整合

    Hadoop2.7.1已经配置完毕. Hosts分配如下: master 172.16.15.140 slave1 172.15.15.141 slave2 172.16.15.142 一.安装Sca ...

  4. Gitlab使用时的一些注意事项

    1 gitlab-runner 不选中,在commit没有tab的时候,runner不会进行运行 2 在新安装的gitlab的环境上更改@localhost为远程地址 2.1  vim /opt/gi ...

  5. CentOS下安装Git

    在终端输入命令:yum install git,此时会进行提示安装,输入y, 在这种安装方式下,速度很快(windows系统下下载客户端速度超慢),当出现安装完毕时,就可以了. 安装完毕后输入git ...

  6. Codeforces 884 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 传送门 A题 传送门 题意简述: 一个人要完成一件事总共需要ttt秒,现在有nnn天,每天有aia_iai​不能做事,问他可以在第几天做完. 思路:按照题 ...

  7. wx支付

    开通微信商户号且开通微信公众平台微信支付功能   104680c86fd352725be198b02dc8258b 微信公众号和微信商户平台在微信支付中扮演的角色,公众号是我们在网页要进行支付的场所, ...

  8. c语言小程序以及java生成注释文档方法

    c语言小程序:sizeof和strlen() sizeof运算符以字节为单位给出数据的大小,strlen()函数以字符为单位给出字符串的长度,字符和字节不是一回事. char类型用于存储字母和标点符号 ...

  9. java实现四则运算

    http://blog.csdn.net/lip009/article/details/7768258 我之前找到的一个大神写的?还没看懂

  10. 2.0vue导出excel

    如果没有插件导入 import FileSaver from 'file-saver' import XLSX from 'xlsx'导入依赖 import FileSaver from 'file- ...