1+x swarm

Masli 2020-05-11

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)下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点

1+x  swarm

2.服务和任务

任务(Task)是Swarm中的最小的调度单位,目前来说就是一个单一的容器。

服务(Services)是指一组任务的集合,服务定义了任务的属性。服务有两种模式:

  • replicated services 按照一定规则在各个工作节点上运行指定个数的任务。

  • global services 每个工作节点上运行一个任务

两种模式通过docker service create的--mode参数指定。

1+x  swarm

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

[ ~]# 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.验证集群

[ ~]# 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  swarm

几个命令

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就行

[ ~]#yum -y install nfs
[ ~]# vi /etc/exports
/goose 192.168.100.0/24(rw,sync,no_root_squash)
[ ~]# mkdir /goose
[ ~]# exportfs -rv    ##这步一定需要打  不然后面service起不来(好像是  也可能是镜像调度策略问题)
exporting 192.168.100.0/24:/goose
[ ~]# systemctl start rpcbbind
[ ~]# systemctl start nfs
[ ~]# systemctl enable nfs
[ ~]# 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.创建服务

[ ~]# 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运行服务

[ ~]#  docker node update --availability drain master
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了

相关推荐

Linlitao / 0评论 2020-03-06