Docker Swarm 服务版本更新

环境:

  • 系统:Centos 7.4 x64
  • 应用版本:Docker 18.09.0
  • 管理节点:192.168.1.79
  • 工作节点:192.168.1.78
  • 工作节点:192.168.1.77

1、管理节点:创建服务设置更新策略

docker service create \
--replicas 3 \
--name redis \
--update-delay 10s \
--update-parallelism 2 \
--update-failure-action continue \
redis:3.0.6
# 创建命令
docker service create \
# 副本数
--replicas 3 \
# 服务名
--name redis \
# 设定容器间更新时间间隔
--update-delay 10s \
# 更新时同时并行更新数量,默认1
--update-parallelism 2 \
# 任务容器更新失败时的模式 continue为继续使用
--update-failure-action continue \
# 镜像
redis:3.0.6

命令解析

命令:docker service ls
ID NAME MODE REPLICAS IMAGE
v76p9bl941bk redis replicated 3/3 redis:3.0.6

查看添加服务

命令:docker service ps redis
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
2pruajw13gud redis.1 redis:3.0.6 slave02 Running Running 4 minutes ago
ma8ait8xcagl redis.2 redis:3.0.6 slave02 Running Running 4 minutes ago
igpwcuyumwzu redis.3 redis:3.0.6 slave01 Running Running 5 minutes ago

查看启动情况

2、管理节点:手动更新服务版本

docker service update --image redis:3.0.7 redis
命令:docker service ps redis
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
tio9f89x7fzk redis.1 redis:3.0.7 slave02 Running Running 2 minutes ago
2pruajw13gud \_ redis.1 redis:3.0.6 slave02 Shutdown Shutdown 2 minutes ago
e3fuv9fm202x redis.2 redis:3.0.7 slave01 Running Running 2 minutes ago
ma8ait8xcagl \_ redis.2 redis:3.0.6 slave02 Shutdown Shutdown 2 minutes ago
zku5h3h4dqkn redis.3 redis:3.0.7 slave01 Running Running 2 minutes ago
igpwcuyumwzu \_ redis.3 redis:3.0.6 slave01 Shutdown Shutdown 3 minutes ago

查看更新情况

docker service inspect redis
[
{
"ID": "v76p9bl941bk87pwwk3nvtwfe",
"Version": {
"Index": 1479
},
"CreatedAt": "2018-11-07T06:19:23.210686656Z",
"UpdatedAt": "2018-11-07T06:30:53.565888582Z",
"Spec": {
# 服务名称
"Name": "redis",
"TaskTemplate": {
"ContainerSpec": {
# 服务镜像
"Image": "redis:3.0.7@sha256:730b765df9fe96af414da64a2b67f3a5f70b8fd13a31e5096fee4807ed802e20",
"DNSConfig": {}
},
"Resources": {
"Limits": {},
"Reservations": {}
},
"RestartPolicy": {
"Condition": "any",
"MaxAttempts": 0
},
"Placement": {},
"ForceUpdate": 0
},
"Mode": {
# 模式
"Replicated": {
# 副本数
"Replicas": 3
}
},
# 服务更新时应用策略
"UpdateConfig": {
# 同时更新任务数
"Parallelism": 1,
# 更新间隔时间
"Delay": 10000000000,
# 更新失败后动作 pause暂停
"FailureAction": "pause",
# 更新失败后继续运行半分比
"MaxFailureRatio": 0
},
"EndpointSpec": {
# 默认分配1个虚拟IP
"Mode": "vip"
}
},
"PreviousSpec": {
"Name": "redis",
"TaskTemplate": {
"ContainerSpec": {
"Image": "redis:3.0.6@sha256:6a692a76c2081888b589e26e6ec835743119fe453d67ecf03df7de5b73d69842",
"DNSConfig": {}
},
"Resources": {
"Limits": {},
"Reservations": {}
},
"RestartPolicy": {
"Condition": "any",
"MaxAttempts": 0
},
"Placement": {},
"ForceUpdate": 0
},
"Mode": {
"Replicated": {
"Replicas": 3
}
},
"UpdateConfig": {
"Parallelism": 1,
"Delay": 10000000000,
"FailureAction": "pause",
"MaxFailureRatio": 0
},
"EndpointSpec": {
"Mode": "vip"
}
},
"Endpoint": {
"Spec": {}
},
"UpdateStatus": {
"State": "completed",
"StartedAt": "2018-11-07T06:29:00.44192283Z",
"CompletedAt": "2018-11-07T06:30:53.56587273Z",
"Message": "update completed"
}
}
]

查看服务详细信息

注:升级过程,按顺序停止一个容器任务去对这个停止的任务进行更新,最后更新为running状态,再继续往下更新其他容器任务,如果更新失败它会暂停更新,切换到下一个容器任务继续更新直到所有容器。


Docker Swarm 服务版本回滚

1、管理节点:创建服务时设定回滚策略

docker service create \
--name my_web \
--replicas 10 \
--rollback-parallelism 2 \
--rollback-monitor 20s \
--rollback-max-failure-ratio .2 \
nginx:1.12
# 创建服务
docker service create \
# 服务名
--name my_web \
# 副本数
--replicas 10 \
# 同时执行回滚数动作
--rollback-parallelism 2 \
# 每次容器与容器之间的回滚时间间隔
--rollback-monitor 20s \
# 回滚故障率如果小于百分比允许运行
--rollback-max-failure-ratio .2 \
# 使用镜像
nginx:1.12

命令解析

命令:docker service ps -f "DESIRED-STATE=running" my_web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
bgqpm1s0a24l my_web.1 nginx:1.12 slave01 Running Running about a minute ago
jttvdgzpiz02 my_web.2 nginx:1.12 slave01 Running Running about a minute ago
t8yqfrzoa7fj my_web.3 nginx:1.12 slave02 Running Running about a minute ago
xgh712gi2eld my_web.4 nginx:1.12 slave02 Running Running about a minute ago
2tnw3tnofyn5 my_web.5 nginx:1.12 slave01 Running Running about a minute ago
on4khcpkb2h7 my_web.6 nginx:1.12 slave02 Running Running about a minute ago
gxdeqfbmq60k my_web.7 nginx:1.12 slave01 Running Running about a minute ago
kmyz0btgb0hk my_web.8 nginx:1.12 slave02 Running Running about a minute ago
lso2ry7f2v0o my_web.9 nginx:1.12 slave01 Running Running 2 minutes ago
ee21b2ud0mkk my_web.10 nginx:1.12 slave02 Running Running about a minute ago

查看创建服务

2、管理节点:更新服务提升一个版本

docker service update --image nginx:1.13 my_web
docker service ps -f "DESIRED-STATE=running" my_web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
bgqpm1s0a24l my_web.1 nginx:1.13 slave01 Running Running about a minute ago
jttvdgzpiz02 my_web.2 nginx:1.13 slave01 Running Running about a minute ago
t8yqfrzoa7fj my_web.3 nginx:1.13 slave02 Running Running about a minute ago
xgh712gi2eld my_web.4 nginx:1.13 slave02 Running Running about a minute ago
2tnw3tnofyn5 my_web.5 nginx:1.13 slave01 Running Running about a minute ago
on4khcpkb2h7 my_web.6 nginx:1.13 slave02 Running Running about a minute ago
gxdeqfbmq60k my_web.7 nginx:1.13 slave01 Running Running about a minute ago
kmyz0btgb0hk my_web.8 nginx:1.13 slave02 Running Running about a minute ago
lso2ry7f2v0o my_web.9 nginx:1.13 slave01 Running Running 2 minutes ago
ee21b2ud0mkk my_web.10 nginx:1.13 slave02 Running Running about a minute ago

查看更新服务

3、管理节点:手动回滚到上一个版本

docker service update --rollback my_web
命令:docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
nikder7y06o2 my_web replicated 10/10 nginx:1.12

查看回滚版本

Docker Swarm 服务版本更新与回滚的更多相关文章

  1. 基于 Consul 的 Docker Swarm 服务发现

    Docker 是一种新型的虚拟化技术,它的目标在于实现轻量级操作系统的虚拟化.相比传统的虚拟化方案,Docker 虚拟化技术有一些很明显的优势:启动容器的速度明显快于传统虚拟化技术,同时创建一台虚拟机 ...

  2. Docker Kubernetes 容器更新与回滚

    Docker Kubernetes 容器更新与回滚 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 ...

  3. 【linux】【jenkins】jenkins构建、mvn或者npm打包、docker运行、失败自动回滚脚本

    小白对jenkins运维的使用有点简单的想法,这里开个记录贴记录下. 由于未找到jenkins构建失败后执行其他脚本的插件,也暂时没有使用其他运维工具.所以想自己写一个shell脚本,一是方便其他人使 ...

  4. Docker Swarm 服务编排之命令

    一.简介 Docker有个编排工具docker-compose,可以将组成某个应该的多个docker容器编排在一起,同时管理.同样在Swarm集群中,可以使用docker stack 将一组相关联的服 ...

  5. k8s用kubectl管理应用升级,服务发布与回滚,扩缩容

    应用升级 Kubectl set image --help 有案例指定新版本 [root@k8s-master ~]# kubectl set image deployment/nginx nginx ...

  6. jenkinsfile or pipline 实现微服务自动发布回滚流程

    1 #!/usr/bin/env groovy Jenkinsfile node { //服务名称 def service_name = "**" //包名 def service ...

  7. Docker Swarm 常用命令

    # 管理配置文件 docker config     # 查看已创建配置文件     - docker config ls     # 将已有配置文件添加到docker配置文件中     - dock ...

  8. Docker Swarm集群部署

    一.系统环境 1)服务器环境 节点名称 IP 操作系统 内核版本 manager 172.16.60.95 CentOs7 4.16.1-1.el7.elrepo.x86_64 node-01 172 ...

  9. docker swarm英文文档学习-10-使用Docker密钥管理敏感数据

    Manage sensitive data with Docker secrets使用Docker secrets管理敏感数据 About secrets 对于Docker Swarm服务来说,sec ...

随机推荐

  1. dir 命令手册

    dir 命令手册 参数 /A D 目录 R 只读文件 H 隐藏文件 A 准备存档的文件 S 系统文件 - 表示"否"的前缀 /B 使用空格式(没有标题信息或摘要) /C 在文件大小 ...

  2. Linux系统安全之pam后门安装使用详解

    一.查看系统pam版本: [root@redkey ~]# rpm -qa | grep pam pam-1.1.1-4.el6.x86_64 二.下载对应版本的pam模块 http://www.li ...

  3. webpack简介与使用

    欢迎小伙伴们为 前端导航仓库 点star https://github.com/pfan123/fr...前端导航平台访问 CommonJS 和 AMD 是用于 JavaScript 模块管理的两大规 ...

  4. F - Rescue 优先队列bfs

    来源poj Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a ...

  5. template.js artTemplate 简洁语法官网下载不了 template.js artTemplate 新下载地址

    参考:https://blog.csdn.net/tavatimsa/article/details/82019792

  6. python3 小工具

    扫描IP的端口是否开放:Porttest.py # -*- coding: utf-8 -*- import sys import os import socket #扫描 def scanport( ...

  7. java个人博客源码

    初入博客园,请各位多关照,来而不往非礼也. 如需要源码以及学习内容,qq:1397617269,我看到就回你们资源. 直接给链接: 链接:https://pan.baidu.com/s/1S_awtg ...

  8. 防止xss和sql注入:JS特殊字符过滤正则

    function stripscript(s) { var pattern = new RegExp("[%--`~!@#$^&*()=|{}':;',\\[\\].<> ...

  9. 原生JS表格行拖动排序,添加了回调功能

    function tableDnD(el, callback) { if (typeof (el) == "string") { el = document.getElementB ...

  10. JavaScript基础知识(字符串的方法)

    字符串的方法 1.字符串: 在js中被单引号或双引号包起来的内容都是字符串: var t = "true"; console.log(typeof t);// "stri ...