diff --git a/content/zh/docs/tasks/run-application/rolling-update-replication-controller.md b/content/zh/docs/tasks/run-application/rolling-update-replication-controller.md index b4956d0d8a..573339ed3b 100644 --- a/content/zh/docs/tasks/run-application/rolling-update-replication-controller.md +++ b/content/zh/docs/tasks/run-application/rolling-update-replication-controller.md @@ -1,32 +1,81 @@ --- -approvers: +reviewers: - janetkuo title: 基于Replication Controller执行滚动升级 +content_template: templates/concept +weight: 80 --- - -{{< toc >}} + ## 概述 **注**: 创建副本应用的首选方法是使用[Deployment](/docs/api-reference/{{< param "version" >}}/#deployment-v1beta1-apps),Deployment使用[ReplicaSet](/docs/api-reference/{{< param "version" >}}/#replicaset-v1beta1-extensions)来进行副本控制。 更多信息, 查看[使用Deployment运行一个无状态应用](/docs/tasks/run-application/run-stateless-application-deployment/)。 + + 为了在更新服务的同时不中断业务, `kubectl` 支持['滚动更新'](/docs/user-guide/kubectl/v1.6/#rolling-update),它一次更新一个pod,而不是同时停止整个服务。 有关更多信息,请参阅 [滚动更新设计文档](https://git.k8s.io/community/contributors/design-proposals/cli/simple-rolling-update.md) 和 [滚动更新示例](/docs/tasks/run-application/rolling-update-replication-controller/)。 + 请注意, `kubectl rolling-update` 仅支持Replication Controllers。 但是,如果使用Replication Controllers部署应用,请考虑将其切换到[Deployments](/docs/concepts/workloads/controllers/deployment/). Deployment是一种被推荐使用的更高级别的控制器,它可以对应用进行声明性的自动滚动更新。 如果您仍然希望保留您的Replication Controllers并使用 `kubectl rolling-update`进行滚动更新, 请继续往下阅读: + 滚动更新可以对replication controller所管理的Pod的配置进行变更,变更可以通过一个新的配置文件来进行,或者,如果只更新镜像,则可以直接指定新的容器镜像。 + 滚动更新的工作流程: + 1. 通过新的配置创建一个replication controller 2. 在新的控制器上增加副本数,在旧的上面减少副本数,直到副本数达到期望值 3. 删除之前的replication controller + 使用`kubectl rolling-update`命令来进行滚动更新: $ kubectl rolling-update NAME \ ([NEW_NAME] --image=IMAGE | -f FILE) + ## 通过配置文件更新 @@ -43,6 +92,25 @@ title: 基于Replication Controller执行滚动升级 * `metadata.namespace`字段必须相同 Replication Controllers的配置文件详细介绍见[创建Replication Controllers](/docs/tutorials/stateless-application/run-stateless-ap-replication-controller/). + ### 示例 @@ -51,6 +119,15 @@ Replication Controllers的配置文件详细介绍见[创建Replication Controll // 将frontend-v2.json数据传到标准输入来更新frontend-v1的pods $ cat frontend-v2.json | kubectl rolling-update frontend-v1 -f - + ## 更新容器镜像 @@ -64,6 +141,28 @@ Replication Controllers的配置文件详细介绍见[创建Replication Controll 如果`IMAGE:TAG` 和当前值相同,更新就会失败。 因此,我们建议使用版本号来作为标签,而不是使用 `:latest`。从一个 `image:latest`镜像升级到一个新的 `image:latest` 镜像将会失败,即使这两个镜像不是相同的。 所以,我们不建议使用 `:latest` 来作为标签,详细信息见[最佳配置实践](/docs/concepts/configuration/overview/#container-images) 。 + ### 示例 @@ -72,6 +171,15 @@ Replication Controllers的配置文件详细介绍见[创建Replication Controll // 更新frontend的pods,不更改replication controller的名称 $ kubectl rolling-update frontend --image=image:v2 + ## 必选和可选字段 @@ -98,6 +206,46 @@ Replication Controllers的配置文件详细介绍见[创建Replication Controll * `--update-period DURATION`: 更新两个pod之间等待的时间,默认值是`1m0s`。有效单位如`--poll-interval`所述。 有关`kubectl rolling-update`命令的更多信息见[`kubectl`参考](/docs/user-guide/kubectl/v1.6/#rolling-update). + ## 实践 @@ -214,6 +362,123 @@ Scaling my-nginx-v4 up to 5 Update succeeded. Deleting old controller: my-nginx replicationcontroller "my-nginx-v4" rolling updated ``` + ## 故障分析 @@ -222,3 +487,15 @@ replicationcontroller "my-nginx-v4" rolling updated 如果更新失败,可以尝试使用同样的命令来继续更新过程。 在尝试更新之前如果需要回滚到之前的状态,可在之前的命令后面添加`--rollback=true`参数,这将回退所有的更改。 +