Docker swarm容器集群使用教程

简介

  • 本文讲解如何搭建docker-swarm集群,以及利用docker命令和portainer web管理工具来管理我们的服务集群,服务管理内容有:集群网络的管理与分配讲解,服务的创建,服务实例数的伸缩,服务滚动升级与回滚,集群节点分区,服务指定节点区域部署,服务状态的管理等等

本文内容有

  • 搭建docker-swarm集群
  • 管理集群中的机器节点
  • Docker网络管理
  • Docker swarm 服务Service管理
  • 安装portainer管理工具及汉化
  • 使用protainer对swarm集群进行可视化管理

参考文章

  • 原文地址

  • Dockerswarm官方教程

  • Docker Network 官方教程

  • Docker Swarm Service 官方教程


1、搭建docker-swarm集群

1.1 docker swarm集群简介

swarm 是docker官方提供的用于搭建容器服务集群的工具,从Docker 1.12 版本开始,swarm就集成到Docker中了,也就是说,新版本的docker安装完成后,默认就已经可以使用swarm了,swarm由docker官方开发并提供原生支持。

docker提供了服务容器化支持,而swarm则是进一步提供了管理整体服务容器能力的一套工具集,将以前单个独立的容器服务们进行了一个统一协调管理。

  • 准备5台虚拟机如下

    192.168.56.22	#管理节点1
    192.168.56.23	#管理节点2
    192.168.56.24	#管理节点3
    192.168.56.25	#工作节点1
    192.168.56.26	#工作节点2
    
  • 登录到各个节点上执行命令,为各个节点设置主机名

    hostnamectl set-hostname 192.168.56.22(manager) #管理节点1上执行
    hostnamectl set-hostname 192.168.56.23(manager) #管理节点2上执行
    hostnamectl set-hostname 192.168.56.24(manager) #管理节点3上执行
    hostnamectl set-hostname 192.168.56.25(worker)  #工作节点1上执行
    hostnamectl set-hostname 192.168.56.26(worker)  #工作节点2上执行
    
1.2 选择一台机器作为主节点,初始化集群信息
docker swarm init --advertise-addr ip地址
1.3 加入管理节点或者工作节点到集群
  • 查看节点加入token及示例

    docker swarm join-token [OPTIONS] (worker|manager)
    

    eg. docker swarm join-token manager #查看管理节点加入命令

  • 加入工作节点到集群

    docker swarm join --token SWMTKN-1-16ike2j01apbzkezzetlo595zb1g28nlcqw7m8ji6cdhdnw122-2damfdsog35oio872se9hy72s 192.168.56.22:2377
    
  • 加入管理节点到集群

    docker swarm join --token SWMTKN-1-16ike2j01apbzkezzetlo595zb1g28nlcqw7m8ji6cdhdnw122-80ki4l2ktno9w5azsz3rt2fps 192.168.56.22:2377
    

**注意:**如果加入集群失败,请检查机器间网络连通性以及防火墙端口是否已经打开

  • 管理节点降级为工作节点

    docker node demote manager1
    
  • 工作节点升级为管理节点

    docker node promote worker1
    
1.4 建立集群,机器节点间需要互相通信,需要开放集群内所有机器的2377、2375端口号

2377是集群管理端口,2375是docker服务监听端口

  • iptables防火墙

    iptables -A INPUT -p tcp --dport 2377 -j ACCEPT
    iptables -A INPUT -p tcp --dport 2375 -j ACCEPT
    iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
    iptables -A INPUT -p tcp --dport 4789 -j ACCEPT
    service iptables save 
    
  • firewalld防火墙

    firewall-cmd --zone=public --add-port=2377/tcp --permanent #TCP port 2377 用于集群管理节点间通信
    firewall-cmd --zone=public --add-port=2375/tcp --permanent #docker服务开启TCP远程管理容器功能,portainer可以使用该端口管理主机上的容器
    firewall-cmd --zone=public --add-port=7946/tcp --permanent #TCP 和 UDP 端口号 7946 用于节点间通信
    firewall-cmd --zone=public --add-port=4789/tcp --permanent #UDP port 4789 for overlay network traffic,也就是说docker如果使用overlay网络,该端口会用于主机间网络数据包的传输
    firewall-cmd --reload
    
  • docker主机开启TCP远程管理端口2375

    每台主机都开启一下,方便管理

    vi /lib/systemd/system/docker.service
    #ExecStart后添加【 -H tcp://0.0.0.0:2375 】
    ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
    #执行命令使它生效
    systemctl daemon-reload
    service docker restart
    #查看端口是否已经监听成功
    netstat -nlp |grep 2375
    

2、管理集群中的机器节点

  • 在管理节点上查看所有节点信息

    docker node ls
    
  • 更改节点的availablity状态

    swarm集群中node的availability状态可以为 active或者drain,其中:
    active	node可以接受来自manager节点的任务分派;
    Pause: 集群中该Node不可以被指派新的Task,但是其他已经存在的Task保持运行
    drain	node节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点)
    

    禁用管理节点部署服务,仅保留其管理节点的能力,避免业务服务影响管理节点

    docker node update --availability drain [NODE_ID]
    
  • 节点退出集群

    docker swarm leave [-f] #加上-f就是强制退出
    
  • 在管理节点上删除其他节点

    docker node rm [节点ID]
    
  • 给Node添加/删除标签元数据

    例如:我们需要把基础服务和业务服务拆分到不同的机器上部署,可以对部署基础服务的机器打标签base

    docker node update --label-add deploy-module=base
    

    删除节点上的标签

    docker node update --label-rm deploy-module=base
    

3、Docker网络管理

  • bridge 桥接网络模式

    • 为容器分配独立IP,具有很好的网络隔离性,服务不会跟宿主机上的服务发送端口冲突问题
    • 主机和容器间通过桥接的方式进行通信
    • 只能单机使用,不适合跨主机docker服务间通信
  • host 主机本地网络模式

    • docker容器共享主机的ip、端口号等等网络资源,如果单机部署
    • 只能单机使用,不适合跨主机docker服务间通信
    • 这种网络模式效率最高
  • overlay 集群网络模式

    • 多节点集群下统一分配服务独立ip
    • 跨机器节点上的docker服务间能互相通信
    • 支持主机节点和集群网络内的节点间互相通信
    • 支持节点间加密通信 注:windows机器节点不支持加密通信
    #创建自定义集群网络
    docker network create -d overlay my-overlay
    
    #创建可以与主机上其他docker服务通信的集群网络
    docker network create -d overlay --attachable my-attachable-overlay
    

    创建网络时,还可以指定ip地址范围、子网、网关等配置

    #创建加密通信且可以与主机上其他docker服务通信的集群网络
    docker network create --opt encrypted --driver overlay --attachable my-attachable-multi-host-network
    

    默认情况下,发布端口的群集服务会使用路由网格进行发布。当您连接到任何群集节点上的已发布端口时(无论它是否正在运行给定服务),您都将透明地重定向到正在运行该服务的工作器。实际上,Docker充当了集群服务的负载均衡器。使用路由网格的服务以虚拟IP(VIP)模式运行。甚至在每个节点上运行的服务(通过--mode global 标志)也使用路由网格。使用路由网格时,无法保证客户端请求哪些Docker节点服务。

    要绕过路由网格,可以通过将标志设置为来使用DNS循环(DNSRR)模式启动服务。您必须在服务之前运行自己的负载平衡器。在Docker主机上对服务名称进行DNS查询会返回运行该服务的节点的IP地址列表。配置您的负载平衡器以使用此列表并平衡节点之间的流量。--endpoint-mode``dnsrr

  • macvlan 容器网络本地化模式

    • 允许直接访问容器内的ip进行通信
    • 需要宿主机网络开启混杂模式
    • 支持主机节点和集群网络内的节点间互相通信
    • 性能高,不需要网络桥接转发数据包,与网卡直连

4、Docker swarm 服务Service管理

注意: 以下所有命令都需要在管理节点上运行,工作节点不参与管理

  • 创建服务

    docker service create --replicas 2 --network my-attachable-overlay --name nginx --publish published=80,target=80 nginx
    

    该nginx服务使用上面创建的overlay网络模式,且部署2个实例

  • 服务实例数的动态伸缩

    docker service scale [SERVICE_NAME]=3
    #或者
    docker service update --replicas=3 frontend
    
  • 服务版本发布

    docker service update --force --update-parallelism 1 --update-delay 15s --image linuxserver/nginx nginx
    
  • 服务版本回滚

    docker service update --rollback  nginx
    #或者
    docker service rollback nginx
    
  • 指定分区部署服务和均匀分布服务到某些节点

    #指定带某标签的节点部署
    docker service update --constraint node.labels.type==base nginx  #把nginx部署在基础服务节点上
    #指定优先某分区节点部署
     docker service update --placement-pref 'spread=node.labels.type' nginx #指定nginx需要均匀的分布在所有base节点上
    
  • 指定服务网络模式

    docker service update --network-add my-attachable-overlay nginx
    
  • 移除服务网络模式

    docker service update --network-rm my-attachable-overlay nginx
    
  • 查看服务日志

    docker service logs nginx --tail 111 -f
    
  • 查看所有服务

    docker service ls
    
  • 查看某服务下的任务状态

     docker service ps nginx
    
  • 删除服务

    docker service rm [SERVICE_NAME]
    

5、安装portainer管理工具及汉化

mkdir -p /data/workspace/service/portainer/data

mkdir -p /data/workspace/service/portainer/public

wget http://www.danyuanblog.com/file-gateway/mediaDownload.do?mediaId=5ec04f7b4c63637cd6ab5763 #下载汉化包

unzip public.zip #解压汉化包

mv public/* /data/workspace/service/portainer/public/ #移动汉化内容到需要挂载的资源目录下

docker run -d --restart always --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock  -v /data/workspace/service/portainer/data:/data  -v /data/workspace/service/portainer/public:/public portainer/portainer 

6、使用protainer对swarm集群进行可视化管理

  • 访问地址:http://192.168.56.22:9000打开web后台

  • 初次进入设置管理员登录密码,然后登录

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I9qmRgfE-1589663881385)(http://www.danyuanblog.com/file-gateway//ueditor/jsp/upload/image/20200517/1589662278830069192.png)]

    进入后:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oRXPFtYp-1589663881401)(http://www.danyuanblog.com/file-gateway//ueditor/jsp/upload/image/20200517/1589662351411086467.png)]

  • 添加节点到protainer中

    • 点击菜单: 端点 --> 添加端点

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qbPJOXAj-1589663881405)(http://www.danyuanblog.com/file-gateway//ueditor/jsp/upload/image/20200517/1589662572103078013.png)]

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-drhNSewL-1589663881410)(http://www.danyuanblog.com/file-gateway//ueditor/jsp/upload/image/20200517/1589662488794083232.png)]

  • 管理节点

    进入某个管理节点: 首页 --> 点击某个管理节点

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T5r6oaHv-1589663881415)(http://www.danyuanblog.com/file-gateway//ueditor/jsp/upload/image/20200517/1589662865359066177.png)]

    点击 Swarm菜单,进入到swarm集群节点管理界面,点击进入修改某个节点的状态、标签等信息

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MtGbsoDb-1589663881419)(http://www.danyuanblog.com/file-gateway//ueditor/jsp/upload/image/20200517/1589663053513004207.png)]

  • 查看/管理某个节点上容器列表

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9H1PcR9z-1589663881421)(http://www.danyuanblog.com/file-gateway//ueditor/jsp/upload/image/20200517/1589663109079010474.png)]

  • 查看/管理某个节点上服务列表

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1L9NYhLv-1589663881422)(http://www.danyuanblog.com/file-gateway//ueditor/jsp/upload/image/20200517/1589663166578030115.png)]

  • 管理服务

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LdccMUwp-1589663881424)(http://www.danyuanblog.com/file-gateway//ueditor/jsp/upload/image/20200517/1589663468555098274.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xx2RLOeT-1589663881427)(http://www.danyuanblog.com/file-gateway//ueditor/jsp/upload/image/20200517/1589663280960054683.png)]

  • 服务编排管理

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UvmajQu6-1589663881428)(http://www.danyuanblog.com/file-gateway//ueditor/jsp/upload/image/20200517/1589663533391011978.png)]

你可能感兴趣的:(docker)