K8s 资源:修订间差异

来自牛奶河Wiki
跳到导航 跳到搜索
(创建页面,内容为“Kubernetes 中的所有内容都被抽象为“资源”,如 Pod、Service、Node 等都是资源。“对象”就是“资源”的实例,是持久化的实体,通过这些实体显示整个集群的状态。 对象的创建、删除、修改都是通过 “Kubernetes API”,也就是 “API Server” 组件提供的 API 接口,这些是 RESTful 风格的 API,与 K8s 的“万物皆对象”理念相符。命令行工具 “kubectl”,实际上…”)
 
无编辑摘要
第44行: 第44行:
[[分类:Develop]]
[[分类:Develop]]
[[分类:Linux]]
[[分类:Linux]]
[[分类:Kubernetes]]

2024年7月4日 (四) 09:53的版本

Kubernetes 中的所有内容都被抽象为“资源”,如 Pod、Service、Node 等都是资源。“对象”就是“资源”的实例,是持久化的实体,通过这些实体显示整个集群的状态。

对象的创建、删除、修改都是通过 “Kubernetes API”,也就是 “API Server” 组件提供的 API 接口,这些是 RESTful 风格的 API,与 K8s 的“万物皆对象”理念相符。命令行工具 “kubectl”,实际上也是调用 Kubernetes API。

K8s 中的资源类别有很多种,kubectl 可以通过配置文件来创建这些 “对象”,配置文件更像是描述对象“属性”的文件,配置文件格式可以是 “JSON” 或 “YAML”,常用 “YAML”。

公共部分

  • apiVersion: 创建该对象所使用的 Kubernetes API 的版本
  • kind: 想要创建的对象的类型
  • metadata: 帮助识别对象唯一性的数据,包括一个 name 字符串、UID 和可选的 namespace

规约(spec)和状态(status)

对象是用来完成一些任务的,是持久的,是有目的性的,因此 Kubernetes 创建一个对象后,将持续地工作以确保对象存在。每个 Kubernetes 对象包含两个嵌套的对象字段,它们负责管理对象的配置,他们分别是 “spec” 和 “status” 。

  • spec 描述了对象的期望状态(Desired State)—— 希望对象所具有的特征。当创建 Kubernetes 对象时,必须提供对象的规约,用来描述该对象的期望状态,以及关于对象的一些基本信息(例如名称)
  • status 描述了对象的实际状态(Actual State) ,它是由 Kubernetes 系统提供和更新的

下面的配置文件描述了一个对象,对象的类型是 “Pod”,对象名为 “myapp-pod”,包含一个 “app: myapp” 标签。“spec” 指定了该 Pod 对象的特征:包含一个名为 “myapp-container” 的容器,容器根据 “busybox” 镜像生成,容器运行的命令是 “ ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600'] ”。

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']

常用属性

name & uid

K8s 中每个对象都有 uid,uid 是 K8s 自动为对象生成的,可以唯一标识该对象的字符串。对象还具有另一个属性 name。在创建对象时可以给对象指定名称。不属于同一类别的对象可以有相同的名称,而同一种类型的对象,想要赋予相同的名称,则需要用到 namespace。

namespace

K8s 中, namespace (命名空间) 也称为虚拟集群。namespace 用来在逻辑上对资源进行分组。K8s 会创建 "default" 的 namespace,供未明确指定资源时使用。kubernetes 的组件,分配的是名为 “kube-system” 的 namespace。

# 列出在命名空间中的资源: true
kubectl api-resources --namespaced=true
label & selector

label(标签)是附加到 Kubernetes 对象(如 Pods)上的键值对,用于区分对象(如 Pod、Service)。 label 旨在用于指定对用户有意义且相关的对象的标识属性,但不直接对核心系统有语义含义。 label 可以用于组织和选择对象的子集。label 可以在创建时附加到对象,随后可以随时添加和修改。可以像 namespace 一样,使用 label 来获取某类对象,但 label 可以与 selector 一起配合使用,用表达式对条件加以限制,实现更精确、更灵活的资源查找。

label 与 selector 配合,可以实现对象的“关联”,“Pod 控制器” 与 Pod 是相关联的 —— “Pod 控制器”依赖于 Pod,可以给 Pod 设置 label,然后给“控制器”设置对应的 selector,这就实现了对象的关联。

每个对象都可以定义一组键/值标签。每个键对于给定对象必须是唯一的。