云原生之 Docker Swarm服务编排介绍及使用入门

简介: 云原生之 Docker Swarm服务编排介绍及使用入门

正文


一、Swarm介绍


Docker Swarm是管理跨节点容器的编排工具,相较于Docker Compose而言,Compose只能编排单节点上的容器,Swarm将一群Docker节点虚拟化为一个主机,使得用户只要在单一主机上操作就能完成对整个容器集群的管理工作。如果下载的是最新版的Docker,那么Swarm就已经被包含在内了,无需再安装。


Docker Swarm架构包含两种角色,manager和node,前者是Swarm Daemon工作的节点,包含了调度器、路由、服务发现等功能,负责接收客户端的集群管理请求,然后调度Node进行具体的容器工作,比如容器的创建、扩容与销毁等。 manager本身也是一个node。


Swarm工作示意图

3.webp.jpg

通常情况下,为了集群的高可用,manager个数>=3的奇数,node的个数则是不限制。


二、Swarm实例


2.1 准备工作


我们需要准备好三个节点,并在各自节点上安装好Docker Engine,才能进行接下来的实例搭建。


此处,我们选择购买阿里云的三个ECS云服务器,它们都是在一个地域里面,对应的私有地址IP和修改的host name分别是:


172.25.206.125 ————作为node1
172.25.206.126 ————作为node2
172.22.147.207 ————作为manager

我们首先需要重置root的登录密码,然后ssh登录后,确保相互之间可以ping通,然后再继续下面的操作。一般三台机器如果都在同一个区的话,使用私有地址相互之间肯定是联通的。


然后登录各个容器内部的命令行,进行Docker Engine的安装,安装完成后可以执行docker --version进行查看,务必确保全部安装成功以后再进入下面的步骤。


2.2 创建集群


在创建集群之前,我们使用docker node ls想查看下集群中节点的信息,反馈目前没有节点信息,并且当前节点并不是manager。


[root@manager ~]# docker node ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.


那么我们首先就在manager这个节点上执行如下操作,表示要将它设置为manager,并且设置自己的通讯IP为172.22.147.207。


[root@manager ~]# docker swarm init --advertise-addr 172.22.147.207
Swarm initialized: current node (s0eoali1x32ly22jo85ebeb0w) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-57msikozxxt44uxz5r8hihmakp4zh1cr89v7zlxhyc8b5iojkt-5ea8uh68jcuy8m6f9ma7x0zg5 172.22.147.207:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.


如上就完成了manager节点的设置,并且得到提示信息如下:


可以在其它节点上执行docker swarm join --token…来将该节点设置为工作node,并加入到这个swarm集群中;

可以在其它节点上执行docker swarm join-token manager来获取下一步执行指令,执行该指令后,该节点将设置为manager从节点加入到这个swarm集群中;

我们目前演示的是一个manager,两个工作node的模式,所以在另外两台node1和node2上执行第一个命令即可:


[root@node1 ~]# docker swarm join --token SWMTKN-1-57msikozxxt44uxz5r8hihmakp4zh1cr89v7zlxhyc8b5iojkt-5ea8uh68jcuy8m6f9ma7x0zg5 172.22.147.207:2377
This node joined a swarm as a worker.


如此,一个swarm集群就算搭建完成了。


2.3 使用集群


manager是我们管理集群的入口,我们的docker命令都是在manager上执行,node节点上是不能执行dockr命令的,这一点要十分牢记。


查看当前节点信息;


[root@manager ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
s0eoali1x32ly22jo85ebeb0w *   manager    Ready     Active         Leader           20.10.11
7kuhm78bs3zrfkm2n28ukje25     node1      Ready     Active                          20.10.11
io4qmqb87yzpmmo2mpblj48fp     node2      Ready     Active                          20.10.11

创建一个私有网络,供不同节点上的容器互通使用

[root@manager ~]# docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
45f6a352dcd2   bridge            bridge    local
2b71198e802e   docker_gwbridge   bridge    local
679154a40c18   host              host      local
1ntnd2ruk0tp   ingress           overlay   swarm
6d6218b5a31f   none              null      local
[root@manager ~]# docker network create -d overlay niginx_network
ldb1i69hxdsdo6un8yhaddhnv
[root@manager ~]# docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
45f6a352dcd2   bridge            bridge    local
2b71198e802e   docker_gwbridge   bridge    local
679154a40c18   host              host      local
1ntnd2ruk0tp   ingress           overlay   swarm
ldb1i69hxdsd   niginx_network    overlay   swarm
6d6218b5a31f   none              null      local

使用指定的网络部署一个服务;


[root@manager ~]# docker service create --replicas 1 --network niginx_network --name my_nginx -p 80:80 nginx:latest
q03ljoy94xkdeicb7d9tx422b
overall progress: 1 out of 1 tasks 
1/1: running   [==================================================>] 
verify: Service converged 

如上使用nginx:latest镜像创建了一个容器,容器名称为my_nginx,对外暴露80端口;


查看运行中的服务列表;


[root@manager ~]# docker service ls
ID             NAME       MODE         REPLICAS   IMAGE          PORTS
q03ljoy94xkd   my_nginx   replicated   1/1        nginx:latest   *:80->80/tcp

查看某个服务在哪个节点上运行;

[root@manager ~]# docker service ps my_nginx
ID             NAME         IMAGE          NODE      DESIRED STATE   CURRENT STATE           ERROR     PORTS
wf5h6u13zel6   my_nginx.1   nginx:latest   manager   Running         Running 2 minutes ago 

除此之外,我们还可以在每一台服务器上使用docker ps来看看运行了哪些容器;


动态扩缩容某个服务的容器个数;

[root@manager ~]# docker service scale my_nginx=4
my_nginx scaled to 4
overall progress: 4 out of 4 tasks 
1/4: running   [==================================================>] 
2/4: running   [==================================================>] 
3/4: running   [==================================================>] 
4/4: running   [==================================================>] 
verify: Service converged 
[root@manager ~]# docker service ls
ID             NAME       MODE         REPLICAS   IMAGE          PORTS
q03ljoy94xkd   my_nginx   replicated   4/4        nginx:latest   *:80->80/tcp
[root@manager ~]# docker service ps my_nginx
ID             NAME         IMAGE          NODE      DESIRED STATE   CURRENT STATE            ERROR     PORTS
wf5h6u13zel6   my_nginx.1   nginx:latest   manager   Running         Running 8 minutes ago              
kke3fl9sxdjm   my_nginx.2   nginx:latest   node1     Running         Running 27 seconds ago             
0ds3p18dmc9r   my_nginx.3   nginx:latest   node1     Running         Running 27 seconds ago             
32kyyibu9j12   my_nginx.4   nginx:latest   node2     Running         Running 25 seconds ago
使用update命令也是等价的:docker service update --replicas 3 my_nginx;


节点离开集群;

[root@node1 ~]# docker swarm leave
Node left the swarm.
[root@manager ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
s0eoali1x32ly22jo85ebeb0w *   manager    Ready     Active         Leader           20.10.11
7kuhm78bs3zrfkm2n28ukje25     node1      Down      Active                          20.10.11
io4qmqb87yzpmmo2mpblj48fp     node2      Ready     Active                          20.10.11


删除swarm集群;

[root@manager ~]# docker swarm leave
Error response from daemon: You are attempting to leave the swarm on a node that is participating as a manager. Removing the last manager erases all current state of the swarm. Use `--force` to ignore this message.
[root@manager ~]# docker swarm leave -f
Node left the swarm.

当最后一个manager节点离开,则swarm集群自动删除。


相关文章
|
11天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
72 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
21天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
84 24
|
28天前
|
Kubernetes Cloud Native API
云原生入门:从理论到实践的探索之旅
本文旨在为初学者提供一个关于云原生技术的全面介绍,包括其定义、核心原则、关键技术组件以及如何将这些概念应用于实际项目中。我们将通过一个简易的代码示例,展示如何在云原生环境下部署一个简单的应用,从而帮助读者更好地理解云原生技术的实践意义和应用价值。
|
23天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
107 6
|
2天前
|
运维 监控 Cloud Native
云原生之运维监控实践:使用 taosKeeper 与 TDinsight 实现对 时序数据库TDengine 服务的监测告警
在数字化转型的过程中,监控与告警功能的优化对保障系统的稳定运行至关重要。本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品之一,详细介绍了如何利用 TDengine、taosKeeper 和 TDinsight 实现对 TDengine 服务的状态监控与告警功能。作者通过容器化安装 TDengine 和 Grafana,演示了如何配置 Grafana 数据源、导入 TDinsight 仪表板、以及如何设置告警规则和通知策略。欢迎大家阅读。
18 0
|
30天前
|
运维 Cloud Native 开发者
云原生技术入门与实践
在云计算的浪潮中,云原生技术以其独特的优势和魅力吸引了越来越多的开发者和企业。本文将从云原生技术的基本概念、核心组件以及实际应用三个方面进行详细介绍,帮助读者更好地理解和掌握这一新兴技术。同时,文章还将分享一些实际案例和经验教训,让读者能够更深入地了解云原生技术的应用场景和发展趋势。
40 5
|
1月前
|
Prometheus 监控 Cloud Native
如何使用Prometheus监控Docker Swarm集群的资源使用情况?
还可以根据实际需求进行进一步的配置和优化,如设置告警规则,当资源使用超出阈值时及时发出警报。通过这些步骤,能够有效地使用 Prometheus 对 Docker Swarm 集群的资源进行监控和管理。
53 8
|
1月前
|
Prometheus 监控 Cloud Native
如何监控Docker Swarm集群的性能?
如何监控Docker Swarm集群的性能?
96 8
|
1月前
|
调度 开发者 Docker
Docker Swarm
Docker Swarm 为容器化应用的部署和管理提供了一种高效、可靠的方式,使开发者能够更轻松地构建和运行分布式应用。随着容器技术的不断发展,Docker Swarm 在企业级应用中的应用也将越来越广泛。
51 8
|
1月前
|
监控 Docker 容器
Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项
本文深入探讨了Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项,旨在帮助用户高效管理集群资源,适应业务变化,确保服务稳定性和资源优化。
51 6

热门文章

最新文章