1+x swarm
Posted hsgoose
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1+x swarm相关的知识,希望对你有一定的参考价值。
swarm
Swarm 介绍
Swarm 是 Docker 公司在 2014 年 12 月初发布的一套较为简单的工具,用来管理Docker 集群,它将一群 Docker 宿主机变成一个单一的虚拟的主机。 Swarm 使用标准的Docker API 接口作为其前端访问入口,换言之,各种形式的 Docker Client(dockerclient in Go, docker_py, docker 等)均可以直接与 Swarm 通信。 Swarm 几乎全部用 Go语言来完成开发,Swarm0.2 版本增加了一个新的策略来调度集群中的容器,使得在可用的节点上传播它们,以及支持更多的 Docker 命令以及集群驱动。 Swarm deamon 只是一个调度器(Scheduler)加路由器(router),Swarm 自己不运行容器,它只是接受docker 客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使 Swarm 由于某些原因挂掉了,集群中的节点也会照常运行,当 Swarm 重新恢复运行之后,它会收集重建集群信息。
Docker 的 Swarm(集群)模式,集成很多工具和特性,比如:跨主机上快速部署服务,服务的快速扩展,集群的管理整合到 docker 引擎,这意味着可以不可以不使用第三方管理工具。
分散设计,声明式的服务模型,可扩展,状态协调处理,多主机网络,分布式的服务发现,负载均衡,滚动更新,安全(通信的加密)等等。
Swarm 里的几个概念
1.节点
运行 Docker 的主机可以主动初始化一个Swarm集群或者加入一个已存在的Swarm集群,这样这个运行 Docker 的主机就成为一个 Swarm集群的节点(node)。
节点分为管理(manager)节点和工作(worker)节点。
管理节点用于Swarm集群的管理,docker swarm命令基本只能在管理节点执行(节点退出集群命令docker swarm leave可以在工作节点执行)。一个Swarm集群可以有多个管理节点,但只有一个管理节点可以成为leader,leader通过raft协议实现。
工作节点是任务执行节点,管理节点将服务(service)下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点
2.服务和任务
任务(Task)是Swarm中的最小的调度单位,目前来说就是一个单一的容器。
服务(Services)是指一组任务的集合,服务定义了任务的属性。服务有两种模式:
-
replicated services 按照一定规则在各个工作节点上运行指定个数的任务。
-
global services 每个工作节点上运行一个任务
两种模式通过docker service create的--mode参数指定。
3.主要管理命令集:
docker swarm:集群管理,子命令有 init, join, leave, update。(docker swarm --help 查看帮助)
docker service:服务创建,子命令有 create, inspect, update, remove, tasks。
(docker service--help 查看帮助)
docker node:节点管理,子命令有 accept, promote, demote, inspect, update,tasks, ls, rm。(docker node --help 查看帮助)
swarm安装
两个节点:
1.关闭防火强 关闭selinux
systemctl stop firewalld
systemctl enable firewalld
iptables -F
sed -i ‘s#^SELINUX=.*#SELINUX=disabled#g‘ /etc/selinux/config
reboot
2.开启内核转发
cat > /etc/sysctl.conf <<EOF
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
EOF
3.配置yum 源(1+x安装docker的yum源) 安装docker
[root@master ~]# cat /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[docker]
name=docker
baseurl=file:///root/Docker
gpgcheck=0
enabled=1
yum clean all
yum -y install docker-ce
systemctl start docker
systemctl enable docker
4.开启docker api
# vi /lib/systemd/system/docker.service
将
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
修改为
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
# systemctl daemon-reload
# systemctl restart docker
# ./image.sh ##导入镜像
说明:docker 1.13之后有了daemon.json 可以直接在里面配置开启api 注意需要删除启动文件的-H参数
cat > /etc/docker/daemon.json <<EOF
{
"hosts":["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]
}
EOF
删除/lib/systemd/system/docker.service 内的-H参数
ExecStart 把这里的-H去掉(和前面的host冲突 )
5.初始化集群
docker swarm init --advertise-addr 192.168.100.137
##--advertise-addr:添加地址 这个地址会作为manager
Swarm initialized: current node (jit2j1itocmsynhecj905vfwp) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token
SWMTKN-1-2oyrpgkp41z40zg0z6l0yppv6420vz18rr171kqv0mfsbiufii-c3ficc1qh782wo567uav1
6n3n 192.168.100.137:2377
To add a manager to this swarm, run ‘docker swarm join-token manager‘ and follow the
instructions.
6.node节点加入集群
docker swarm join --token
SWMTKN-1-2oyrpgkp41z40zg0z6l0yppv6420vz18rr171kqv0mfsbiufii-c3ficc1qh782wo567uav1
6n3n 192.168.100.137:2377
##如果token没了 可以用一下命令显示
docker swarm join-token worker
7.验证集群
[root@master ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
l4clx6z2x7vsdpb8d938o1lch * master Ready Active Leader 18.09.6
o7rdxxax4fvwo7e78xloh3x2d node1 Ready Active 18.09.6
swarm创建Portainer
Portainer 是 Docker 的图形化管理工具,提供状态显示面板、应用模板快速部署、容器
镜像网络数据卷的基本操作(包括上传和下载镜像、创建容器等操作)、事件日志显示、容
器控制台操作、Swarm 集群和服务等集中管理和操作、登录用户管理和控制等功能。功能
十分全面,基本能满足中小型企业对容器管理的全部需求
1.创建卷
docker volume create portainer_data
2.运行
docker service create
--name portainer
--publish 9000:9000
--replicas=1
--constraint ‘node.role == manager‘ ##将task启动在manager节点
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock
--mount type=volume,src=portainer_data,dst=/data portainer/portainer
-H unix:///var/run/docker.sock
nfgx3xci88rdcdka9j9cowv8g
overall progress: 1 out of 1 tasks
1/1: running
verify: Service converged
页面的登入 192.168.100.137:9000 需要创建新密码
几个命令
1+x文档里出现的命令
docker init
docker node ls
docker service create ##创建服务
docker service ls ##列出服务
docker service ps ##查看服务详细信息
docker service scale ##调节服务副本数(task)
docker service update ##更新容器
--publish-add 端口映射(暴露)
NFS 实现数据持久化
1+x用的是NFS数据持久化 这样可以保证不同节点调度数据不丢失
1.所有节点安装nfs node节点启动nfs和rpcbind就行
[root@master ~]#yum -y install nfs
[root@master ~]# vi /etc/exports
/goose 192.168.100.0/24(rw,sync,no_root_squash)
[root@master ~]# mkdir /goose
[root@master ~]# exportfs -rv ##这步一定需要打 不然后面service起不来(好像是 也可能是镜像调度策略问题)
exporting 192.168.100.0/24:/goose
[root@master ~]# systemctl start rpcbbind
[root@master ~]# systemctl start nfs
[root@master ~]# systemctl enable nfs
[root@master ~]# systemctl enable rpcbbind
说明:
exportfs
-r 重新挂载
-v 显示共享目录
2.创建nfs类型的卷(所有节点)
docker volume create --driver local --opt type=nfs --opt o=addr=192.168.100.137,rw --opt device=:/goose goose
3.创建服务
[root@master ~]# docker service create --name nfsnginx --publish 81:80 --mount type=volume,source=goose,destination=/app/share --replicas 2 nginx
oresw28pzvekoqzmlvgl2pr9y
overall progress: 2 out of 2 tasks
1/2: running [==================================================>]
2/2: running [==================================================>]
verify: Service converged
说明:好像这里存在镜像调度策略 latese(不存在镜像策略 如果失败 可以改下tag )
swarm manager 不作为worker node
默认配置下 master 也是 worker node,所以 master 上也运行了副本
取消master运行服务
[root@master ~]# docker node update --availability drain master
master
[root@master ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
l4clx6z2x7vsdpb8d938o1lch * master Ready Drain Leader 18.09.6
o7rdxxax4fvwo7e78xloh3x2d node1 Ready Active 18.09.6
尾记
swarm已经末路了 亲爸爸都已经全力适配k8s了
以上是关于1+x swarm的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript - 代码片段,Snippets,Gist
swarm测试极简指南bee从0.5.x升级到0.6.2的操作流程
docker swarm使用keepalived+haproxy搭建基于percona-xtradb-cluster方案的高可用mysql集群