kubernetes对象
在 Kubernetes 系统中,Kubernetes 对象 是持久化的实体。Kubernetes 使用这些实体来表示整个集群的状态。
它们通常描述了如下信息:
哪些容器化应用在运行(以及在哪个 Node 上)
可以被应用使用的资源
关于应用运行时表现的策略,比如重启策略、升级策略,以及容错策略
一、k8s对象
Kubernetes 对象是“目标性记录”,即一旦创建对象,Kubernetes 系统将持续工作以确保该对象存在。创建对象本质上是在告知 Kubernetes 系统,所需要的集群工作负载应该是什么样的,这就是 Kubernetes 集群的期望状态(Desired State)。
操作 Kubernetes 对象时,无论是创建、修改、或者删除,都需要使用 Kubernetes API。比如,当使用 kubectl 命令行接口时,CLI 会执行必要的 Kubernetes API 调用,也可以在程序中使用客户端库直接调用 Kubernetes API。
1.对象规格(Spec)与状态(Status)
每个 Kubernetes 对象都包含两个嵌套的对象字段,它们负责管理对象的配置:object spec和object status。 spec 是必需的,它描述了对象的 期望状态(Desired State),即希望对象所具有的特征。status 描述了对象的 实际状态(Actual State) ,它是由 Kubernetes 系统提供和更新的。在任何时刻,Kubernetes 控制面一直努力地管理着对象的实际状态以与期望状态相匹配。
例如,Kubernetes Deployment 对象能够表示运行在集群中的应用。 当创建 Deployment 时,可能需要设置 Deployment 的规格,以指定该应用需要有三个副本在运行。 Kubernetes 系统读取 Deployment 规格,并启动我们所期望的该应用的 三个实例,更新状态以与规格相匹配。 如果那些实例中有失败的(一种状态变更),Kubernetes 系统通过修正来响应规格和状态之间的差异,这种情况下,会启动一个新的实例来替换。
2.描述 Kubernetes 对象
当创建 Kubernetes 对象时,必须提供对象的规格,用来描述该对象的期望状态,以及关于对象的一些基本信息(例如名称)。 当使用 Kubernetes API 创建对象时(直接创建或者基于kubectl),API 请求必须在请求体中包含 JSON 格式的信息。 大多数情况下,需要在 .yaml 文件中为 kubectl 提供这些信息。 kubectl 在发起 API 请求时,将这些信息转换成 JSON 格式。
3.必需字段
在想要创建的 Kubernetes 对象对应的 .yaml 文件中,需要配置如下的字段:
apiVersion - 创建该对象所使用的 Kubernetes API 的版本
kind - 想要创建的对象的类型
metadata - 帮助识别对象唯一性的数据,包括一个 name 字符串、UID 和可选的 namespace
spec - 想要创建的对象的期望状态
每个 Kubernetes 对象的 spec 的精确格式是不同的,包含了特定于该对象的嵌套字段。
Kubernetes API 参考能够帮助你找到所有你可以创建Kubernetes对象的规范格式。
二、k8s对象管理
kubectl 命令行工具支持多种不同的方式来创建和管理 Kubernetes 对象。
1.管理技术
应该只使用一种技术来管理 Kubernetes 对象,混合和匹配技术作用在同一对象上将导致未定义行为。
| Management technique | Operates on | Recommended environment | Supported writers | Learning curve |
| Imperative commands | Live objects | Development projects | 1+ | Lowest |
| Imperative object configuration | ndividual files | Production projects | 1 | Moderate |
| Declarative object configuration | Directories of files | Production projects | 1+ | Highest |
2.命令式命令
使用命令式命令时,用户可以直接在集群中的活动对象上进行操作。用户将操作传给 kubectl 命令作为参数或标志。
这是开始或者在集群中运行一次性任务的最简单方法。因为这个技术直接在活动对象上操作,所以它不提供以前配置的历史记录。
如创建对象 kubectl create deployment nginx --image nginx
3.命令式对象配置
在命令式对象配置中,kubectl 命令指定操作(创建,替换等),可选标志和至少一个文件名。指定的文件必须包含 YAML 或 JSON 格式的对象的完整定义。
如创建对象 kubectl create -f nginx.yaml
4.声明式对象配置
使用声明式对象配置时,用户对本地存储的对象配置文件进行操作,但是用户未定义要对该文件执行的操作。kubectl 会自动检测每个文件的创建、更新和删除操作。这使得配置可以在目录上工作,根据目录中配置文件对不同的对象执行不同的操作。
如查看更改 kubectl diff -f configs/
处理更改 kubectl apply -f configs/
浙公网安备 33010602011771号