k8s上所有的内容都抽象为资源。资源的实例化后被称为对象。
资源:对象
(一)以下是常见的资源类型以及具体的对象
(1)工作负载型资源(workload):
1)运用程序,对外提供服务:pod
2)很少单独运行pod,需要通过控制器来管理:
deployment(无状态)、replicaset、statefulset(有状态)、daemonset(系统守护进程)、job、cronjog
(2)服务发现及均衡:service、ingress
(3)配置与存储:
1)volume(存储卷)、CSI(容器存储接口,来扩展各种存储)
2)configmap:当配置中心使用的资源类型
secret:跟configmap相关,当可以存放敏感数据
备注:个人理解
第一种用来存放用户数据,第二种存储是用来存放配置相关的数据。
(4)集群级资源:
node、namespace、role、clusterrole,rolebinding、clusterrolebing
(5)元数据型资源:
HPA:自动调整其他资源的元数据信息
podtemplate:控制器通过其中配置的 Pod Template 信息来创建 Pod。
limitrange:定义资源限制。一个pod启动之后最多可以使用多少CPU和内存,可以在名称空间级别给他加一个默认设定。
- (二)创建资源的方式:配置清单
创建资源时,除了使用命令的方式,还有其他方式,我们一般称为使用‘配置清单’来创建。
配置清单是长什么样子,可以通过kubectl get podname -o yaml的方式查看一个pod的配 置清单
创建资源的方法
(1)其实每个资源都有一个yam的定义。
在定义的时候,apiserver仅接收JSON格式的资源定义。在之前用run创建pod资源的时候,run命令会自动把你给的内容自动转化为JSON格式
(2)人更容易理解和记忆的是,因此,我们可以使用yaml格式来定义。如果使用yaml格式提供配置清单,apiserver可自动将其转化为json格式,而后再提交执行。
配置清单的格式
大部分资源的配置清单都由五部分组成:
(1)apiversion:用来指明资源属于哪个群组以及版本。
k8s把整个apiserver所支持的api分组来进行管理。分组的好处,如果以后想要修改其中一个组影响范围不至于扩大;
api群组有三个级别,阿尔法(内测),贝尔塔(公测,),stable(稳定版)。
例子:pod是最核心的资源,所以它属于核心群组:v1
控制器属于应用程序管理的资源,所以属于apps
(2)kind:资源类别。
用来标记你创建的是什么资源。比如你创建的是pod还是deployment。
(3)metadata:元数据
name:在同类中名字得是唯一的。
namespace
labels
uid:资源的唯一标准,这东西一般都是由系统自动生成的,不需要直击手动去配置这个UID,否则可能会找出冲突。
Selflink: 每个资源的引用PATH(路径)。格式/api/GROUP(组名)/VERSION(版本)/namespace/NAMESPACE_NAME(名称空间的真正名字)/TYPE(资源类别)/TYPE_NAME(资源名字)
应用:将来我们在本地打开一个代理以后,可直接通过这个路径来获取相关资源的信息
(4)spec:定义用户所期望的状态,disired state
(5)status:当前状态,current state,本字段由k8s集群维护(用户不能定义这个字段的内容)
资源创建了以后,资源可能不符合条件。比如我们指定控制器对pod的副本数量为5个,如果我们用delete删除一个Pod以后只剩下四个,当前是4个,我们期望是5个,那怎么办?让当前状态无线向期待状态靠近。比如我们指定了一个容器期望的版本为v2,而当前是V1,这个时候会滚动更新,以便向期待的状态靠近。