Shell脚本实现---Swarm集群部署实例(Swarm Cluster)
Shell脚本实现---Swarm集群部署实例(Swarm Cluster)
一、机器环境(均是centos7.8)
|
IP
|
hostname
|
角色
|
|
192.168.10.200
|
manager-swarm
|
manager节点
|
|
192.168.10.201
|
node1-swarm
|
node节点
|
|
192.168.10.202
|
node2-swarm
|
node节点 |
1、设置主机名
2、相互域名解析(三台机都执行)
[root@manager-swarm ~]# cat >> /etc/hosts << EOF
> 192.168.10.200 manager-swarm
> 192.168.10.201 node1-swarm
> 192.168.10.202 node2-swarm
> EOF
3、关闭三台机器上的防火墙、selinux。
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
4、在manager-swarm节点上传公钥
二、部署安装
#!bin/bash
#auther:sunli
#mail:<1916989848@qq.com>
manager=192.168.10.200
node1=192.168.10.201
node2=192.168.10.202 cat >> docker_install.sh << EOF
#/bin/bash
#auther:sunli
#mail:<1916989848@qq.com> #下载国内docker源,并安装
curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
[ `echo $?` -ne 0 ] && echo "Please check your epel.repo" && exit #配置阿里云镜像加速器
[ ! -d /etc/docker ] && mkdir /etc/docker
cat >> /etc/docker/daemon.json <<- EOF
{
"registry-mirrors": ["https://pf5f57i3.mirror.aliyuncs.com"]
}
EOF #修改docker监听端口
#Swarm是通过监听2375端口进行通信的,所以在使用Swarm进行集群管理之前,需要设置一下2375端口的监听。所有主机节点docker开启2375,2377(swarm集群)监听,docker版本不同,配置方式不一样
sed -i '/^ExecStart/ s#.*#& -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock#g' /usr/lib/systemd/system/docker.service #启动并设置开机自启
systemctl enable docker
systemctl start docker #拉取官方swarm镜像
docker pull swarm
EOF #用ansible给node节点传递脚本并执行
[ ! -x /usr/bin/ansible ] && yum -y install ansible
cat >> /etc/ansible/hosts << EOF
[docker]
$node1
$node2
EOF
ansible docker -m script -a 'creates=/root/docker_install.sh /root/docker_install.sh'
sh /root/docker_install.sh #创建swarm(要保存初始化后token保存至swarm_token.log
docker swarm init --advertise-addr $manager |tee swarm_token.log #添加节点到swarm集群中
swarm_token=$(sed -n '/--token/p' swarm_token.log)
ssh $node1 "$swarm_token"
ssh $node2 "$swarm_token" #在manager-swarm输出节点状态
docker node ls
执行最后输出:
三、日常运维中用到的Swarm相关命令
1) 初始化swarm manager并制定网卡地址
# docker swarm init --advertise-addr 182.48.115.237 2) 删除集群,强制退出需要加–force (针对manager节点). 到各个节点上执行退出集群的命令
# docker node rm swarm-node1
# docker swarm leave --force //manager节点退出集群,需要加--force 3) 查看swarm worker的连接令牌
# docker swarm join-token worker 4) 加入docker swarm集群,作为worker节点
利用上面3)执行结果中的命令放在其他节点上执行,则该节点加入到swarm集群中作为worker节点 5) 查看swarm manager的连接令牌
# docker swarm join-token manager 6) 加入docker swarm集群,作为manager节点
利用上面5)执行结果中的命令放在其他节点上执行,则该节点加入到swarm集群中作为manager管理节点,状态为reachable. 备注:如果之前的leader状态的manager管理节点挂了后(假如systemctl stop docker, 然后再systemctl start docker),
则新加入的manager节点状态由reachable变为leader, 之前的manager节点状态为unreachable. 7) 使旧令牌无效并生成新令牌
# docker swarm join-token --rotate 8) 查看集群中的节点
# docker node ls 9) 查看集群中节点信息
# docker node inspect swarm-node1 --pretty 10) 调度程序可以将任务分配给节点
# docker node update --availability active swarm-node1 11) 调度程序不向节点分配新任务,但是现有任务仍然保持运行
# docker node update --availability pause swarm-node1 12) 调度程序不会将新任务分配给节点。调度程序关闭任何现有任务并在可用节点上安排它们. 也就是线下节点,不参与任务分配.
# docker node update --availability drain swarm-node1 13) 添加节点标签
# docker node update --label-add label1 --label-add bar=label2 swarm-node1 14) 删除节点标签
# docker node update --label-rm label1 swarm-node1 15) 将worker节点升级为manager节点
# docker node promote swarm-node1 16) 将manager节点降级为worker节点
# docker node demote swarm-manager-node 17) 查看服务列表
# docker service ls 18) 查看服务的具体信息
# docker service ps my-test 19) 创建一个不定义name,不定义replicas的服务. (如下的nginx是docker的nginx镜像名称,不是服务名称)
# docker service create nginx 20) 创建一个指定name的服务
# docker service create --name my-nginx nginx 21) 创建一个指定name、run cmd的服务
# docker service create --name my-nginx nginx ping www.baidu.com 22) 创建一个指定name、version、run cmd的服务
# docker service create --name my-redis redis:3.0.6
# docker service create --name my-nginx nginx:1.8 /bin/bash 23) 创建一个指定name、port、replicas的服务
# docker service create --name my-nginx --replicas 3 -p 80:80 nginx 24) 为指定的服务更新一个端口
# docker service update --publish-add 80:80 my-nginx 25) 为指定的服务删除一个端口
# docker service update --publish-rm 80:80 my-nginx 26) 将redis:3.0.6更新至redis:3.0.7
# docker service update --image redis:3.0.7 redis 27) 配置运行环境,指定工作目录及环境变量
# docker service create --name my-nginx --env MYVAR=myvalue --workdir /data/www --user my_user nginx ping www.baidu.com 28) 创建一个my-nginx的服务
# docker service create --name my-nginx nginx ping www.baidu.com 29) 更新my-nginx服务的运行命令
# docker service update --args "ping www.baidu.com" my-nginx 30) 删除一个服务
# docker service rm my-nginx 31) 在每个群组节点上运行web服务
# docker service create --name tomcat --mode global --publish mode=host,target=8080,published=8080 tomcat:latest 32) 创建一个overlay网络
# docker network create --driver overlay my-network
# docker network create --driver overlay --subnet 10.10.10.0/24 --gateway 10.10.10.1 haha-network 33) 创建服务并将网络添加至该服务
# docker service create --name my-test --replicas 3 --network my-network redis 34) 删除群组网络
# docker service update --network-rm my-network my-test 35) 更新群组网络
# docker service update --network-add haha-network my-test 36) 创建群组并配置cpu和内存
# docker service create --name my_nginx --reserve-cpu 2 --reserve-memory 512m --replicas 3 nginx 37) 更改所分配的cpu和内存
# docker service update --reserve-cpu 1 --reserve-memory 256m my_nginx 38) 创建服务时自定义的几个参数
指定每次更新的容器数量
--update-parallelism
指定容器更新的间隔
--update-delay
定义容器启动后监控失败的持续时间
--update-monitor
定义容器失败的百分比
--update-max-failure-ratio
定义容器启动失败之后所执行的动作
--update-failure-action
比如:创建一个服务并运行3个副本,同步延迟10秒,10%任务失败则暂停
# docker service create --name mysql_5_6_36 --replicas 3 --update-delay 10s --update-parallelism 1 --update-monitor 30s --update-failure-action pause --update-max-failure-ratio 0.1 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.36 39) 回滚至之前版本
# docker service update --rollback mysql
自动回滚
如果服务部署失败,则每次回滚2个任务,监控20秒,回滚可接受失败率20%
# docker service create --name redis --replicas 6 --rollback-parallelism 2 --rollback-monitor 20s --rollback-max-failure-ratio .2 redis:latest 40) 创建服务并将目录挂在至container中
# docker service create --name mysql --publish 3306:3306 --mount type=bind,src=/data/mysql,dst=/var/lib/mysql --replicas 3 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.36
需要注意使用bind绑定宿主机目录会带来的风险
- 绑定的主机路径必须存在于每个集群节点上,否则会有问题;
- 调度程序可能会在任何时候重新安排运行服务容器,如果目标节点主机变得不健康或无法访问;
- 主机绑定数据不可移植,当你绑定安装时,不能保证你的应用程序开发方式与生产中的运行方式相同; 41) 添加swarm配置
# echo "this is a mysql config" | docker config create mysql - 42) 查看配置
# docker config ls 查看配置详细信息
# docker config inspect mysql 43) 删除配置
# docker config rm mysql 44) 添加配置
# docker service update --config-add mysql mysql 45) 删除配置
# docker service update --config-rm mysql mysql 46) 添加配置
# docker config create kevinpage index.html 47) 启动容器的同时添加配置(target如果报错,就使用dst或destination)
# docker service create --name nginx --publish 80:80 --replicas 3 --config src=kevinpage,target=/usr/share/nginx/html/index.html nginx
遇到问题记录:
Shell脚本实现---Swarm集群部署实例(Swarm Cluster)的更多相关文章
- shell脚本一键同步集群时间
shell脚本一键同步集群时间 弋嘤捕大 椿澄辄 ψ壤 茇徜燕 ㄢ交涔沔 阚龇棚绍 テ趼蜱棣 灵打了个寒颤也没有去甩脱愣是拖着 喇吉辔 秋北酏崖 琮淄脸酷 茇呶剑 莲夤罱 陕遇骸淫 ...
- Docker(二十一)-Docker Swarm集群部署
介绍 Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令.目前,Swarm ...
- 集群容器管理之swarm ---集群部署
集群部署及节点管理 使用swarm前提: Docker版本1.12+ 集群节点之间保证TCP 2377.TCP/UDP 7946和UDP 4789端口通信 节点规划: 操作系统:centos7.4.1 ...
- Docker Swarm集群部署
一.系统环境 1)服务器环境 节点名称 IP 操作系统 内核版本 manager 172.16.60.95 CentOs7 4.16.1-1.el7.elrepo.x86_64 node-01 172 ...
- ELK集群部署实例(转)
转载自:http://blog.51cto.com/ckl893/1772287,感谢原博. 一.ELK说明 二.架构图 三.规划说明 四.安装部署nginx+logstash 五.安装部署redis ...
- shell脚本启动所有集群节点
#profile变量追加到.bashrc中 cat /etc/profile >> ~/.bashrc #start-all-cluster.sh 启动脚本 #!/bin/bash ec ...
- shell脚本监控k8s集群job状态,若出现error通过触发阿里云的进程监控报警
#!/bin/bash while [ 1 ] do job_error_no=`kubectl get pod -n weifeng |grep -i "job"|grep -c ...
- Redis集群部署(redis + cluster + sentinel)
概述说明 说明:本次实验采用c1.c2.c3三台虚拟机完成,每台服务器上都部署一个master.一个slave和一个sentinel.当某主节点的挂了,相应的从节点替位:当某主节点及主节点对应的从节点 ...
- 云计算之路-阿里云上-容器难容:优化自建 docker swarm 集群的部署
在上周六遭遇阿里云容器服务 swarm 版的故障之后,我们决定还是走自建 docker swarm 之路,只要不是阿里云底层的问题,我们相信会找到办法解决或避开自建 docker swarm 不稳定的 ...
随机推荐
- ASP.NET实现企业微信接入应用实现身份认证
目录 #需求场景 #参考 #具体步骤 1.获取access_token 2.构造网页授权链接 3.获取访问用户身份 #.Net具体代码 1.Web首页服务端代码 2.帮助类代码 #需求场景 一个.ne ...
- 秋天的第一份“干货” I Referer 防盗链,为什么少了个字母 R?
Referer 为什么叫 Referer?它代表什么意思?在诸多防盗链竞争中它有什么优势? 今天,在聊 Referer 防盗链之前,先来聊聊我们在现实生活中常常碰到的推荐人(Referrer)信息. ...
- Centos-归档文件或目录-tar
tar 对文件或者目录进行打包归档成一个文件,不是压缩 相关选项 -c 新建文件 -r 将目标文件追加都档案文件末尾 -t 列出归档文件中已经归档文件列表 -x 从归档文件中还原文件 -u 新文件更新 ...
- Java 实现截屏
操作系统:Windows 10 x64 参考:https://blog.csdn.net/weixin_40657079/article/details/83961708 1 import java. ...
- P 2568 GCD
对于这道题,我们要求的是 \(\displaystyle \sum_{i=1}^{N}\sum_{j = 1} ^{N}\) gcd(i,j)为质数 首先我们很容易想出来怎么打暴力,我们可以对于每个 ...
- 【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数
更多精彩内容,欢迎关注公众号:数量技术宅.探讨数据分析.量化投资问题,请加技术宅微信:sljsz01 投资股票指数相比个股的优势 我们在投资股票的时候,如果持仓集中在一只或者有限几只股票上,恰好不幸遇 ...
- CF724G 【Xor-matic Number of the Graph】
题目就不翻译了吧,应该写的很清楚了... 首先 \(,\) 不懂线性基的可以戳这里.知道了线性基\(,\) 但是从来没有写过线性基和图论相结合的\(,\) 可以戳这里. 好\(,\) 点完了这些前置技 ...
- shell-的变量-局部变量
1. 定义本地变量 本地变量在用户当前的shell生产期的脚本中使用.例如,本地变量OLDBOY取值为ett098,这个值只在用户当前shell生存期中有意义.如果在shell中启动另一个进程或退出, ...
- 2440启动流程 <转载>
韦东山 博客园 首页 订阅 管理 2440启动过程分析 2440启动过程分析 2440启动过程算是一个难点,不太容易理解,而对于2440启动过程的理解,影响了后面裸机代码执行流程的分析,从而看出2 ...
- 多测师讲解_ 高级自动化测试selenium_001基本学习
高级自动化测试python+selenium教程手册 --高级讲师肖sir 第 1 章webdriver 环境搭建好了,我们正式学习 selenium 的 webdriver 框架,它不像 QTP 之 ...