docker-swarm实现服务动态扩缩容

本文介绍了如何使用Docker Swarm创建和管理集群,包括初始化Swarm、节点加入与离开、高可用性测试,以及在Swarm模式下部署Nginx集群和服务的动态扩缩容操作。通过示例演示了常用Swarm服务命令,如`docker service create`、`docker service scale`等。
摘要由CSDN通过智能技术生成

docker swarm 是说明

简单粗暴一句话:Docker Swarm 是 Docker 的集群管理工具。

它将 Docker 主机池转变为单个虚拟 Docker 主机。
Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
可以配合 Jenkins 一块使用。

环境准备

  • linux 主机 4台 (我用的是centos7 虚拟机)
  • 4台机器必须按装docker 环境
  • 参考官方文档

docker基础命令学习资料

如果没有docker基础知识的可以参考一下内容学习docker基础命令。

docker swarm 初体验

初始 docker swarm

#查看命令参数 一定要学会看 帮助命令
[root@localhost ~]# docker swarm init --help

# 初始化,下边生成了一个token令牌 其他机器可以使用这个令牌加入集群
# 注意加入的集群一定要能互相 ping通
[root@localhost ~]# docker swarm init --advertise-addr 192.168.56.101
Swarm initialized: current node (qh4e0q69jgboh7xc8t4vk79s6) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-0xknntriyzpzrq4xy7pe8iv4e9nfp07rujvxdsx7y8uk520v2b-citxitsx6q4d8usgpoh30olc6 192.168.56.101:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

#如果我们没有保存这个token 也可以使用命令再次生成

生成swarm加入集群的token

#生成一个work节点加入的token
[root@localhost ~]# docker swarm join-token worker
#生成一个manger节点加入的token
[root@localhost ~]# docker swarm join-token manager

查看swarm下节点

[root@localhost ~]# docker node ls
ID                            HOSTNAME                STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
qh4e0q69jgboh7xc8t4vk79s6 *   localhost.localdomain   Ready               Active              Leader              19.03.12

加入swarm集群

[root@localhost ~]#  docker swarm join --token SWMTKN-1-0y6e92mikkgwjd1okg5wvvp41q0gmpm4fmylav4ksr1nvsqois-26019h0g7kf1slpdta4szlkvn 192.168.56.101:2377
Error response from daemon: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial tcp 192.168.56.101:2377: connect: no route to host"
这里发现无法加入,这里是防火墙搞的,如果是自己完的话直接关闭防火墙就行
# systemctl stop firewalld.service

如果是线上部署的话可以打开指定的端口: 2377、7946 、4789
TCP port 2377 for cluster management communications
TCP and UDP port 7946 for communication among nodes
UDP port 4789 for overlay network traffic
这是官方给出的端口 参考文档地址:
https://docs.docker.com/engine/swarm/swarm-tutorial/
#关闭防火墙以后 加入成功,其他两台机器一台 还是work模式加入
#另一台我们用manger模式加入

###服务器2
[root@localhost ~]#  docker swarm join --token SWMTKN-1-0y6e92mikkgwjd1okg5wvvp41q0gmpm4fmylav4ksr1nvsqois-26019h0g7kf1slpdta4szlkvn 192.168.56.101:2377
This node joined a swarm as a worker.

###服务器3
[root@localhost ~]# docker swarm join --token SWMTKN-1-0y6e92mikkgwjd1okg5wvvp41q0gmpm4fmylav4ksr1nvsqois-26019h0g7kf1slpdta4szlkvn 192.168.56.101:2377
This node joined a swarm as a worker.

###服务器4 --这里加入token 需要从第一台机器重新生成一个manger加入的token
用这个命令生成:docker swarm join-token manager  ##

docker swarm join --token SWMTKN-1-0y6e92mikkgwjd1okg5wvvp41q0gmpm4fmylav4ksr1nvsqois-41q5l7a7ems2xvw0o86yljcd9 192.168.56.101:2377
This node joined a swarm as a manager.

#查看节点信息
[root@localhost ~]# docker node ls
ID                            HOSTNAME                STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
32mu1pfbfqj2b7jl1cpaxjucu     localhost.localdomain   Ready               Active                                  19.03.12
bw2y1830zh8sovzmtjr4u23uh *   localhost.localdomain   Ready               Active              Reachable           19.03.12
hqej0hy156s4xcjjo77fvqhck     localhost.localdomain   Ready               Active              Leader              19.03.12
q7h5k3bdwene1frds1jrpb3uu     localhost.localdomain   Ready               Active                                  19.03.12

集群高可用性测试

测试让一台manger节点停止

我们上边设置的docker 集群使用的2work 2manger 如果我们将一个manger停掉会怎么样?
## 04机器
[root@localhost ~]# systemctl stop docker
## 01机器
[root@localhost ~]# docker node ls
Error response from daemon: rpc error: code = Unknown desc = The swarm does not have a leader. It's possible that too few managers are online. Make sure more than half of the managers are online.
发现我们的docker集群直接挂到了,了解过集群一致性的应该都知道
我们的集群一般要3台以上存活才能保证可用。
其实docker swarm使用了Raft协议 看图

官方网站地址:

https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenStack是一个开源的云计算平台,它提供基础设施即服务(IaaS)的功能,包括虚拟机、存储和网络资源。而Docker Compose是Docker官方的一个工具,用于定义和运行多容器应用程序的配置文件。它简化了在本地或生产环境中管理多个依赖于彼此的服务的流程。 如果你想在OpenStack环境中使用Docker Compose,通常的做法是: 1. **安装必要的组件**: - 安装DockerDocker Compose,因为它们在OpenStack的容器服务(如Kubernetes或Swarm)中不是默认提供的,你需要手动安装。 ```bash sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` 2. **创建Docker Compose.yml文件**: - 在OpenStack环境中,你可能需要为每个服务单独定义一个YAML文件,或者在一个YAML文件中配置多个服务及其依赖关系。 ```yaml version: '3' services: web: image: your-web-image:latest ports: - "80:80" db: image: your-db-image:latest ``` 3. **启动和管理服务**: - 使用`docker-compose up`命令来启动应用和服务,它们会根据YAML文件中的配置自动部署并连接。 ```bash docker-compose up -d ``` 4. **监控和扩展**: - 如果需要,你可以通过Docker Compose来监控资源使用情况,并根据需求进行扩展或缩容。 **相关问题**: 1. OpenStack如何支持容器化部署? 2. 在OpenStack中部署Docker时,如何管理网络和安全组? 3. 在使用Docker Compose时,如何处理服务间的依赖和数据卷共享?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值