一、k8s对象
k8s对象:是一种持久化的,用于表示集群状态的实体。
1,对象的定义本身是声明式的,它定义了对象被k8s平台创建后的状态,也就是我们希望这个对象被创建后应该保持什么样的状态,一般使用yml文件描述。
2,k8s使用k8s对象来表示集群的状态,所有创建后的对象的状态集合就是整个集群的当前状态。使用k8s对象可以用来描述很多情况,比如有哪些容器化的应用在运行,容器运行在哪个node上,有哪些可以被应用使用的资源,应用的行为策略是什么样子,比如重启策略,声明策略,容错策略。
3,k8s中使用api/kubectl来管理这些对象。
管理k8s对象的过程其实就是使用k8s和运维k8s的过程。
k8s的controller manager就是通过对象的controller使得各个对象保持在期望状态,因此整个k8s的工作就是让所有对象保持在期望状态。
二、对象模型
image.png
k8s对象的创建就好比一个类被实例化了。其状态变成了动态信息,保存在etcd中,而k8s状态的变化是触发k8s各个组件工作的起点。每当状态变化,k8s就会努力调整,努力使得各个对象始终处于期望状态。
在k8s对象的这些属性和方法中,唯有metadata是大部分对象都有的通用属性。
对象结构包含静态属性,操作方法和动态信息。
三、常用的metadata属性含义:
1,Name和UID
k8s中所有对象都通过name和UID明确标识。
1)在同一类对象中name是唯一的,但不同类型的对象name是可以一样的。比如某个pod叫hello-k8s,另一个deployment也可以同时叫做hello-k8s。不同名字空间中,同样类型的对象实例的名字也是可以相同的。
2)Api中的对象访问路径:
/api/{version}/namespaces/{namespace}/{object-kind}/name
/api/v1/namespaces/default/pods/helo-k8s
3)k8s在集群的整个生命周期内创建的每个对象都具有不同的UUID。
2,namespace(名称空间)
不仅是matadata中的一个属性,本身也是一个Object,可以提供独立的命名空间。
1)可用于将物理集群划分为多个虚拟集群,对象实例的名称在同一个namespace中是唯一的。
2)namespace间完全隔离,因此也常被用来隔离不同的用户(及权限)。
3)k8s中内置了三个名称空间:default,kube-system和kube-public。
default:默认的名称空间
kube-system:k8s平台组件部署的名称空间,比如apiserver,dns插件,网络插件。
kube-public:自动创建的,可供所有用户访问,包括未经过身份验证的用户访问。里面的资源在集群中是公开可见和可读的。
注意,Node和PersistentVolumn不属于任何namespace。
3,label(标签)
所有K8S对象都拥有的元数据属性。用于建立集群对象之间的灵活的松耦合的多维关联关系。
1)一个label就是一个键值对,其中的key,value均由用户自己定义。
2)label可以附着在任何对象上,每个对象也可以有任意个标签。标签可在对象定义时附加上,也可以通过命令动态管理标签。标签不是唯一的,很多对象可能有相同的标签。
3)label可以将有组织目的的结构映射到集群对象上,从而形成一个与现实世界管理结构同步对应松耦合的,多维的对象管理结构。
k8s对象之间松耦合的关联是通过label selector对label的查询和筛选建立的。
image.png
service通过selector pod 的label和pod建立关系。
pod通过nodeSelector node的label和node建立关系。选择自己可以被调度运行的k8s节点。
4,annotations(注解)
通过annotations,可以将任意非标识性的元数据附加到对象上。
这也是他和标签数据的区别,标签是标识性数据,用于标识对象,主要用于筛选对象。annotations不能用于标识或者选择对象。
1)annotations也是以键值对的方式呈现的。
常见的对象annotations信息包括:创建信息,版本信息或镜像信息。
比如时间戳,版本号,镜像哈希值,仓库地址等。
2)工具和库可以检索到并使用这些annotation元数据。
3)将数据作为annotation附着在对象上,有利于创建一些用于部署、管理和做内部检查的共享工具或客户端。
四、k8s对象分类
image.png
1,workload:是k8s集群主要去管理和运行对象
2,discovery&load balance:与服务相关的一些对象
3,config&storage:用于向应用中注入初始化配置数据的。活将数据持久化保存到容器外的
4,cluster:集群类对象,主要定义了集群自身如何配置的数据,通常由集群管理员进行操作。
网友评论