最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
给大家整理的电子书资料:
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
上述命令展示了 Node 的如下关键信息。
- Node 基本信息、名称、标签、创建时间等;
- Node 前的运行 Node 启动以后会 系列的自检工作,比如磁盘是否满了,如果满了就标注OutOIDisk=True,否则继续检查内存是否不足(如果内存不足,就标注Memo Pressure True 最后一 正常 就设置为 Ready状态(Ready=True ),该状态表Node处于健康状态, Master 将可以在其上调度新任务了(如启动 Pod );
- Node 机地址与主机名;
- Node 资源总量 Node 可用 系统资源 包括 CPU、内存数量、最大可调度Pod 数量等,注意 目前 Kubemetes 经实验性支持 GPU 资源分配了( alpha.kubemetes. io/nvidia-gpu=0 );
- Node 可分配资源量:描述 Node 可用于分配的资源量。
- 主机系统信息:包括主机的唯一标 UUID Linux kernel 版本号、操作系统类型与版本、Kubemetes 版本号 kubelet kube-proxy 的版本号等;
- 当前正在运行的 Pod 列表概要信息;
- 己分配的资源使用概要信息,例如资源申请的最低、最大允许使用量占系统总量的百分比;
- Node 相关的 Event 信息。
1.3 Pod
每个 Pod 都有一个特殊的被称为“根容器”的 Pause 容器 Pause 容器对应的镜像属于 Kubemetes平台的一部分,除了 Pause 容器,每个 Pod 还包含一个或多个紧密相关的用户业务容器。
Kubemetes 会设计出一个全新的 Pod 的概念并且 Pod 有这样特殊的组成结构,有以下原因:
- 在 组容器作为一个单元的情况下,我们难以对“整体”简单地进行判断及有效地进行行动。
- Pod 里的多个业务容器共享 Pause 容器的 ,共享 Pause 容器挂接的 Volume,这样既简化了密切关联的业务容器之间的通信问题,也很好地解决了它们之间的文件共享问题。
Pod IP概念
Kubemetes 为每个 Pod 都分配了唯一地址,称之为 Pod IP,一个 Pod 里的多个容器共享Pod 地址 Kubernetes 要求底层网络支持集群内任意两个 Pod 之间的 TCP/IP 直接通信,这通常采用虚拟 层网络技术来实现,例如 Flannel Open vSwitch 等。
Pod 其实有两种类型:普通的 Pod 及静态 Pod (Static Pod )
在默认情况下,当 Pod 里的某个容器停止时Kubernetes 会自动检测到这个问题并且重新启动这 Pod (重启 Pod 里的所有容器),如 Pod所在的 Node 岩机,则会将这个 Node 上的所有 Pod 重新调度到其他节点上。 Pod 、容器与 Node的关系如图。
myweb 的Pod 资源定义文件:
apiVersion : vl
kind: Pod
metadata:
name: myweb
labels:
name: myweb
spec :
containers :
- name: myweb
image: kubeguide/tomcat-app:vl
ports :
- containerPort : 8080
env:
- name: MYSQL SERVICE HOST
value : 'mysql'
- name: MYSQL SERVICE PORT
value : '3306'
- Kind:Pod 表明这是一个 Pod 的定义
- metadata里的 name 属性为 Pod 的名字, metadata
里还能定义资源对象的标签( Label ),这里声明myweb拥有一个 name=myweb 的标签( Label )。
Pod 里所包含的容器组的定义则在 spec 一节中声明,这里定义了一个名字为 myweb、对应镜像为kubeguide/tomcat-app:v1的容器,该容器注入了名为 MYSQL_SERVICE_ HOST='mysql’和MYSQL _SERVICE _PORT=’3306’的环境变 env 关键字),并且在 8080 端口 containerPort) 上启动容器进程。
Pod的IP加上这里的容器端口(containerPort ),就组成了一个新的概念—— Endpoint ,它代表着此 Pod 里的一个服务进程的对外通信地址。
一个 Pod 也存在着具有多个Endpoint 的情况,比如当我们把 Tomcat 定义为一个 Pod 时,可以对外暴露管理端口与服务端口这两个 Endpoint。
Pod及Pod 周边对象的示意图:
Kubernetes 里, 个计算资源进行配额限定需要设定以下两个参数:
- Requests :该资源的最小申请量,系统必须满足要求。
- Limits :该资源最大允许使用的量,不能被突破,当容器试图使用超过这个量的资源时,可能会被 Kubernetes Kill 并重启。
从下面的yaml部分配置可以看出MySQL容器申请最少0.25 CPU 64M内存,在运行过程中 MySQL 容器所能使用的资源配额为0.5 CPU 128M内存:
spec:
containers:
- name: db
image : mysql
resources :
requests:
memory : '64M'
cpu : '250m'
limits:
memory : '128M'
cpu : '500m'
1.4 Label (标签)
Label Kubernetes 系统中另外 个核心概念。 Label key=value 的键值对,其中 key value 由用户自己指定。
通过给指定的资源对象捆绑一个或多个不同的 Label 来实现多维度的资源分组管理功能,以便于灵活、方便地进行资源分配、调度、配置、部署等管理工作。
Label 当于我们熟悉的“标签”,给某个资源对象定义 Label ,就相当于给它打了 一个标签,随后可以通过 Label Selector (标签选择器〉查询和筛选拥有某些 Label 的资源对象,Kubemetes 通过这种方式实现了类似 SQL 的简单又通用的对象查询机制。
当前有两种 Label Selector 的表达式:基于等式的( Equality-based )和基于集合的(Set-based)。
前者采用“等式类”的表达式匹配标签,下面是一些具体的例子。
- name = redis-slave :匹配所有具有标签 name edis-slave 的资源对象
- env != production :匹配所有不具有标签 env=production 的资源对象,比如 env=test 就是满足此条件的标签之一。
而后者则使用集合操作的表达式匹配标签,下面是一些具体的例子。
- name in (red is-master redis-slave ):匹配所有具有标签 name=redis-master 或者 name=redis-slave 的资源对象
- name not in ( php-frontend ):匹配所有不具有标签 name=php-frontend 的资源对象。
1.5 Replication Controller
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
给大家整理的电子书资料:
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!