--- api_metadata: apiVersion: "apps/v1" import: "k8s.io/api/apps/v1" kind: "Deployment" content_type: "api_reference" description: "Deployment 使得 Pod 和 ReplicaSet 能够进行声明式更新。" title: "Deployment" weight: 5 --- `apiVersion: apps/v1` `import "k8s.io/api/apps/v1"` ## Deployment {#Deployment} Deployment 使得 Pod 和 ReplicaSet 能够进行声明式更新。
- **apiVersion**: apps/v1 - **kind**: Deployment - **metadata** (}}">ObjectMeta) 标准的对象元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - **spec** (}}">DeploymentSpec) Deployment 预期行为的规约。 - **status** (}}">DeploymentStatus) 最近观测到的 Deployment 状态。 ## DeploymentSpec {#DeploymentSpec} DeploymentSpec 定义 Deployment 预期行为的规约。
- **selector** (}}">LabelSelector),必需 供 Pod 所用的标签选择算符。通过此字段选择现有 ReplicaSet 的 Pod 集合, 被选中的 ReplicaSet 将受到这个 Deployment 的影响。此字段必须与 Pod 模板的标签匹配。 - **template** (}}">PodTemplateSpec),必需 template 描述将要创建的 Pod。`template.spec.restartPolicy` 唯一被允许的值是 `Always`。 - **replicas** (int32) 预期 Pod 的数量。这是一个指针,用于辨别显式零和未指定的值。默认为 1。 - **minReadySeconds** (int32) 新建的 Pod 在没有任何容器崩溃的情况下就绪并被系统视为可用的最短秒数。 默认为 0(Pod 就绪后即被视为可用)。 - **strategy** (DeploymentStrategy) **补丁策略:retainKeys** 将现有 Pod 替换为新 Pod 时所用的部署策略。 **DeploymentStrategy 描述如何将现有 Pod 替换为新 Pod。** - **strategy.type** (string) 部署的类型。取值可以是 “Recreate” 或 “RollingUpdate”。默认为 RollingUpdate。 - **strategy.rollingUpdate** (RollingUpdateDeployment) 滚动更新这些配置参数。仅当 type = RollingUpdate 时才出现。 **控制滚动更新预期行为的规约。** - **strategy.rollingUpdate.maxSurge** (IntOrString) 超出预期的 Pod 数量之后可以调度的最大 Pod 数量。该值可以是一个绝对数(例如: 5)或一个预期 Pod 的百分比(例如:10%)。如果 MaxUnavailable 为 0,则此字段不能为 0。 通过向上取整计算得出一个百分比绝对数。默认为 25%。例如:当此值设为 30% 时, 如果滚动更新启动,则可以立即对 ReplicaSet 扩容,从而使得新旧 Pod 总数不超过预期 Pod 数量的 130%。 一旦旧 Pod 被杀死,则可以再次对新的 ReplicaSet 扩容, 确保更新期间任何时间运行的 Pod 总数最多为预期 Pod 数量的 130%。 **IntOrString 是可以保存 int32 或字符串的一个类型。 当用于 JSON 或 YAML 编组和取消编组时,它会产生或消费内部类型。 例如,这允许你拥有一个可以接受名称或数值的 JSON 字段。** - **strategy.rollingUpdate.maxUnavailable** (IntOrString) 更新期间可能不可用的最大 Pod 数量。该值可以是一个绝对数(例如: 5)或一个预期 Pod 的百分比(例如:10%)。通过向下取整计算得出一个百分比绝对数。 如果 MaxSurge 为 0,则此字段不能为 0。默认为 25%。 例如:当此字段设为 30%,则在滚动更新启动时 ReplicaSet 可以立即缩容为预期 Pod 数量的 70%。 一旦新的 Pod 就绪,ReplicaSet 可以再次缩容,接下来对新的 ReplicaSet 扩容, 确保更新期间任何时间可用的 Pod 总数至少是预期 Pod 数量的 70%。 **IntOrString 是可以保存 int32 或字符串的一个类型。 当用于 JSON 或 YAML 编组和取消编组时,它会产生或消费内部类型。 例如,这允许你拥有一个可以接受名称或数值的 JSON 字段。** - **revisionHistoryLimit** (int32) 保留允许回滚的旧 ReplicaSet 的数量。这是一个指针,用于辨别显式零和未指定的值。默认为 10。 - **progressDeadlineSeconds** (int32) Deployment 在被视为失败之前取得进展的最大秒数。Deployment 控制器将继续处理失败的部署, 原因为 ProgressDeadlineExceeded 的状况将被显示在 Deployment 状态中。 请注意,在 Deployment 暂停期间将不会估算进度。默认为 600s。 - **paused** (boolean) 指示部署被暂停。 ## DeploymentStatus {#DeploymentStatus} DeploymentStatus 是最近观测到的 Deployment 状态。
- **replicas** (int32) 此部署所针对的(其标签与选择算符匹配)未终止 Pod 的总数。 - **availableReplicas** (int32) 此部署针对的可用(至少 minReadySeconds 才能就绪)的 Pod 总数。 - **readyReplicas** (int32) readyReplicas 是此 Deployment 在就绪状况下处理的目标 Pod 数量。 - **unavailableReplicas** (int32) 此部署针对的不可用 Pod 总数。这是 Deployment 具有 100% 可用容量时仍然必需的 Pod 总数。 它们可能是正在运行但还不可用的 Pod,也可能是尚未创建的 Pod。 - **updatedReplicas** (int32) 此 Deployment 所针对的未终止 Pod 的总数,这些 Pod 采用了预期的模板规约。 - **collisionCount** (int32) 供 Deployment 所用的哈希冲突计数。 Deployment 控制器在需要为最新的 ReplicaSet 创建名称时将此字段用作冲突预防机制。 - **conditions** ([]DeploymentCondition) **补丁策略:按照键 `type` 合并** 表示 Deployment 当前状态的最新可用观测值。 **DeploymentCondition 描述某个点的部署状态。** - **conditions.status** (string),必需 状况的状态,取值为 True、False 或 Unknown 之一。 - **conditions.type** (string),必需 Deployment 状况的类型。 - **conditions.lastTransitionTime** (Time) 状况上次从一个状态转换为另一个状态的时间。 **Time 是对 time.Time 的封装。Time 支持对 YAML 和 JSON 进行正确封包。 为 time 包的许多函数方法提供了封装器。** - **conditions.lastUpdateTime** (Time) 上次更新此状况的时间。 **Time 是对 time.Time 的封装。Time 支持对 YAML 和 JSON 进行正确封包。 为 time 包的许多函数方法提供了封装器。** - **conditions.message** (string) 这是一条人类可读的消息,指示有关上次转换的详细信息。 - **conditions.reason** (string) 状况上次转换的原因。 - **observedGeneration** (int64) Deployment 控制器观测到的代数(Generation)。 ## DeploymentList {#DeploymentList} DeploymentList 是 Deployment 的列表。
- **apiVersion**: apps/v1 - **kind**: DeploymentList - **metadata** (}}">ListMeta) 标准的列表元数据。 - **items** ([]}}">Deployment),必需 items 是 Deployment 的列表。 ## 操作 {#Operations}
### `get` 读取指定的 Deployment #### HTTP 请求 GET /apis/apps/v1/namespaces/{namespace}/deployments/{name} #### 参数 - **name** (**路径参数**): string,必需 Deployment 的名称 - **namespace** (**路径参数**): string,必需 }}">namespace - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">Deployment): OK 401: Unauthorized ### `get` 读取指定的 Deployment 的状态 #### HTTP 请求 GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}/status #### 参数 - **name** (**路径参数**): string,必需 Deployment 的名称 - **namespace** (**路径参数**): string,必需 }}">namespace - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">Deployment): OK 401: Unauthorized ### `list` 列出或监视 Deployment 类别的对象 #### HTTP 请求 GET /apis/apps/v1/namespaces/{namespace}/deployments #### 参数 - **namespace** (**路径参数**): string,必需 }}">namespace - **allowWatchBookmarks** (**查询参数**): boolean }}">allowWatchBookmarks - **continue** (**查询参数**): string }}">continue - **fieldSelector** (**查询参数**): string }}">fieldSelector - **labelSelector** (**查询参数**): string }}">labelSelector - **limit** (**查询参数**): integer }}">limit - **pretty** (**查询参数**): string }}">pretty - **resourceVersion** (**查询参数**): string }}">resourceVersion - **resourceVersionMatch** (**查询参数**): string }}">resourceVersionMatch - **sendInitialEvents** (**查询参数**): boolean }}">sendInitialEvents - **timeoutSeconds** (**查询参数**): integer }}">timeoutSeconds - **watch** (**查询参数**): boolean }}">watch #### 响应 200 (}}">DeploymentList): OK 401: Unauthorized ### `list` 列出或监视 Deployment 类别的对象 #### HTTP 请求 GET /apis/apps/v1/deployments #### 参数 - **allowWatchBookmarks** (**查询参数**): boolean }}">allowWatchBookmarks - **continue** (**查询参数**): string }}">continue - **fieldSelector** (**查询参数**): string }}">fieldSelector - **labelSelector** (**查询参数**): string }}">labelSelector - **limit** (**查询参数**): integer }}">limit - **pretty** (**查询参数**): string }}">pretty - **resourceVersion** (**查询参数**): string }}">resourceVersion - **resourceVersionMatch** (**查询参数**): string }}">resourceVersionMatch - **sendInitialEvents** (**查询参数**): boolean }}">sendInitialEvents - **timeoutSeconds** (**查询参数**): integer }}">timeoutSeconds - **watch** (**查询参数**): boolean }}">watch #### 响应 200 (}}">DeploymentList): OK 401: Unauthorized ### `create` 创建 Deployment #### HTTP 请求 POST /apis/apps/v1/namespaces/{namespace}/deployments #### 参数 - **namespace** (**路径参数**): string,必需 }}">namespace - **body**: }}">Deployment,必需 - **dryRun** (**查询参数**): string }}">dryRun - **fieldManager** (**查询参数**): string }}">fieldManager - **fieldValidation** (**查询参数**): string }}">fieldValidation - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">Deployment): OK 201 (}}">Deployment): Created 202 (}}">Deployment): Accepted 401: Unauthorized ### `update` 替换指定的 Deployment #### HTTP 请求 PUT /apis/apps/v1/namespaces/{namespace}/deployments/{name} #### 参数 - **name** (**路径参数**): string,必需 Deployment 的名称 - **namespace** (**路径参数**): string,必需 }}">namespace - **body**: }}">Deployment,必需 - **dryRun** (**查询参数**): string }}">dryRun - **fieldManager** (**查询参数**): string }}">fieldManager - **fieldValidation** (**查询参数**): string }}">fieldValidation - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">Deployment): OK 201 (}}">Deployment): Created 401: Unauthorized ### `update` 替换指定的 Deployment 的状态 #### HTTP 请求 PUT /apis/apps/v1/namespaces/{namespace}/deployments/{name}/status #### 参数 - **name** (**路径参数**): string,必需 Deployment 的名称 - **namespace** (**路径参数**): string,必需 }}">namespace - **body**: }}">Deployment,必需 - **dryRun** (**查询参数**): string }}">dryRun - **fieldManager** (**查询参数**): string }}">fieldManager - **fieldValidation** (**查询参数**): string }}">fieldValidation - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">Deployment): OK 201 (}}">Deployment): Created 401: Unauthorized ### `patch` 部分更新指定的 Deployment #### HTTP 请求 PATCH /apis/apps/v1/namespaces/{namespace}/deployments/{name} #### 参数 - **name** (**路径参数**): string,必需 Deployment 的名称 - **namespace** (**路径参数**): string,必需 }}">namespace - **body**: }}">Patch,必需 - **dryRun** (**查询参数**): string }}">dryRun - **fieldManager** (**查询参数**): string }}">fieldManager - **fieldValidation** (**查询参数**): string }}">fieldValidation - **force** (**查询参数**): boolean }}">force - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">Deployment): OK 201 (}}">Deployment): Created 401: Unauthorized ### `patch` 部分更新指定的 Deployment 的状态 #### HTTP 请求 PATCH /apis/apps/v1/namespaces/{namespace}/deployments/{name}/status #### 参数 - **name** (**路径参数**): string,必需 Deployment 的名称 - **namespace** (**路径参数**): string,必需 }}">namespace - **body**: }}">Patch,必需 - **dryRun** (**查询参数**): string }}">dryRun - **fieldManager** (**查询参数**): string }}">fieldManager - **fieldValidation** (**查询参数**): string }}">fieldValidation - **force** (**查询参数**): boolean }}">force - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">Deployment): OK 201 (}}">Deployment): Created 401: Unauthorized ### `delete` 删除 Deployment #### HTTP 请求 DELETE /apis/apps/v1/namespaces/{namespace}/deployments/{name} #### 参数 - **name** (**路径参数**): string,必需 Deployment 的名称 - **namespace** (**路径参数**): string,必需 }}">namespace - **body**: }}">DeleteOptions - **dryRun** (**查询参数**): string }}">dryRun - **gracePeriodSeconds** (**查询参数**): integer }}">gracePeriodSeconds - **pretty** (**查询参数**): string }}">pretty - **propagationPolicy** (**查询参数**): string }}">propagationPolicy #### 响应 200 (}}">Status): OK 202 (}}">Status): Accepted 401: Unauthorized ### `deletecollection` 删除 Deployment 的集合 #### HTTP 请求 DELETE /apis/apps/v1/namespaces/{namespace}/deployments #### 参数 - **namespace** (**路径参数**): string,必需 }}">namespace - **body**: }}">DeleteOptions - **continue** (**查询参数**): string }}">continue - **dryRun** (**查询参数**): string }}">dryRun - **fieldSelector** (**查询参数**): string }}">fieldSelector - **gracePeriodSeconds** (**查询参数**): integer }}">gracePeriodSeconds - **labelSelector** (**查询参数**): string }}">labelSelector - **limit** (**查询参数**): integer }}">limit - **pretty** (**查询参数**): string }}">pretty - **propagationPolicy** (**查询参数**): string }}">propagationPolicy - **resourceVersion** (**查询参数**): string }}">resourceVersion - **resourceVersionMatch** (**查询参数**): string }}">resourceVersionMatch - **sendInitialEvents** (**查询参数**): boolean }}">sendInitialEvents - **timeoutSeconds** (**查询参数**): integer }}">timeoutSeconds #### 响应 200 (}}">Status): OK 401: Unauthorized