Docker入门系列(二)-Swarm集群管理

参考并整理三剑客的博客

Docker Machine

Docker Machine 是一种在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。

Docker Swarm简介

Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。Swarm 和 Kubernetes 比较类似,但是更加轻,具有的功能也较 kubernetes 更少一些。

从集群角度来说,一个 Swarm 由一个或多个 Docker 节点组成。这些节点可以是物理服务器、虚拟机、树莓派(Raspberry Pi)或云实例。唯一的前提就是要求所有节点通过可靠的网络相连。Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。

Docker Swarm部署

①机器环境(三台机器,centos系统)
IP:192.168.31.43 主机名:manager43 担任角色:swarm manager
IP:192.168.31.188 主机名:node188 担任角色:swarm node
IP:192.168.31.139 主机名:node139 担任角色:swarm node

②准备工作

1) 修改主机名
# 192.168.31.43  主机上执行
[root@manager43 ~]# hostnamectl set-hostname manager43
 
# 192.168.31.188 主机上执行
[root@node188 ~]# hostnamectl set-hostname node188
 
# 192.168.31.139 主机上执行
[root@node139 ~]# hostnamectl set-hostname node139
 
2)配置hosts文件(可配置可不配置)
[root@manager43 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
 
192.168.31.43 manager43
192.168.31.188 node188
192.168.31.139 node139
 
# 使用scp复制到node主机
[root@manager43 ~]# scp /etc/hosts root@192.168.31.188:/etc/hosts
[root@manager43 ~]# scp /etc/hosts root@192.168.31.139:/etc/hosts
 
3) 设置防火墙
关闭三台机器上的防火墙。如果开启防火墙,则需要在所有节点的防火墙上依次放行2377/tcp(管理端口)、7946/udp(节点间通信端口)、4789/udp(overlay 网络端口)端口。
[root@manager43 ~]# systemctl disable firewalld.service
[root@manager43 ~]# systemctl stop firewalld.service
 
4) 安装docker并配置加速器(在三台主机都要安装哟...)
[root@manager43 ~]# yum -y install docker
[root@node188 ~]# yum -y install docker
[root@node139 ~]# yum -y install docker

③创建Swarm并添加节点

1) 创建Swarm集群
[root@manager43 ~]# docker swarm init --advertise-addr 192.168.31.43
Swarm initialized: current node (z2n633mty5py7u9wyl423qnq0) is now a manager.
 
To add a worker to this swarm, run the following command:
 
# 这就是添加节点的方式(要保存初始化后token,因为在节点加入时要使用token作为通讯的密钥)
    docker swarm join --token SWMTKN-1-2lefzq18zohy9yr1vskutf1sfb2a590xz9d0mjj2m15zu9eprw-2938j5f50t35ycut0vbj2sx0s 192.168.31.43: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联系。命令的输出包含了其它节点如何加入集群的命令。
 
2) 查看集群的相关信息
[root@manager43 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
3jcmnzjh0e99ipgshk1ykuovd *   manager43           Ready               Active              Leader              18.06.0-ce
上面的命令是查看集群中的机器(注意上面node ID旁边那个*号表示现在连接到这个节点上)
 
3) 添加节点主机到Swarm集群
上面我们在创建Swarm集群的时候就已经给出了添加节点的方法
 
# 192.168.31.188 主机上执行
[root@node188 ~]# docker swarm join --token SWMTKN-1-2lefzq18zohy9yr1vskutf1sfb2a590xz9d0mjj2m15zu9eprw-2938j5f50t35ycut0vbj2sx0s 192.168.31.43:2377
This node joined a swarm as a worker.
 
# 192.168.31.139 主机上执行
[root@node139 ~]# docker swarm join --token SWMTKN-1-2lefzq18zohy9yr1vskutf1sfb2a590xz9d0mjj2m15zu9eprw-2938j5f50t35ycut0vbj2sx0s 192.168.31.43:2377
This node joined a swarm as a worker.
 
在manager43主机上我们可以看一下集群中的机器及状态
[root@manager43 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
3jcmnzjh0e99ipgshk1ykuovd *   manager43           Ready               Active              Leader              18.06.0-ce
vww7ue2xprzg46bjx7afo4h04     node139             Ready               Active                                  18.06.1-ce
c5klw5ns4adcvumzgiv66xpyj     node188             Ready               Active                                  18.06.1-ce

更改节点的availablity状态
swarm集群中node的availability状态可以为 active或者drain,其中:
active状态:node可以接受来自manager节点的任务分派;
drain状态:node节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点)

[root@manager43 ~]# docker node update --availability drain node139               
# 将node139节点下线(已分配的任务会转移到其他node)。如果要删除node139节点,命令是"docker node rm --force node139"
[root@manager43 ~]# docker node update --availability active node139  #再次修改为active状态(将下线的节点再次上线)

swarm中部署services相关指令官网

docker service create	#Create a new service
docker service inspect	#Display detailed information on one or more services
docker service logs	    #Fetch the logs of a service or task
docker service ls	    #List services
docker service ps	    #List the tasks of one or more services
docker service rm	    #Remove one or more services
docker service rollback	#Revert changes to a service’s configuration
docker service scale	# [动态扩容或者缩容:增减容器数量](https://www.cnblogs.com/zhujingzhi/p/9792432.html#_label6)
docker service update	#Update a service

多服务Swarm集群部署

结合compose和swarm进行多服务的编排
【单机实践】部署的服务有三个(nginx服务,visualizer服务,portainer服务) 都是集群 GUI 管理服务。docker service部署的是单个服务,使用docker stack进行多服务编排部署
docker-compose.yml

version: '3.8'
services:
  nginx:
    image: nginx
    ports: 
      - 8888:80
    deploy:
      mode: replicated
      replicas: 3
 
  visualizer:
    image: dockersamples/visualizer
    ports: 
      - "8080:8080"
    volumes: 
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager]
 
  portainer:
    image: portainer/portainer
    ports: 
      - "9000:9000"
    volumes: 
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager]
docker stack deploy -c docker-compose.yml deploy_deamon

Docker Swarm 容器网络

在Docker版本1.12之后swarm模式原生支持覆盖网络(overlay networks),可以先创建一个覆盖网络,然后启动容器的时候启用这个覆盖网络,
这样只要是这个覆盖网络内的容器,不管在不在同一个宿主机上都能相互通信。

swarm模式的覆盖网络包括以下功能
1)可以附加多个服务到同一个网络。
2)默认情况下,service discovery为每个swarm服务分配一个虚拟IP地址(vip)和DNS名称,使得在同一个网络中容器之间可以使用服务名称为互相连接。
3)可以配置使用DNS轮循而不使用VIP
4)为了可以使用swarm的覆盖网络,在启用swarm模式之间你需要在swarm节点之间开放以下端口:
5)TCP/UDP端口7946 – 用于容器网络发现
6)UDP端口4789 – 用于容器覆盖网络

步骤:
①创建overlay网络

docker network create --driver overlay --opt encrypted --subnet 10.10.19.0/24 ngx_net
# –-opt encrypted  默认情况下swarm中的节点通信是加密的。在不同节点的容器之间,可选的–opt encrypted参数能在它们的vxlan流量启用附加的加密层。
# --subnet 命令行参数指定overlay网络使用的子网网段。当不指定一个子网时,swarm管理器自动选择一个子网并分配给网络。

②将服务连接到overlay网络

docker service create --replicas 5 --network ngx_net --name my-test -p 80:80 nginx

容器编排进阶-Kubernetes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Docker是一个开源的容器化平台,它可以让开发者打包他们的应用程序和所有依赖项到一个轻量级的、可移植的容器中。Docker容器可以在任何环境中运行,从开发人员的笔记本上到生产环境中的物理机器和虚拟机中。 学习Docker有很多好处,首先,它可以帮助开发人员更快地构建、测试和部署应用程序。通过将应用和依赖项打包到一个容器中,开发人员可以确保在不同的环境中应用能够一致地运行。另外,Docker还可以提高系统的可移植性和可伸缩性,从而减少了在不同环境中部署和管理应用程序的成本和复杂性。 在了解Docker的基本概念之后,可以开始学习如何构建和管理Docker容器。这包括学习Docker镜像、容器和Dockerfile等概念,以及如何使用Docker命令行工具来管理容器和镜像。另外,还需要了解Docker Compose和Docker Swarm等工具,它们可以帮助开发人员更方便地管理多个容器和构建Docker集群。 最后,学习Docker也需要了解如何将Docker与持续集成/持续部署(CI/CD)工具和云平台集成,从而构建一个完整的DevOps工作流程。这样可以让开发团队更快速地交付高质量的应用,并及时地对应用进行更新和维护。 总之,Docker入门白皮书可以帮助开发人员了解容器化技术的基本概念和原理,以及如何在实际工作中应用Docker来提高开发效率和应用可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值