第 9 章 Machine [machine.openshift.io/v1beta1]
- 描述
- 机器是机器 API 兼容性级别 2 的 Schema:在主发行版本中至少为 9 个月或 3 个次版本(以更长的时间为准)。
- 类型
-
对象
9.1. 规格
属性 | 类型 | 描述 |
---|---|---|
|
| APIVersion 定义对象的这个表示法的版本化的 schema。服务器应该将识别的模式转换为最新的内部值,并可拒绝未识别的值。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
|
| kind 是一个字符串值,代表此对象所代表的 REST 资源。服务器可以从客户端向其提交请求的端点推断。无法更新。采用驼峰拼写法 (CamelCase)。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
| 标准对象元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata | |
|
| MachineSpec 定义所需的 Machine 状态 |
|
| MachineStatus 定义 Machine 的观察状态 |
9.1.1. .spec
- 描述
- MachineSpec 定义所需的 Machine 状态
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| lifecycleHooks 允许用户在机器生命周期的特定预定义点暂停机器上的操作。 |
|
| ObjectMeta 将自动填充所创建的节点。使用此选项来指示创建节点时应使用哪些标签、注解、名称前缀等。 |
|
| providerID 是供应商提供的机器的标识 ID。此字段必须与与此机器对应的节点对象中看到的供应商 ID 匹配。cluster-api 的高级别消费者需要此字段。示例用例是 cluster-api,将 cluster-api 用作供应商。自动缩放器中的清理逻辑将机器与节点进行比较,以查找供应商无法注册为 Kubernetes 节点的机器。使用 cluster-api 作为自动扩展的通用树提供商时,自动扩展需要此字段才能具有机器列表的供应商视图。另一个节点列表是从 k8s apiserver 查询的另一个节点列表,然后做比较以查找未注册的机器并标记为 delete。此字段由行动者设置,并由更高级别的实体(如自动扩展器)使用,该自动扩展将与 cluster-api 作为通用提供程序交互。 |
|
| providerSpec 详情特定于供应商的配置,以便在节点创建过程中使用。 |
|
| 要以增加方式应用到对应节点的污点列表。此列表不会根据其他实体持续覆盖添加到节点的任何其他污点。这些污点应该被主动协调,例如,如果您要求机器控制器应用污点,然后手动删除机器控制器将重新放置的污点,但机器控制器没有删除任何污点 |
|
| 此 Taint 附加到任何不容许 Taint 的 pod 上的"effect"的节点。 |
9.1.2. .spec.lifecycleHooks
- 描述
- lifecycleHooks 允许用户在机器生命周期的特定预定义点暂停机器上的操作。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| preDrain hook 会阻止机器排空。这也会阻止进一步的生命周期事件,如终止。 |
|
| LifecycleHook 代表生命周期 hook 的单一实例 |
|
| preTerminate hook 会阻止机器被终止。在机器排空后,会执行 preTerminate hook。 |
|
| LifecycleHook 代表生命周期 hook 的单一实例 |
9.1.3. .spec.lifecycleHooks.preDrain
- 描述
- preDrain hook 会阻止机器排空。这也会阻止进一步的生命周期事件,如终止。
- 类型
-
数组
9.1.4. .spec.lifecycleHooks.preDrain[]
- 描述
- LifecycleHook 代表生命周期 hook 的单一实例
- 类型
-
object
- 必填
-
名称
-
owner
-
属性 | 类型 | 描述 |
---|---|---|
|
| name 为 lifcycle hook 定义唯一名称。名称应是唯一的,最好是 1-3 个单词,在 CamelCase 中,或者可以是命名空间,如 foo.example.com/CamelCase。名称必须是唯一的,并且只能由单个实体管理。 |
|
| Owner 定义生命周期 hook 的所有者。这应该完全描述性,以便用户可以识别谁/负责阻塞生命周期。这可以是控制器的名称(如 clusteroperator/etcd)或管理员管理 hook。 |
9.1.5. .spec.lifecycleHooks.preTerminate
- 描述
- preTerminate hook 会阻止机器被终止。在机器排空后,会执行 preTerminate hook。
- 类型
-
数组
9.1.6. .spec.lifecycleHooks.preTerminate[]
- 描述
- LifecycleHook 代表生命周期 hook 的单一实例
- 类型
-
object
- 必填
-
名称
-
owner
-
属性 | 类型 | 描述 |
---|---|---|
|
| name 为 lifcycle hook 定义唯一名称。名称应是唯一的,最好是 1-3 个单词,在 CamelCase 中,或者可以是命名空间,如 foo.example.com/CamelCase。名称必须是唯一的,并且只能由单个实体管理。 |
|
| Owner 定义生命周期 hook 的所有者。这应该完全描述性,以便用户可以识别谁/负责阻塞生命周期。这可以是控制器的名称(如 clusteroperator/etcd)或管理员管理 hook。 |
9.1.7. .spec.metadata
- 描述
- ObjectMeta 将自动填充所创建的节点。使用此选项来指示创建节点时应使用哪些标签、注解、名称前缀等。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| annotations 是一个无结构的键值映射,它存储有资源,可通过外部工具存储和检索任意元数据。它们不可查询,应在修改对象时保留。更多信息: http://kubernetes.io/docs/user-guide/annotations |
|
| generateName 是一个可选前缀,服务器使用它来生成唯一的名称 IF,即未提供 Name 字段。如果使用此字段,返回到客户端的名称将与传递的名称不同。这个值也会与唯一的后缀合并。provided 值的验证规则与 Name 字段相同,并可能由使值在服务器上唯一要求的后缀长度截断。如果指定了此字段并且存在生成的名称,服务器将不会返回 409 -,它会返回 201 Created 或 500 with Reason ServerTimeout,表示无法在分配时找到唯一名称,并且客户端应重试(可选在 Retry-After 标头中指定的时间之后)。仅在未指定 Name 时应用。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency |
|
| 可用于组织和分类(范围和选择)对象的字符串键和值映射。可能与复制控制器和服务选择器匹配。更多信息: http://kubernetes.io/docs/user-guide/labels |
|
| 名称在命名空间中必须是唯一的。创建资源时需要一些资源,但有些资源可能会允许客户端自动请求生成适当名称。name 主要用于创建 idempotence 和配置定义。无法更新。更多信息: http://kubernetes.io/docs/user-guide/identifiers#names |
|
| namespace 定义每个名称中的空间必须是唯一的。空命名空间等同于 "default" 命名空间,但 "default" 是规范表示。不是所有对象都必须限定到命名空间 - 这些对象的这个字段的值为空。必须是 DNS_LABEL。无法更新。更多信息: http://kubernetes.io/docs/user-guide/namespaces |
|
| 此对象依赖的对象列表。如果列表中删除列表中的 all 对象,则会收集此对象。如果此对象由控制器管理,则此列表中的一个条目将指向此控制器,controller 字段设为 true。不能有多个管理控制器。 |
|
| OwnerReference 包含足够信息,供您标识拥有的对象。所属对象必须与依赖的命名空间相同,或是集群范围的,因此没有命名空间字段。 |
9.1.8. .spec.metadata.ownerReferences
- 描述
- 此对象依赖的对象列表。如果列表中删除列表中的 all 对象,则会收集此对象。如果此对象由控制器管理,则此列表中的一个条目将指向此控制器,controller 字段设为 true。不能有多个管理控制器。
- 类型
-
array
9.1.9. .spec.metadata.ownerReferences[]
- 描述
- OwnerReference 包含足够信息,供您标识拥有的对象。所属对象必须与依赖的命名空间相同,或是集群范围的,因此没有命名空间字段。
- 类型
-
object
- 必填
-
apiVersion
-
kind
-
name
-
uid
-
属性 | 类型 | 描述 |
---|---|---|
|
| 引用的 API 版本。 |
|
| 如果为 true,并且所有者是否有"foregroundDeletion"终结器,则无法从键值存储中删除所有者,直到此引用被删除为止。有关垃圾收集器如何与此字段交互并强制实施前台删除方式,请参阅 https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion。默认为false。要设置此字段,用户需要所有者的"删除"权限,否则将返回 422 (不可处理实体)。 |
|
| 如果为 true,则此引用指向管理控制器。 |
|
| 引用的类型。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
|
| 引用的名称。更多信息: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names |
|
| 引用的 UID。更多信息: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids |
9.1.10. .spec.providerSpec
- 描述
- providerSpec 详情特定于供应商的配置,以便在节点创建过程中使用。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
| `` | 值是资源配置的内联序列化表示。建议供应商维护自己的版本化 API 类型,这些类型应该从此字段序列化/反序列化到组件配置。 |
9.1.11. .spec.taints
- 描述
- 要以增加方式应用到对应节点的污点列表。此列表不会根据其他实体持续覆盖添加到节点的任何其他污点。这些污点应该被主动协调,例如,如果您要求机器控制器应用污点,然后手动删除机器控制器将重新放置的污点,但机器控制器没有删除任何污点
- 类型
-
array
9.1.12. .spec.taints[]
- 描述
- 此 Taint 附加到任何不容许 Taint 的 pod 上的"effect"的节点。
- 类型
-
object
- 必填
-
effect
-
key
-
属性 | 类型 | 描述 |
---|---|---|
|
| 必需。污点对不容许该污点的 pod 的影响。有效效果为 NoSchedule、PreferNoSchedule 和 NoExecute。 |
|
| 必需。要应用到节点的污点键。 |
|
| TimeAdded 代表添加污点的时间。它仅针对 NoExecute 污点编写。 |
|
| 与污点键对应的污点值。 |
9.1.13. .status
- 描述
- MachineStatus 定义 Machine 的观察状态
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| addresses 是分配给机器的地址列表。从云供应商查询(如果可用)。 |
|
| NodeAddress 包含节点地址的信息。 |
|
| Conditions 定义机器的当前状态 |
|
| condition 定义 Machine API 资源操作状态的观察。 |
|
| 当存在终端问题协调机器,并将包含更详细的字符串时,会设置 errorMessage。不应为控制器一段时间内自动修复的传输错误设置此字段(如服务中断),而是表示机器规格或控制器配置基本错误,并且需要手动干预。终端错误示例在 spec 中是无效的设置组合、控制器不支持的值,或者负责控制器本身被严重错误配置。机器协调期间发生的任何临时错误都可以作为事件添加到 Machine 对象和/或登录控制器的输出中。 |
|
| ErrorReason 将在终端问题协调机器时设置 ErrorReason,它将包含一个适合机器解释的 succinct 值。不应为控制器一段时间内自动修复的传输错误设置此字段(如服务中断),而是表示机器规格或控制器配置基本错误,并且需要手动干预。终端错误示例在 spec 中是无效的设置组合、控制器不支持的值,或者负责控制器本身被严重错误配置。机器协调期间发生的任何临时错误都可以作为事件添加到 Machine 对象和/或登录控制器的输出中。 |
|
| lastOperation 描述了 machine-controller 执行的最后一个操作。此 API 应在特定机器上执行的最新操作方面作为历史记录很有用。它还应传达了 latest-operation 的状态,例如,如果它仍然成功完成、失败或完成。 |
|
| lastUpdated 标识此状态最后观察到的时间。 |
|
| NodeRef 将指向对应的节点(如果存在)。 |
|
| phase 代表机器操作的当前阶段。其中之一: Failed, Provisioning, Provisioned, Running, Deleting |
| `` | ProviderStatus 详细介绍了特定于提供程序的状态。建议供应商维护自己的版本化 API 类型,该类型应该从此字段序列化/反序列化。 |
9.1.14. .status.addresses
- 描述
- addresses 是分配给机器的地址列表。从云供应商查询(如果可用)。
- 类型
-
array
9.1.15. .status.addresses[]
- 描述
- NodeAddress 包含节点地址的信息。
- 类型
-
object
- 必填
-
address
-
type
-
属性 | 类型 | 描述 |
---|---|---|
|
| 节点地址。 |
|
| 节点地址类型,一个用于 Hostname、ExternalIP 或 InternalIP 之一。 |
9.1.16. .status.conditions
- 描述
- Conditions 定义机器的当前状态
- 类型
-
array
9.1.17. .status.conditions[]
- 描述
- condition 定义 Machine API 资源操作状态的观察。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| 条件从一个状态转换到另一个状态最后一次的时间。这应该是底层条件变化的时间。如果为未知,则使用 API 字段更改的时间是可以接受的。 |
|
| 人类可读的消息,指示有关转换的详细信息。此字段可能为空。 |
|
| 在 CamelCase 中条件最后一次转换的原因。特定的 API 可能会选择此字段是否被视为有保证的 API。此字段可能不是空的。 |
|
| 严重性提供了明确的 Reason 代码分类,因此用户或机器可以立即了解当前的情况并相应地操作。Severity 字段必须只在 Status=False 时才会设置。 |
|
| 条件的状态,True, False, Unknown 之一。 |
|
| CamelCase 或 foo.example.com/CamelCase 中的条件类型。许多 .condition.type 值在 Available 资源之间是一致的,但由于任意条件可能很有用(请参阅 .node.status.conditions),不限制性非常重要。 |
9.1.18. .status.lastOperation
- 描述
- lastOperation 描述了 machine-controller 执行的最后一个操作。此 API 应在特定机器上执行的最新操作方面作为历史记录很有用。它还应传达了 latest-operation 的状态,例如,如果它仍然成功完成、失败或完成。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| description 是最后一次操作的人类可读描述。 |
|
| lastUpdated 是 LastOperation API 为 last-updated 的时间戳。 |
|
| state 是最后一次执行的操作的当前状态。例如处理、失败、成功等 |
|
| type 是最近执行的操作类型。例如创建、删除、更新等 |
9.1.19. .status.nodeRef
- 描述
- NodeRef 将指向对应的节点(如果存在)。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| 引用的 API 版本。 |
|
| 如果引用的是对象的一部分而非整个对象,则该字符串应包含有效的 JSON/Go 字段访问声明,如 desiredState.manifest.containers[2]。例如,如果对象引用是一个 pod 中的容器,它应该还以下类似: "spec.containers{name}"(其中 "name" 是指触发事件的容器的名称),如果不使用容器名称,则应类似于 "spec.containers[2]"(使用此 pod 中索引值为 2 的容器)。选择这个语法的原因是,为了有一些指向对象部分的正确定义方法。Todo: 这个设计不是最终设计的,且该字段在将来会有所改变。 |
|
| 引用的类型。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
|
| 引用的名称。更多信息: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names |
|
| 引用的命名空间。更多信息: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ |
|
| 指定构成这个引用的 resourceVersion(如果存在)。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency |
|
| 引用的 UID。更多信息: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids |