【云原生 | 56】Docker三剑客之Docker Swarm高效使用

2023-06-29 09:00:00

🍁博主简介
        🏅云计算领域优质创作者
        🏅2022年CSDN新星计划python赛道第一名

        🏅2022年CSDN原力计划优质作者
        🏅阿里云ACE认证高级工程师
        🏅阿里云开发者社区专家博主

💊交流社区CSDN云计算交流社区欢迎您的加入!

目录

1.创建集群id 

2.配置集群节点 

3.配置管理节点 

4.查看集群节点列表 

5.使用集群服务

6.使用网络 

  👑👑👑结束语👑👑👑​


上一篇文章演示了基于Consul服务发现后端来配置一个本地Swarm集群。其中,Consul也可以被替换为Etcd、ZooKeeper等。
另外一个更方便的方式是直接使用Docker Hub提供的免费服务发现后端。下面使用这种方式来演示Swarm的主要操作,包括:
·create:创建一个集群;
·list:列出集群中的节点;
·manage:管理一个集群;
·join:让节点加入到某个集群。
注意:
使用Docker Hub的服务发现后端,需要各个节点能通过公网访问到Docker Hub的服务接口。

1.创建集群id 

在任意一台安装了Swarm的机器上执行swarm create命令来在Docker Hub服务上进行注册。Swarm会通过服务发现后端(此处为Docker Hub提供)来获取一个唯一的由数字和字母组成的token,用来标识要管理的集群:
$ docker run --rm swarm create
946d65606f7c2f49766e4dddac5b4365

注意返回的字符串,这是集群的唯一id,加入集群的各个节点将需要这个信息

2.配置集群节点 

在所有要加入集群的普通节点上执行swarm join命令,表示把这台机器加入指定集群当中。例如,某台机器的IP地址为192.168.0.2,将其加入我们刚创建的946d65606-f7c2f49766e4dddac5b4365集群,则可以使用如下命令:
$ docker run --rm swarm join --addr=192.168.0.2:2375 token://946d65606f7c2f49766
e4dddac5b4365
time="2015-12-09T08:59:43Z" level=info msg="Registering on the discovery
service every 20s..." addr="192.168.0.2:2375" discovery="token://
946d65606f7c2f49766e4dddac5b4365"
...
其中,--addr指定的IP地址信息将被发送给服务发现后端,用以区分集群不同的节点。manager服务必须要通过这个地址可以访问到该节点。
通过控制台可以看到,上述命令执行后,默认每隔20秒(可以通过-- heartbeat选项指定)会输出一条心跳信息。对于发现服务后端来说,默认如果超过60秒(可以通过--ttl选项指定)没有收到心跳信息,则将节点从列表中删除。
如果不希望看到输出日志信息,则可以用-d选项替换--rm选项,让服务后台执行。
执行swarm join命令实际上是通过agent把自己的信息注册到发现服务上,因此,此时对于后端的发现服务来说,已经可以看到有若干节点注册上来了。那么,如何管理和使用这些节点呢?这就得需要Swarm的manager服务了。

3.配置管理节点 

配置管理节点需要使用swarm manage命令,该命令将启动manager服务,默认监听到2375端口,所有对集群的管理都可以通过该服务接口进行。
大家可能注意到,manager服务默认监听的端口跟Docker服务监听端口是一样的,这是为了兼容其他基于Docker的服务,可以无缝地切换到Swarm平台上 来。
仍然在节点192.168.0.2进行操作。由于我们是采用Docker容器形式启动 manager服务,本地的2375端口已经被Docker Daemon占用,我们将manager服务监听端口映射到本地一个空闲的12375端口:
$ docker run -d -p 12375:2375 swarm manage token://946d65606f7c2f49766e4dddac5b4365
1e1ca8c4117b6b7271efc693f9685b4e907d8dc95324350392b21e94b3cffd18

可以通过docker ps命令来查看启动的swarm manager服务容器:

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e1ca8c4117b swarm "/swarm manage token:" 11 seconds ago Up 10 seconds
0.0.0.0:12375->2375/tcp jovial_rosalind
命令如果执行成功会返回刚启动的Swarm容器的ID。此时一个简单的Swarm集群就已经搭建起来了,包括一个普通节点和一个管理节点。

4.查看集群节点列表 

集群启动成功以后,用户可以在任何一台节点上使用swarm list命令查看集群中的节点列表。例如:
$ docker run --rm swarm list token://946d65606f7c2f49766e4dddac5b4365
192.168.0.2:2375
显示正是之前用swarm join命令加入集群的节点的地址。
我们在另外一个节点192.168.0.3上同样使用swarm join命令新加入一个节点:
$docker run --rm swarm join --addr=192.168.0.3:2375 token://946d65606f7c2f49766
e4dddac5b4365
time="2015-12-10T02:05:34Z" level=info msg="Registering on the discovery
service every 20s..." addr="192.168.0.3:2375" discovery="token:
//946d65606f7c2f49766e4dddac5b4365"
...
再次使用swarm list命令查看集群中的节点列表信息,可以看到新加入的节点:
$ docker run --rm swarm list token://946d65606f7c2f49766e4dddac5b4365
192.168.0.3:2375
192.168.0.2:2375

5.使用集群服务

那么,怎么使用Swarm提供的服务呢?实际上,所有Docker客户端可以继续使用,只要指定使用Swarm manager服务的监听地址即可。
例如,manager服务监听的地址为192.168.0.2:12375,则可以通过指定-H 192.168.0.2:12375选项来继续使用Docker客户端,执行任意Docker命令,例如ps、info、run等。
在任意节点上使用docker run来启动若干容器,例如:
$docker -H 192.168.0.2:12375:12375 run -d ubuntu ping 127.0.0.1
4c9bccbf86fb6e2243da58c1b15e9378fac362783a663426bbe7058eea84de46
使用ps命令查看集群中正在运行的容器:
$ docker -H 192.168.0.2:12375 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
4c9bccbf86fb buntu "ping 127.0.0.1" About a minute ago Up About a minute
clever_wright
730061a3801a registry:latest "docker-registry" 2 minutes ago
Up 2 minutes 192.168.0.2:5000->5000/tcp Host-1/registry_registry_1
72d99f24a06f redis:3.0 "/entrypoint.sh redis" 2 minutes ago
Up 2 minutes 6379/tcp Host-1/registry_redis_1,
Host-1/registry_registry_1/redis,Host-1/registry_registry_1/redis_1,Host-1
/registry_registry_1/registry_redis_1
输出结果中显示目前集群中正在运行的容器(注意不包括Swarm manager服务容器),可以在不同节点上使用docker ps查看本地容器,会发现这些容器实际上可能运行在集群中的多个节点上(由Swarm调度策略进行分配)。使用info查看所有节点的信息:
$ docker -H 192.168.0.2:12375 info
Containers: 18
Images: 36
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 2
Host-1: 192.168.0.2:2375
└ Containers: 15
└ Reserved CPUs: 0 / 4
└ Reserved Memory: 1 GiB / 4.053 GiB
└ Labels: executiondriver=native-0.2, kernelversion=3.16.0-43-generic,
operatingsystem=Ubuntu 14.04.3 LTS, storagedriver=aufs
Host-2: 192.168.0.3:2375
└ Containers: 3
└ Reserved CPUs: 0 / 8
└ Reserved Memory: 0 B / 16.46 GiB
└ Labels: executiondriver=native-0.2, kernelversion=3.16.0-30-generic,
operatingsystem=Ubuntu 14.04.3 LTS, storagedriver=aufs
CPUs: 12
Total Memory: 20.51 GiB
Name: 1e1ca8c4117b
结果输出显示这个集群目前只有两个节点,地址分别是192.168.0.2和192.168.0.3。
类似地,也可以通过Compose模板来启动多个服务。不过请注意,要想让服务分布到多个Swarm节点上,需要采用版本2的写法。

6.使用网络 

为了支持跨主机的网络,Swarm默认采用了overlay网络类型,实现上通过vxlan来构建联通整个Swarm集群的网络。
首先在集群中的所有节点上添加配置Docker daemon选项:
--cluster-store=<DISCOVERY_HOST:PORT> --cluster-advertise=<DOCKER_DAEMON_HOST:PORT>

以consul服务为例,可能类似:

--cluster-store=consul://<consulᴽ 务ൠ ൰ >:8500 --cluster-advertise=192.168.0.3:2375

之后重启Docker服务。首先创建一个网络:

$ docker -H 192.168.0.2:12375 network create swarm_network

查看网络,将看到一个overlay类型的网络:

$ docker -H 192.168.0.2:12375 network ls
NETWORK ID NAME DRIVER
6edf2d16ec97 swarm_network overlay
此时,所有添加到这个网络上的容器将自动被分配到集群中的节点上,并且彼此联通。

  👑👑👑结束语👑👑👑

更多推荐

【计算机网络】IP协议第二讲(Mac帧、IP地址、碰撞检测、ARP协议介绍)

IP协议第二讲1.IP和Mac帧2.碰撞检测2.1介绍2.2如何减少碰撞发生2.3MTU2.4一些补充3.ARP协议3.1协议介绍3.2报文格式分析1.IP和Mac帧IP(InternetProtocol)和MAC(MediaAccessControl)帧是计算机网络中两个不同层次的概念,它们在网络通信中扮演不同的角色

sed简单使用

sed(StreamEditor)流编辑器,对标准输出或文件逐行进行处理语法格式第一种形式:stdout|sed[option]"patterncommand"第二种形式:sed[option]"patterncommand"filesed的选项选项含义-n只打印模式匹配行-e直接在命令行进行sed编辑,默认选项-f编

质数距离(C++筛素数模板题)

给定两个整数L和U,你需要在闭区间[L,U]内找到距离最接近的两个相邻质数C1和C2(即C2−C1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对。同时,你还需要找到距离最远的两个相邻质数D1和D2(即D1−D2是最大的),如果存在相同距离的其他相邻质数对,则输出第一对。输入格式每行输入两个整数L和U,其中L

JavaScript速成课--面向对象程序设计

目录一.类的定义和实例化1.类的定义2.类的实例化二.访问和添加对象的属性和方法1.访问对象的属性和方法2.向对象添加对象属性和方法三.继承1.原型实现继承2.构造函数实现继承3.重新定义继承父类的方法一.类的定义和实例化在JavaScript中没有声明类的关键字,也没有对类访问的权限控制,JavaScript中使用函

力扣刷题:正则表达式匹配、

今日刷题一、正则表达式匹配题目链接:https://leetcode.cn/problems/regular-expression-matching/给你一个字符串s和一个字符规律p,请你来实现一个支持‘.’和‘*’的正则表达式匹配。‘.’匹配任意单个字符‘*’匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串

B树的插入和删除

1.B树的插入1.核心要求对m阶B树——除根节点外,结点关键字个数[m/2]−1≤n≤m−1[m/2]-1≤n≤m-1[m/2]−1≤n≤m−1子树0<关键字1<子树1<关键字2<子树2<…新元素一定是插入到最底层“终端节点”,用“查找”来确定插入位置.2.具体步骤若插入后结点关键字个数未超过上限,则无需做其他处理.在

PX4 固件常用 QGroundControl 参数设置

一、安全检查1.CBRK_USB_CHK(USB连接检查)检查USB连接飞控,若连接则不允许解锁,默认情况下有USB连接时是无法解锁的,如果需要插USB解锁,需要设置为1978482.CBRK_IO_SAFETY(安全开关检查)检查安全开关,安全开关未打开则不允许解锁,默认情况下需要打开安全开关才能解锁,如果需要禁用安

centos7安装安装python3.11,安装Home Assistant

一,下载并编译安装python3.111、python源码地址:https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz2、准备编译环境yumupdate-yyum-ygroupinstall"Developmenttools"yum-yinstallbzip

java基础-并发编程-CountDownLatch(JDK1.8)源码学习

CountDownLatch方法调用与类关系图一、初始化:publicCountDownLatch(intcount)publicCountDownLatch(intcount){if(count<0)thrownewIllegalArgumentException("count<0");this.sync=newSy

LVS负载均衡群集——LVS-NAT模式搭建和LVS-DR模式搭建

目录lvs工作模式1、NAT模式(VS-NAT)2、直接路由模式(VS-DR)3、IP隧道模式(VS-TUN)LVS调度算法LVS群集类型1)负载均衡群集LB2)高可用群集HA3)高性能运输群集HPCLVS-NAT模式搭建1、NFS部署2、web服务器部署(节点服务器)3、负载调度器配置4、使用客户端测试LVS-DR模

pod调度

定向调度通过标签选择器定向调度到node上此调度方式是硬性现在如果匹配不上会调度失败#在node上加标签klabelnodesdev4-workerzone=north#查看kgetnodedev4-worker--show-labels创建pod的yaml文件#通过标签选择器定向调度到指定nodeapiVersion

热文推荐