Concepts~有关k8s对象

 

目录

对象管理

参考资料

对象命名与ID

命名规范:

命名空间(namespace)

labels(标签)

Annotations(注释)

label与annotation的最佳实践


对象管理

k8s对象管理方式分3类,

  • 命令式对象管理(Imperative commands):直接在命令行通过参数指定操作和配置。
  • 命令式对象配置(Imperative object configuration):命令中指定具体操作
  • 声明式对象配置(Declarative object configuration):命令中不指定具体操作,通过kubectl自动检测对象来决定创建、更新、删除的操作
类型 操作对象 适用环境 优点 缺点
命令式对象管理 活动对象 开发、测试 简单易学 只能操作活动对象。无法审计、跟踪
命令式对象配置 单个文件 生产 配置文件可以使用版本控制,可以审计、跟踪 项目大时,配置文件多,操作麻烦。只能通过配置文件更新活动对象
声明式对象配置 目录 生产 支持目录操作 意外情况下难以调试。可以直接更改活动对象并保留信息

参考资料

【参考文档】:https://kubernetes.io/docs/concepts/overview/working-with-objects/object-management/

【参考博客】:https://blog.csdn.net/weixin_30745553/article/details/97155427

对象命名与ID

同一个集群,同类型的资源,资源名不能相同;

同一个集群,不同类型的资源,资源名可以相同;

同一个集群,不同资源其资源的UID一定是唯一的。

命名规范:

遵循RFC 1123

 

命名空间(namespace)

k8s能将物理机集群化成多个虚拟集群,不同项目、不同团队可使用不同的虚拟集群。这个虚拟集群就是命名空间(namespace)。同一个命名空间内的资源名必须要保持唯一。命名空间是集群资源划分的一种方式(通过resource quota划分)。

k8s默认创建4类命名空间:

  • default:创建的资源为显示指定namespace时,默认是这个default
  • kube-system:k8s系统本身创建的对象属于这个namespace
  • kube-public:该namespace下的对象是自动创建且所有用户都能读的。
  • kube-node-lease:node相关的一些底层对象,如

不是所有资源对象都有归属的namespace,想namespace资源本身就不属于任何namespace。

查看哪些资源属于namespace,哪些不属于namespace:

# In a namespace
kubectl api-resources --namespaced=true

# Not in a namespace
kubectl api-resources --namespaced=false

集群资源划分:用namespace

namespace内的资源划分:用label(如用label区分不同版本的 软件)

labels(标签)

Label 允许在 Kubernetes 资源上附加对于系统或者用户有意义的标示性属性,方便对 Kubernetes 资源进行分组管理。 这些属性对不会直接对 Kubernetes 核心组件产生语义,不过可能间接地被 Kubernetes 核心组件处理产生效果。例如:用户在 pod 或者 node 上加一些 label,然后配置一些调度策略,Kubernetes 的 scheduler 会基于这些 label 信息进行调度。

labels以“键/值”对的形式存在,可以将labels附加在对象上(可以在创建对象时直接编写label,也可以后期再通过api的方式附加上)。如下:

"metadata": {
  "labels": {
    "key1" : "value1",
    "key2" : "value2"
  }
}

不像name和UUID,label不需要保证唯一性。即不同资源语法上可以有相同的label(实际label的命名,要根据实际意义)。通过label selector(标签选择器)可以选择指定的对象。当前API支持两种类型的选择器:

  • 基于等式的Selector(Equality-based)

如:

environment = production
tier != frontend
  • 基于集合的Selector(Set-based)

如:

environment in (production, qa)
tier notin (frontend, backend)
partition
!partition

Annotations(注释)

Annotations 允许在 Kubernetes 资源上附加任意的非标识性元数据,用来记录资源的一些属性。这些元数据主要是给工具或者库来提取信息,一般不会直接开放给用户。绝大多数基于 Kubernetes 的开源项目都不依赖于 DB,完全可以利用 Kubernetes 的能力,满足对 DB 的需求。对于需要持久化的数据,除了定义 CRD,另一种通用的做法就是将数据存储在 annotation 中。

由于 annotation 的定位是 Kubernetes 资源上附加任意的非标识性元数据,除了在 key 上有跟 label key 完全一样的限制外,在 value 上没有任何限制:可长可短,可结构化可非结构化,可包含任意字符。

 

label与annotation的最佳实践

  • 平台必须使用带前缀的 label,前缀严格根据组织、产品、资源等信息定义。
  • 不带前缀的 label 是预留给用户使用的。
  • 给所有的资源加上合适的 label,最终这些 label 会提升资源管理的效率

 

 

你可能感兴趣的:(K8S)