持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情
这里我们主要要理解k8s中什么是资源,什么是对象?哪些是资源,哪些是对象,最后还要理解什么是资源清单?以及如何编写资源清单。
一、资源和对象
1、资源和对象
K8s 中所有的内容都抽象为资源, 资源实例化之后,叫做对象。这个理解起来也比较好理解,我们在java中有类文件,类被实例化以后叫做对象。k8s中pod是一个资源,node也是一个资源,具体的某一个pod或者具体的某一个node就是对象。
在k8s中,任何可以被申请、分配,最终被使用的对象,都是 kubernetes 中的资源,比如 CPU、内存。
2、资源的分类
我们知道了资源和对象的概念,在k8s中,资源通常有三种类型:
- 命名空间级别
- 集群级资源
- 元数据型资源
下面将详细说这三种类型的资源
二、资源的分类
其实资源的类型可以理解为根据作用域进行区分的。
1、命名空间级别
什么是命名空间呢?其实命名空间是一种隔离级别。比如,有一个包租婆,他有一栋楼,张三和李四各租了其中的一间房子,那么资源是由包租婆统一分配的,但是张三和李四相互之间是隔离的。那么在张三房间中创建的pod,李四是不能访问的。
命名空间级别,如果不同的资源放在不同的命名空间下,他们就相互隔离。比如我们的命令,获取所有的pod节点或者获取所有的node.使用的命令是
kubectl get pod 或者 kubectl get node
这里的node和pod都是有命名空间的,他们的命名空间默认是-n default。制定完整的命名空间使用如下命令
kubectl get pod -n default 或者 kubectl get node -n default
当要获取全部命名空间下的pod或者node时,使用如下命令:
kubectl get pod --all-namespaces 或者 kubectl get node --all-namespaces
这样就可以看到集群下所有的node和pod了。
1)工作负载型资源(workload)
工作负载型资源有哪些呢?
- Pod:k8s最小组成部分,共享网络栈共享存储卷
- ReplicaSet:RS,调度器、控制器,通过标签去控制pod的创建、副本数量
- Deployment:控制器,通过控制RS的创建去创建pod
- StatefulSet:为有状态服务所建立的管理器
- DaemonSet:可以在每一个节点都运行一个pod的组件
- Job:工作、任务
- CronJob:轮询工作、轮询任务,为批处理而生的
2) 服务发现及负载均衡型资源(ServiceDiscovery LoadBalance)
可以帮我们自动创建集群的相关资源
- Service:简称svc,服务,将服务暴露出去
- Ingress:将服务暴露出去
3)配置与存储型资源
- Volume(存储卷):给pod提供持久化的能力
- CSI:容器存储接口,可以扩展各种各样的第三方存储卷
4)特殊类型的存储卷
- ConfigMap:当配置中心来使用的资源类型,一般用来存储配置文件达到热更新的状态
- Secret:保存敏感数据,加密方案存储数据,一般用来保存密码文件、密钥等等
- DownwardAPI:把外部环境中的信息输出给容器,类似于CSI
2、集群级资源
集群级别的资源,它的范围要比命名空间大很多,一个集群下可能会有多个命名空间。集群管理着命名空间资源。
全集群可见,并且可以调用, 不属于某一个名称空间,因此资源对象的名称必须全局唯一。
不管在任何名称空间下定义,在其他的名称空间下都能看得到,在定义的时候无需指定名称空间.
常见的集群级资源有: Namespace【名称空间】、Node【节点】、Role【角色】、ClusterRole、RoleBinding、ClusterRoleBinding
-
Namespace:名称空间就是集群级别资源的一种。
要查询集群下所有的命名空间
kubectl get ns
名字空间如果不做限制,可以使用到集群空间的最大资源。
-
node:node节点也属于集群级资源,node名称要全局唯一。
-
ClusterRole:集群角色,作用在集群下的,类似于学校的校长。如果给集群赋予了某一个集群角色,那么所有的名字空间都具有这个角色的权限。
- 相对应的还有Role:角色,他是作用在名字空间下的。类似于一个班的班长。
-
ClusterRoleBinding:集群角色绑定。比如学校和教室之间的关系可以理解为集群和名字空间的关系,校长就是集群角色。那么一个人要升职为校长,那么需要有委任书,这个委任书就是集群角色绑定,只要有这个委任书,这个人就是校长,将集群和角色绑定在一起了。
- 相对应的还有RoleBinding:角色绑定,作用在名字空间下。
其实名字空间资源和集群资源,就是作用于的不同。
3、元数据型资源
元数据可以理解为一个模板,不是直接作用在自愿或者对象上的。而是管控中间的变量。可以通过指标进行操作。
比如,我们提供一个指标,比如达到60%报警,这时一个指标,提前在元数据资源中设置好的。例如:
- HPA:通过cpu的利用率进行平滑扩展,就是一个很明显的元数据类型,通过指标进行操作。HPA监控资源的使用情况,然后把使用情况告诉控制器,控制器再去做相应处理,比如扩容。HPA只是起到提醒的作用。它本身并不会去执行扩容的操作。真正做事的是RC,RS,Deployment。
- PodTemplate:pod模板
- LimitRange:资源限制
以上就是k8s中所有资源的类型了,那么我们拿到一个资源,他到底是什么类型呢?其实,我们只需要记住集群级别资源和元数据级别资源,那么剩下的就都是名字空间级别的资源了。而集群级别资源和元数据级别资源就7个。分别是:命名空间namespace,node,ClusterRole,ClusterRoleBinding;HPA,PodTemplate,LimitRange;
以上都是资源,如果这些资源想要使用,我们要将其转换成对应的对象。比如Pod资源,我们要使用Pod资源,最终要运行为pod实例对象才行。从pod资源运行为pod实例对象的过程,我们需要向集群发送一些特定的pod对应的属性,比如pod使用的是哪个镜像,名字叫什么,工作在哪个名字空间下,有没有用到一些存储。这些都是pod实例化资源对象需要关注的属性。而这些属性是通过什么告诉集群的呢?资源清单,下面就来研究什么是资源清单.