设为首页 收藏本站
查看: 1145|回复: 0

[经验分享] Docker 集群Swarm创建和Swarm Web管理

[复制链接]

尚未签到

发表于 2018-5-27 10:43:54 | 显示全部楼层 |阅读模式
  关于Docker Swarm更多的介绍请查看《Docker管理工具-Swarm部署记录》
  一、环境配置
  1、安装环境
# cat /etc/redhat-release
CentOS Linux release
7.3.1611 (Core)
# docker version
Client:
Version:      
1.12.3
API version:  
1.24
Go version:   go1.
6.3
Git commit:   6b644ec
Built:        
OS
/Arch:      linux/amd64
Server:
Version:      
1.12.3
API version:  
1.24
Go version:   go1.
6.3
Git commit:   6b644ec
Built:        
OS
/Arch:      linux/amd64

  2、安装iptables,并关闭firewall防火墙,

# yum install iptables-services -y &&  systemctl enable iptables &&  service iptables save
# systemctl disable firewalld.service
# systemctl stop firewalld.service


  关闭firewall防火墙,如果不开启iptables nat,Docker容器将无法正常启动。

  •   运行 sudo iptables -L | grep DOCKER 若输出

    DOCKER     all  --  anywhere             anywhere
    Chain DOCKER (1 references)
      则没问题。
  •   否则,运行 iptables-save > /etc/sysconfig/iptables 并编辑添加相应的内容:


    • *nat
      :PREROUTING ACCEPT [
      27:11935]
      :INPUT ACCEPT [
      0:0]
      :OUTPUT ACCEPT [
      598:57368]
      :POSTROUTING ACCEPT [
      591:57092]
      :DOCKER
      - [0:0]
      -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
      -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
      -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
      COMMIT
      # Completed on Sun Sep
      20 17:35:31 2015
      # Generated by iptables
      -save v1.4.21 on Sun Sep 20 17:35:31 2015
      *filter
      :INPUT ACCEPT [
      139291:461018923]
      :FORWARD ACCEPT [
      0:0]
      :OUTPUT ACCEPT [
      127386:5251162]
      :DOCKER
      - [0:0]
      -A FORWARD -o docker0 -j DOCKER
      -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
      -A FORWARD -i docker0 ! -o docker0 -j ACCEPT
      -A FORWARD -i docker0 -o docker0 -j ACCEPT
      COMMIT
      # Completed on Sun Sep
      20 17:35:31 2015

  3、所有主机节点docker开启2375监听,docker版本不同,配置方式不一样
  vim /etc/sysconfig/docker

......
OPTIONS
='-H 0.0.0.0:2375 -H unix:///var/run/docker.sock'           //在OPTIONS参数项后面的''里添加内容

  或者

# cat  /usr/lib/systemd/system/docker.service  |grep ExecStart
ExecStart
=/usr/bin/dockerd   -H 0.0.0.0:2375  -H unix:///var/run/docker.sock

  重启docker服务

systemctl daemon-reload    ##使配置文件生效
systemctl restart docker


  二、Swarm安装和集群创建
  1、Swarm镜像下载

# docker pull swarm
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io
/swarm     latest              36b1e23becab        4 months ago        15.85 MB

  2、创建Swarm

# docker swarm init --advertise-addr  192.168.23.56:2377
Swarm initialized: current node (4cejtuairtof6d0wjq88merwb) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm
join \
--token SWMTKN-1-3kntv9pmgo1w2uk4yqk79v0lw0z35uw2k5j6rw7cns2v0xv3tn-2zqnn7e2zf1azaad2teeh9arw \
192.168.23.56:2377
To add a manager to this swarm, run
'docker swarm join-token manager' and follow the instructions.

  上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。
  其中,--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。
  3、添加集群节点

[root@kbsonlong ~]# docker swarm join \
>     --token SWMTKN-1-3kntv9pmgo1w2uk4yqk79v0lw0z35uw2k5j6rw7cns2v0xv3tn-2zqnn7e2zf1azaad2teeh9arw \
>     192.168.23.56:2377
This node joined a swarm as a worker.


  4、查看集群节点

[root@along ~]# docker node list
ID                           HOSTNAME     STATUS  AVAILABILITY  MANAGER STATUS
4cejtuairtof6d0wjq88merwb
*  along.party  Ready   Active        Leader
9388mi6e3fnk9l70g24cljhr5    kbsonlong    Ready   Active



[root@along ~]# docker node list
ID                           HOSTNAME     STATUS  AVAILABILITY  MANAGER STATUS
4cejtuairtof6d0wjq88merwb
*  along.party  Ready   Active        Leader
9388mi6e3fnk9l70g24cljhr5    kbsonlong    Ready   Active        
//将kbsonlong  节点下线。如果要删除node1节点,命令是"docker node rm --force kbsonlong  "
[root@along ~]# docker node update --availability drain kbsonlong  
kbsonlong
[root@along
~]# docker node list
ID                           HOSTNAME     STATUS  AVAILABILITY  MANAGER STATUS
4cejtuairtof6d0wjq88merwb
*  along.party  Ready   Active        Leader
9388mi6e3fnk9l70g24cljhr5    kbsonlong    Ready   Drain         
[root@along
~]#
//可以看到kbsonlong节点状态变为Drain,那么该节点就不会接受task任务分发,就算之前已经接受的任务也会转移到别的节点上。

//再次修改为active状态(及将下线的节点再次上线)
[root@along ~]# docker node update --availability active kbsonlong
kbsonlong
[root@along
~]# docker node list
ID                           HOSTNAME     STATUS  AVAILABILITY  MANAGER STATUS
4cejtuairtof6d0wjq88merwb
*  along.party  Ready   Active        Leader
9388mi6e3fnk9l70g24cljhr5    kbsonlong    Ready   Active        
[root@along
~]#

  ##关于Swarm更多的命令行操作,请查看《Docker管理工具-Swarm部署记录》
  三、Swarm 的Web管理(Portainer、Shipyard、Docerkui)
  1、Portainer安装

# docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
-d 参数以detach方式运行
-p 将容器工作端口映射至物理机端口 HOST端口:容器端口
-v 将容器目录挂载(映射)到物理机对应位置,这里指定通讯方式为sock
portainer
/portainer 为镜像名称
portainner 也支持用TCP通讯,启动命令
# docker run
-d -p 9000:9000 portainer/portainer -H tcp://<REMOTE_HOST>:<REMOTE_PORT>

DSC0000.png

DSC0001.png

  
DSC0002.png

  
DSC0003.png

DSC0004.png

DSC0005.png

DSC0006.png

DSC0007.png

DSC0008.png

DSC0009.png

DSC00010.png

DSC00011.png

优点

  • 支持容器管理、镜像管理
  • 轻量级,消耗资源少
  • 基于docker api,安全性高,可指定docker api端口,支持TLS证书认证。
  • 支持权限分配
  • 支持集群
缺点

  • 功能不够强大。
  • 容器创建后,无法通过后台增加端口。
  2、Shipyard
  一键安装脚本

curl -sSL https://shipyard-project.com/deploy | bash -s

  注意:由于Shipyard使用shipyard-proxy代理容器,所以需要把docker配置的tcp 0.0.0.0:2375关闭

[root@kbsonlong ~]# docker ps -a |grep shi
7122d3f37464        shipyard
/shipyard:latest       &quot;/bin/controller --de&quot;   About an hour ago   Up About an hour    0.0.0.0:8080->8080/tcp                           shipyard-controller
b350b117d76d        swarm:latest                  
&quot;/swarm j --addr 172.&quot;   About an hour ago   Up About an hour    2375/tcp                                         shipyard-swarm-agent
a7feb0759efe        swarm:latest                  
&quot;/swarm m --replicati&quot;   About an hour ago   Up About an hour    2375/tcp                                         shipyard-swarm-manager
3e784b0b2140        shipyard
/docker-proxy:latest   &quot;/usr/local/bin/run&quot;     About an hour ago   Up About an hour    0.0.0.0:2375->2375/tcp                           shipyard-proxy
49f9700f0811        alpine                        
&quot;sh&quot;                     About an hour ago   Up About an hour                                                     shipyard-certs
7fe4c0e821c1        microbox
/etcd:latest           &quot;/bin/etcd -addr 172.&quot;   About an hour ago   Up About an hour    0.0.0.0:4001->4001/tcp, 0.0.0.0:7001->7001/tcp   shipyard-discovery
e3750c5de7e2        rethinkdb                     
&quot;rethinkdb --bind all&quot;   About an hour ago   Up About an hour    8080/tcp, 28015/tcp, 29015/tcp                   shipyard-rethinkdb
[root@kbsonlong
~]#

  可以看到启动了7个Shipyard相关的容器
  1、shipyard-rethinkdb  :数据存放
  2、shipyard-discovery :自动发现
  3、shipyard-certs:认证
  4、shipyard-proxy:代理
  5、shipyard-swarm-manager: swarm管理节点
  6、shipyard-swarm-agent: swarm 工作节点 work
  7、shipyard-controller:shipyard控制台,即Web页面
  2、添加Swarm work节点,使用Shipyard时添加Swarm节点有点不一样

curl -sSL https://shipyard-project.com/deploy | ACTION=node DISCOVERY=etcd://10.0.1.10:4001 bash -s

ACTION
  This controls the action for the deployment. Available options are:

  • deploy: Deploy a new Shipyard instance
  • upgrade: Upgrade an existing instance (note: you will need to pass the same environment variables as when you deployed to keep the same configuration)
  • node: Add current Docker engine as a new Swarm node in the cluster
  • remove: Completely removes Shipyard
  DISCOVERY自动发现
  etcd://10.0.1.10:4001  管理节点上的自动发现服务
  :8080&quot;>:8080&quot;>:8080&quot;>http://<server_ip>:8080  admin/shipyard
DSC00012.png

DSC00013.png

DSC00014.png

DSC00015.png

DSC00016.png

优点:

  • 支持镜像管理、容器管理。
  • 支持控制台命令
  • 容器资源消耗监控
  • 支持集群swarm,可以随意增加节点
  • 支持控制用户管理权限,可以设置某个容器对某个用户只读、管理权限。
  • 有汉化版
缺点

  • 启动容器较多,占用每个节点的一部分资源,
  创建的Swarm集群无法使用Swarm service功能

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-481707-1-1.html 上篇帖子: JAVA项目如何通过Docker实现持续部署 下篇帖子: macvlan 网络隔离和连通
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表