×

规格

属性 类型 描述

apiVersion

字符串

APIVersion定义了对象的此表示的版本化模式。服务器应将识别的模式转换为最新的内部值,并可能拒绝无法识别的值。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

kind

字符串

Kind 是一个字符串值,表示此对象表示的 REST 资源。服务器可以从客户端提交请求的端点推断出这一点。不可更新。使用驼峰命名法。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

metadata

ObjectMeta

标准对象的元数据。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata

spec

对象

MachineSpec 定义了 Machine 的期望状态

status

对象

MachineStatus 定义了 Machine 的观察状态

.spec

描述

MachineSpec 定义了 Machine 的期望状态

类型

对象

属性 类型 描述

lifecycleHooks

对象

LifecycleHooks 允许用户在机器生命周期的某些预定义点暂停机器上的操作。

metadata

对象

ObjectMeta 将自动填充创建的 Node。使用它来指示在创建 Node 时应使用哪些标签、注释、名称前缀等。

providerID

字符串

ProviderID 是提供者提供的机器的标识 ID。此字段必须与在与此机器对应的节点对象上看到的提供者 ID 匹配。此字段是集群 API 的更高级别使用者所需的。用例示例是使用集群 API 作为提供者的集群自动缩放器。自动缩放器中的清理逻辑比较机器和节点以找出无法注册为 Kubernetes 节点的提供商处的机器。使用集群 API 作为自动缩放器的通用树外提供程序,自动缩放器需要此字段才能拥有机器列表的提供程序视图。从 k8s apiserver 查询节点的另一个列表,然后进行比较以找出未注册的机器并将其标记为删除。此字段将由执行器设置,并由像自动缩放器这样的更高级别实体使用,这些实体将与集群 API 作为通用提供程序交互。

providerSpec

对象

ProviderSpec 详细说明了在节点创建期间使用的特定于提供程序的配置。

taints

数组

以累加方式应用于相应 Node 的污点的列表。此列表不会持续覆盖其他实体添加到 Node 的任何其他污点。(例如,如果您要求机器控制器应用污点,然后手动删除污点,机器控制器会将其放回)但不会让机器控制器删除任何污点。

taints[]

对象

附加此污点的节点对任何不宽容此污点的 Pod 都有“影响”。

.spec.lifecycleHooks

描述

LifecycleHooks 允许用户在机器生命周期的某些预定义点暂停机器上的操作。

类型

对象

属性 类型 描述

preDrain

数组

PreDrain 挂钩阻止机器被排空。这也阻止了进一步的生命周期事件,例如终止。

preDrain[]

对象

LifecycleHook 代表生命周期挂钩的单个实例。

preTerminate

数组

PreTerminate 挂钩阻止机器被终止。在 Machine 被排空后,可以执行 PreTerminate 挂钩。

preTerminate[]

对象

LifecycleHook 代表生命周期挂钩的单个实例。

.spec.lifecycleHooks.preDrain

描述

PreDrain 挂钩阻止机器被排空。这也阻止了进一步的生命周期事件,例如终止。

类型

数组

.spec.lifecycleHooks.preDrain[]

描述

LifecycleHook 代表生命周期挂钩的单个实例。

类型

对象

必需
  • name

  • owner

属性 类型 描述

name

字符串

Name 定义了生命周期挂钩的唯一名称。名称应唯一且具有描述性,理想情况下为 1-3 个单词,使用驼峰命名法,或者它可以命名空间,例如 foo.example.com/CamelCase。名称必须唯一,并且只能由单个实体管理。

owner

字符串

Owner 定义了生命周期挂钩的所有者。这应该足够具有描述性,以便用户可以识别谁/什么负责阻止生命周期。这可能是控制器的名称(例如 clusteroperator/etcd)或管理挂钩的管理员。

.spec.lifecycleHooks.preTerminate

描述

PreTerminate 挂钩阻止机器被终止。在 Machine 被排空后,可以执行 PreTerminate 挂钩。

类型

数组

.spec.lifecycleHooks.preTerminate[]

描述

LifecycleHook 代表生命周期挂钩的单个实例。

类型

对象

必需
  • name

  • owner

属性 类型 描述

name

字符串

Name 定义了生命周期挂钩的唯一名称。名称应唯一且具有描述性,理想情况下为 1-3 个单词,使用驼峰命名法,或者它可以命名空间,例如 foo.example.com/CamelCase。名称必须唯一,并且只能由单个实体管理。

owner

字符串

Owner 定义了生命周期挂钩的所有者。这应该足够具有描述性,以便用户可以识别谁/什么负责阻止生命周期。这可能是控制器的名称(例如 clusteroperator/etcd)或管理挂钩的管理员。

.spec.metadata

描述

ObjectMeta 将自动填充创建的 Node。使用它来指示在创建 Node 时应使用哪些标签、注释、名称前缀等。

类型

对象

属性 类型 描述

annotations

对象(字符串)

Annotations 是与资源一起存储的非结构化键值映射,外部工具可以设置它来存储和检索任意元数据。它们不可查询,并且在修改对象时应保留。更多信息:https://kubernetes.ac.cn/docs/user-guide/annotations

generateName

字符串

GenerateName 是一个可选前缀,服务器使用它来生成唯一名称,仅当未提供 Name 字段时才使用。如果使用此字段,则返回给客户端的名称将与传递的名称不同。此值还将与唯一的后缀组合。提供的值得以与 Name 字段相同的验证规则,并且可能因生成服务器上唯一值所需的后缀长度而被截断。如果指定此字段并且生成的名称存在,服务器将不会返回 409 - 相反,它将返回 201 已创建或 500,原因是 ServerTimeout 指示在分配的时间内找不到唯一名称,客户端应重试(可选地在 Retry-After 标头中指示的时间之后)。仅当未指定 Name 时才适用。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency

labels

对象(字符串)

可以用来组织和分类(范围和选择)对象的字符串键和值的映射。可能与复制控制器和服务的选取器匹配。更多信息:https://kubernetes.ac.cn/docs/user-guide/labels

name

字符串

Name 在命名空间内必须唯一。创建资源时是必需的,尽管某些资源可能允许客户端请求自动生成合适的名称。Name 主要用于创建幂等性和配置定义。不可更新。更多信息:https://kubernetes.ac.cn/docs/user-guide/identifiers#names

namespace

字符串

Namespace 定义了每个名称必须唯一的空间。空命名空间等效于“default”命名空间,但“default”是规范表示。并非所有对象都需要限定到命名空间 - 这些对象的此字段的值将为空。必须是 DNS_LABEL。不可更新。更多信息:https://kubernetes.ac.cn/docs/user-guide/namespaces

ownerReferences

数组

此对象依赖的对象列表。如果列表中的所有对象都被删除,则此对象将被垃圾收集。如果此对象由控制器管理,则此列表中的条目将指向此控制器,并将 controller 字段设置为 true。不能有多个管理控制器。

ownerReferences[]

对象

OwnerReference 包含足够的信息,可让您识别拥有对象。拥有对象必须与从属对象位于相同的命名空间中,或者必须是集群范围的,因此没有命名空间字段。

.spec.metadata.ownerReferences

描述

此对象依赖的对象列表。如果列表中的所有对象都被删除,则此对象将被垃圾收集。如果此对象由控制器管理,则此列表中的条目将指向此控制器,并将 controller 字段设置为 true。不能有多个管理控制器。

类型

数组

.spec.metadata.ownerReferences[]

描述

OwnerReference 包含足够的信息,可让您识别拥有对象。拥有对象必须与从属对象位于相同的命名空间中,或者必须是集群范围的,因此没有命名空间字段。

类型

对象

必需
  • apiVersion

  • kind

  • name

  • uid

属性 类型 描述

apiVersion

字符串

引用的 API 版本。

blockOwnerDeletion

布尔值

如果为 true,并且所有者具有“foregroundDeletion”最终确定器,则在删除此引用之前,无法从键值存储中删除所有者。有关垃圾收集器如何与此字段交互并强制执行前台删除的信息,请参阅https://kubernetes.ac.cn/docs/concepts/architecture/garbage-collection/#foreground-deletion。默认为 false。要设置此字段,用户需要所有者的“删除”权限,否则将返回 422(无法处理的实体)。

controller

布尔值

如果为 true,则此引用指向管理控制器。

kind

字符串

引用的 Kind。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

name

字符串

引用的 Name。更多信息:https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/names#names

uid

字符串

引用的 UID。更多信息:https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/names#uids

.spec.providerSpec

描述

ProviderSpec 详细说明了在节点创建期间使用的特定于提供程序的配置。

类型

对象

属性 类型 描述

``

Value 是资源配置的内联序列化表示。建议提供者维护他们自己的版本化 API 类型,这些类型应该从此字段序列化/反序列化,类似于组件配置。

.spec.taints

描述

以累加方式应用于相应 Node 的污点的列表。此列表不会持续覆盖其他实体添加到 Node 的任何其他污点。(例如,如果您要求机器控制器应用污点,然后手动删除污点,机器控制器会将其放回)但不会让机器控制器删除任何污点。

类型

数组

.spec.taints[]

描述

附加此污点的节点对任何不宽容此污点的 Pod 都有“影响”。

类型

对象

必需
  • effect

  • key

属性 类型 描述

effect

字符串

必填。对不兼容此污点的 Pod 的污点影响。有效的 effect 为 NoSchedule、PreferNoSchedule 和 NoExecute。

key

字符串

必填。要应用于节点的污点键。

timeAdded

字符串

TimeAdded 表示添加污点的时间。它仅针对 NoExecute 污点写入。

字符串

对应于污点键的污点值。

.status

描述

MachineStatus 定义了 Machine 的观察状态

类型

对象

属性 类型 描述

addresses

数组

Addresses 是分配给机器的一系列地址。如果可用,则从云提供商查询。

addresses[]

对象

NodeAddress 包含节点地址的信息。

conditions

数组

Conditions 定义了机器的当前状态。

conditions[]

对象

Condition 定义了对机器 API 资源操作状态的观察。

errorMessage

字符串

如果在协调机器时出现终端问题,则会设置 ErrorMessage,并且包含更详细的字符串,适合于日志记录和人工查看。此字段不应设置为控制器面临的预计会随着时间推移自动修复的瞬态错误(例如服务中断),而是指示机器的规范或控制器的配置存在根本性问题,并且需要人工干预。终端错误的示例包括规范中设置的无效组合、控制器不支持的值或负责的控制器本身严重配置错误。在协调机器期间发生的任何瞬态错误都可以作为事件添加到机器对象和/或记录在控制器的输出中。

errorReason

字符串

如果在协调机器时出现终端问题,则会设置 ErrorReason,并且包含适合机器解释的简洁值。此字段不应设置为控制器面临的预计会随着时间推移自动修复的瞬态错误(例如服务中断),而是指示机器的规范或控制器的配置存在根本性问题,并且需要人工干预。终端错误的示例包括规范中设置的无效组合、控制器不支持的值或负责的控制器本身严重配置错误。在协调机器期间发生的任何瞬态错误都可以作为事件添加到机器对象和/或记录在控制器的输出中。

lastOperation

对象

LastOperation 描述了机器控制器执行的最后一次操作。此 API 对于特定机器上执行的最新操作的历史记录非常有用。它还应传达最新操作的状态,例如它是否仍在进行中、失败或成功完成。

lastUpdated

字符串

LastUpdated 指明上次观察到此状态的时间。

nodeRef

对象

如果存在,NodeRef 将指向相应的 Node。

phase

字符串

Phase 表示机器执行的当前阶段。其中之一:Failed、Provisioning、Provisioned、Running、Deleting

providerStatus

``

ProviderStatus 详细说明了特定于提供商的状态。建议提供者维护他们自己的版本化 API 类型,这些类型应该从此字段序列化/反序列化。

.status.addresses

描述

Addresses 是分配给机器的一系列地址。如果可用,则从云提供商查询。

类型

数组

.status.addresses[]

描述

NodeAddress 包含节点地址的信息。

类型

对象

必需
  • address

  • type

属性 类型 描述

address

字符串

节点地址。

type

字符串

节点地址类型,Hostname、ExternalIP 或 InternalIP 之一。

.status.conditions

描述

Conditions 定义了机器的当前状态。

类型

数组

.status.conditions[]

描述

Condition 定义了对机器 API 资源操作状态的观察。

类型

对象

必需
  • type

属性 类型 描述

lastTransitionTime

字符串

条件从一种状态转换到另一种状态的最后时间。这应该是底层条件发生变化的时间。如果不知道,则使用 API 字段发生变化的时间是可以接受的。

message

字符串

指示转换详细信息的人类可读消息。此字段可能为空。

reason

字符串

条件上次转换的原因,采用驼峰式大小写。特定 API 可以选择此字段是否被视为保证的 API。此字段不能为空。

severity

字符串

Severity 提供了 Reason 代码的明确分类,因此用户或机器可以立即了解当前情况并采取相应措施。只有当 Status=False 时,才必须设置 Severity 字段。

status

字符串

条件的状态,True、False、Unknown 之一。

type

字符串

条件的类型,采用驼峰式大小写或 foo.example.com/CamelCase。许多 .condition.type 值在资源(如 Available)中是一致的,但由于任意条件可能很有用(请参阅 .node.status.conditions),因此消除冲突的能力非常重要。

.status.lastOperation

描述

LastOperation 描述了机器控制器执行的最后一次操作。此 API 对于特定机器上执行的最新操作的历史记录非常有用。它还应传达最新操作的状态,例如它是否仍在进行中、失败或成功完成。

类型

对象

属性 类型 描述

description

字符串

Description 是上次操作的人类可读描述。

lastUpdated

字符串

LastUpdated 是上次更新 LastOperation API 的时间戳。

state

字符串

State 是最后一次执行的操作的当前状态。例如 Processing、Failed、Successful 等

type

字符串

Type 是最后一次执行的操作的类型。例如 Create、Delete、Update 等

.status.nodeRef

描述

如果存在,NodeRef 将指向相应的 Node。

类型

对象

属性 类型 描述

apiVersion

字符串

引用的 API 版本。

fieldPath

字符串

如果引用对象的一部分而不是整个对象,则此字符串应包含有效的 JSON/Go 字段访问语句,例如 desiredState.manifest.containers[2]。例如,如果对象引用指向 Pod 中的容器,则其值将类似于:“spec.containers{name}”(其中“name”指的是触发事件的容器的名称)或者如果未指定容器名称,则为“spec.containers[2]”(此 Pod 中索引为 2 的容器)。选择此语法只是为了有一种定义明确的方法来引用对象的一部分。待办事项:此设计并非最终版本,此字段将来可能会更改。

kind

字符串

引用的 Kind。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

name

字符串

引用的名称。更多信息:https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/names/#names

namespace

字符串

引用的命名空间。更多信息:https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/namespaces/

resourceVersion

字符串

对此引用进行的特定 resourceVersion(如果有)。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency

uid

字符串

引用的 UID。更多信息:https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/names/#uids

API 端点

提供以下 API 端点

  • /apis/machine.openshift.io/v1beta1/machines

    • GET:列出 Machine 类型的对象

  • /apis/machine.openshift.io/v1beta1/namespaces/{namespace}/machines

    • DELETE:删除 Machine 集合

    • GET:列出 Machine 类型的对象

    • POST:创建一个 Machine

  • /apis/machine.openshift.io/v1beta1/namespaces/{namespace}/machines/{name}

    • DELETE:删除一个 Machine

    • GET:读取指定的 Machine

    • PATCH:部分更新指定的 Machine

    • PUT:替换指定的 Machine

  • /apis/machine.openshift.io/v1beta1/namespaces/{namespace}/machines/{name}/status

    • GET:读取指定的 Machine 的状态

    • PATCH:部分更新指定的 Machine 的状态

    • PUT:替换指定的 Machine 的状态

/apis/machine.openshift.io/v1beta1/machines

HTTP 方法

GET

描述

列出 Machine 类型的对象

表 1. HTTP 响应
HTTP 代码 响应正文

200 - OK

MachineList 模式

401 - 未授权

/apis/machine.openshift.io/v1beta1/namespaces/{namespace}/machines

HTTP 方法

DELETE

描述

删除 Machine 集合

表 2. HTTP 响应
HTTP 代码 响应正文

200 - OK

Status 模式

401 - 未授权

HTTP 方法

GET

描述

列出 Machine 类型的对象

表 3. HTTP 响应
HTTP 代码 响应正文

200 - OK

MachineList 模式

401 - 未授权

HTTP 方法

POST

描述

创建 Machine

表 4. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何从对象中静默删除的未知字段,并将忽略解码器遇到的除最后一个重复字段以外的所有重复字段。这是 v1.23 之前的默认行为。- Warn:对于从对象中删除的每个未知字段以及遇到的每个重复字段,这都将通过标准警告响应头发送警告。如果没有任何其他错误,请求仍然会成功,并且只会持久化任何重复字段中的最后一个。这是 v1.23+ 的默认值 - Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将使请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 5. 主体参数
参数 类型 描述

主体

Machine 模式

表 6. HTTP 响应
HTTP 代码 响应正文

200 - OK

Machine 模式

201 - 已创建

Machine 模式

202 - 已接受

Machine 模式

401 - 未授权

/apis/machine.openshift.io/v1beta1/namespaces/{namespace}/machines/{name}

表 7. 全局路径参数
参数 类型 描述

name

字符串

Machine 的名称

HTTP 方法

DELETE

描述

删除 Machine

表 8. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

表 9. HTTP 响应
HTTP 代码 响应正文

200 - OK

Status 模式

202 - 已接受

Status 模式

401 - 未授权

HTTP 方法

GET

描述

读取指定的 Machine

表 10. HTTP 响应
HTTP 代码 响应正文

200 - OK

Machine 模式

401 - 未授权

HTTP 方法

PATCH

描述

部分更新指定的 Machine

表 11. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何从对象中静默删除的未知字段,并将忽略解码器遇到的除最后一个重复字段以外的所有重复字段。这是 v1.23 之前的默认行为。- Warn:对于从对象中删除的每个未知字段以及遇到的每个重复字段,这都将通过标准警告响应头发送警告。如果没有任何其他错误,请求仍然会成功,并且只会持久化任何重复字段中的最后一个。这是 v1.23+ 的默认值 - Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将使请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 12. HTTP 响应
HTTP 代码 响应正文

200 - OK

Machine 模式

401 - 未授权

HTTP 方法

PUT

描述

替换指定的 Machine

表 13. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何从对象中静默删除的未知字段,并将忽略解码器遇到的除最后一个重复字段以外的所有重复字段。这是 v1.23 之前的默认行为。- Warn:对于从对象中删除的每个未知字段以及遇到的每个重复字段,这都将通过标准警告响应头发送警告。如果没有任何其他错误,请求仍然会成功,并且只会持久化任何重复字段中的最后一个。这是 v1.23+ 的默认值 - Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将使请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 14. 主体参数
参数 类型 描述

主体

Machine 模式

表 15. HTTP 响应
HTTP 代码 响应正文

200 - OK

Machine 模式

201 - 已创建

Machine 模式

401 - 未授权

/apis/machine.openshift.io/v1beta1/namespaces/{namespace}/machines/{name}/status

表 16. 全局路径参数
参数 类型 描述

name

字符串

Machine 的名称

HTTP 方法

GET

描述

读取指定的 Machine 的状态

表 17. HTTP 响应
HTTP 代码 响应正文

200 - OK

Machine 模式

401 - 未授权

HTTP 方法

PATCH

描述

部分更新指定的 Machine 的状态

表 18. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何从对象中静默删除的未知字段,并将忽略解码器遇到的除最后一个重复字段以外的所有重复字段。这是 v1.23 之前的默认行为。- Warn:对于从对象中删除的每个未知字段以及遇到的每个重复字段,这都将通过标准警告响应头发送警告。如果没有任何其他错误,请求仍然会成功,并且只会持久化任何重复字段中的最后一个。这是 v1.23+ 的默认值 - Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将使请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 19. HTTP 响应
HTTP 代码 响应正文

200 - OK

Machine 模式

401 - 未授权

HTTP 方法

PUT

描述

替换指定的 Machine 的状态

表 20. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何从对象中静默删除的未知字段,并将忽略解码器遇到的除最后一个重复字段以外的所有重复字段。这是 v1.23 之前的默认行为。- Warn:对于从对象中删除的每个未知字段以及遇到的每个重复字段,这都将通过标准警告响应头发送警告。如果没有任何其他错误,请求仍然会成功,并且只会持久化任何重复字段中的最后一个。这是 v1.23+ 的默认值 - Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将使请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 21. 主体参数
参数 类型 描述

主体

Machine 模式

表 22. HTTP 响应
HTTP 代码 响应正文

200 - OK

Machine 模式

201 - 已创建

Machine 模式

401 - 未授权