From 86d532630f44e616055f400c517a015cee560ccd Mon Sep 17 00:00:00 2001 From: khs1994 Date: Wed, 23 May 2018 17:16:51 +0800 Subject: [PATCH] Update Swarm mode: add rolling_update --- SUMMARY.md | 1 + swarm_mode/deploy.md | 16 +++++++++++++ swarm_mode/rolling_update.md | 46 ++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 swarm_mode/rolling_update.md diff --git a/SUMMARY.md b/SUMMARY.md index 5156706..5ced268 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -88,6 +88,7 @@ * [使用 compose 文件](swarm_mode/stack.md) * [管理敏感数据](swarm_mode/secret.md) * [管理配置信息](swarm_mode/config.md) + * [滚动升级](swarm_mode/rolling_update.md) * [安全](security/README.md) * [内核命名空间](security/kernel_ns.md) * [控制组](security/control_group.md) diff --git a/swarm_mode/deploy.md b/swarm_mode/deploy.md index 18b71a9..9d46c37 100644 --- a/swarm_mode/deploy.md +++ b/swarm_mode/deploy.md @@ -44,6 +44,22 @@ nginx.1.pjfzd39buzlt@swarm2 | 10.255.0.2 - - [25/Nov/2017:02:10:27 +0000] "GE nginx.1.pjfzd39buzlt@swarm2 | 2017/11/25 02:10:27 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 10.255.0.2, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.99.101" ``` +### 服务伸缩 + +我们可以使用 `docker service scale` 对一个服务运行的容器数量进行伸缩。 + +当业务处于高峰期时,我们需要扩展服务运行的容器数量。 + +```bash +$ docker service scale nginx=5 +``` + +当业务平稳时,我们需要减少服务运行的容器数量。 + +```bash +$ docker service scale nginx=2 +``` + ### 删除服务 使用 `docker service rm` 来从 `Swarm` 集群移除某个服务。 diff --git a/swarm_mode/rolling_update.md b/swarm_mode/rolling_update.md new file mode 100644 index 0000000..767be20 --- /dev/null +++ b/swarm_mode/rolling_update.md @@ -0,0 +1,46 @@ +## SWarm mode 与滚动升级 + +在 [部署服务](deploy.md) 一节中我们使用 `nginx:1.13.7-alpine` 镜像部署了一个名为 `nginx` 的服务。 + +现在我们想要将 `NGINX` 版本升级到 `1.13.12`,那么在 Swarm mode 中如何升级服务呢? + +你可能会想到,先停止原来的服务,再使用新镜像部署一个服务,不就完成服务的 “升级” 了吗。 + +这样做的弊端很明显,如果新部署的服务出现问题,原来的服务删除之后,很难恢复,那么在 Swarm mode 中到底该如何对服务进行滚动升级呢? + +答案就是使用 `docker service update` 命令。 + +```bash +$ docker service update \ + --image nginx:1.13.12-alpine \ + nginx +``` + +以上命令使用 `--image` 选项更新了服务的镜像。当然我们也可以使用 `docker service update` 更新任意的配置。 + +`--secret-add` 选项可以增加一个密钥 + +`--secret-rm` 选项可以删除一个密钥 + +更多选项可以通过 `docker service update -h` 命令查看。 + +### 服务回退 + +现在假设我们发现 `nginx` 服务的镜像升级到 `nginx:1.13.12-alpine` 出现了一些问题,我们可以使用命令一键回退。 + +```bash +$ docker service rollback nginx +``` + +现在使用 `docker service ps` 命令查看 `nginx` 服务详情。 + +```bash +$ docker service ps nginx + +ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS +rt677gop9d4x nginx.1 nginx:1.13.7-alpine VM-20-83-debian Running Running about a minute ago +d9pw13v59d00 \_ nginx.1 nginx:1.13.12-alpine VM-20-83-debian Shutdown Shutdown 2 minutes ago +i7ynkbg6ybq5 \_ nginx.1 nginx:1.13.7-alpine VM-20-83-debian Shutdown Shutdown 2 minutes ago +``` + +结果的输出详细记录了服务的部署、滚动升级、回退的过程。