Docker Swarm 集群搭建和使用 —— 筑梦之路

news2024/11/25 4:26:56

简单介绍

swarm 集群由管理节点(Manager)和工作节点(Worker)构成。

管理节点:主要负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。诸如监控集群状态、分发任务至工作节点等操作。

工作节点:主要负责执行运行服务的任务。

 官方文档:docker swarm | Docker Documentation

Docker Swarm 是一个容器编排工具,用于管理Docker集群,具有以下特点:

1. 横向扩展和高可用性

Docker Swarm允许在多个节点之间对任务进行分配,从而实现横向扩展以满足更高的容量需求。Swarm还可以自动将容器重新调度到其他节点以确保是高可用性的。

2. 简单易用的命令行工具

Docker Swarm是通过一个命令行工具来操作,可以轻松轻松地创建、管理和部署容器化应用程序。有很少的学习曲线,即使你没有过多的专业技能,也很容易使用。

3. 内置安全性

Swarm内置了安全机制来保护容器和数据。Swarm将自动生成TLS证书,以确保Docker的所有通信都受到保护,从而保护容器不受未经授权的访问。

4. 健康检查

Swarm还可以进行健康检查,以确保您的应用程序在整个生命周期中一直运行并可用。如果有问题,Swarm将自动停止并重新启动无法正常运行的容器。

5. 服务

Docker Swarm可以将容器组织成一个服务,使它们能够以统一的方式管理和部署。通过创建服务,您可以轻松地扩展和更新应用程序。

这些特征使Docker Swarm更容易扩展、更加高效、更容易管理和更加安全,是一个适合在生产环境中部署容器化应用程序的有效工具。

环境规划

IP地址主机名称节点角色备注说明
192.168.200.172swarm-managermanager管理节点
192.168.200.173swarm-worker-1worker-1运行节点
192.168.200.174swarm-worker-2worker-2运行节点

docker-ce版本:24.0.2

# 二进制安装方式

wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.2.tgz

tar -zxf docker-24.0.2.tgz 

cp docker/* /usr/bin/

# 编辑service文件

cat > /usr/lib/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
  
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
asksMax=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
  
[Install]
WantedBy=multi-user.target
EOF

# 启动服务

systemctl daemon-reload

systemctl enable docker --now

管理节点初始化

#advertise-addr 来指定其他节点连接m0时的地址
#来指定其他节点连接m0时的地址 来指定其他节点连接m0时的地址
#来指定其他节点连接m0时的地址

1.初始化

docker swarm init --advertise-addr 192.168.200.172:2377 --listen-addr 192.168.200.172:2377
Swarm initialized: current node (wizx5rvc3k3lhgj2gfv64w820) is now a manager.

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

    docker swarm join --token SWMTKN-1-5as8zdan6v48td09riq0ja0o2j0m3fxvt4evteih544u8ifqxo-f3qulms23277siuioj80k8hbg 192.168.200.172:2377

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


2.查看节点信息
docker node ls

3.查看网络信息 docker-swarm 初始化时会创建一个类型为overlay的网络
docker network ls


4.查看docker信息
docker info

节点管理

节点的添加、删除、权限提升和降低

1. 添加节点


docker swarm join --token SWMTKN-1-5as8zdan6v48td09riq0ja0o2j0m3fxvt4evteih544u8ifqxo-f3qulms23277siuioj80k8hbg 192.168.200.172:2377


添加manager 节点 --token 会失效 时效为24小时 以后添加节点时 执行 docker swarm join-token 获取最新的token 标记文本

# 添加成为管理节点

docker swarm join-token manager

# 添加成为worker节点

docker swarm join-token worker

 2. 节点删除

# 脱离集群

#想要那个节点脱离集群就在那个节点下执行以下命令

docker swarm leave

# 删除已经脱离集群的work-02节点 
# p s:如果是多个manager节点中的其中一个节点需要先将节点降为worker节点才能删除

docker node rm work-02
# manager节点只能强制退出 manager退出后意味着整个swarm不复存在。

docker swarm leave --force

3.节点权限提升和降低

# 提升:将worker节点提升为manager节点,在manager节点执行如下命令:

docker node promote work-01

docker node ls

# 降低:将manager节点降低为worker节点,在manager节点执行如下命令:

docker node demote work-02

docker node ls


---------------------------------------------------------

# worker 变为manager

docker node update --role manager docker-n2

# manager 变为worker

docker node update --role worker docker-m3

图形界面

创建容器

# 1.启动方式1

docker run -itd --name visualizer -p 8099:8080 -e HOST=192.168.200.172 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer:latest

# 2.启动方式2
#或者使用以下命令  可以通过集群中所有ip+port进行访问

docker service create \
--name=viz \
--publish=8080:8080/tcp \
--constraint=node.role==manager \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
dockersamples/visualizer

# 3. portainer-ce

docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce

以上使用了两种不同的图形界面工具来查看

高可用集群说明

为了利用 swarm 模式的容错功能,可以根据组织的高可用性要求实现奇数个节点。 当有多个管理中心时,可以从一个管理中心节点的故障中恢复,而无需停机。

  • 三个管理器群可以容忍最多损失一个管理器。
  • 五个管理器群最多可以同时丢失两个管理器节点。
  • 七个管理器群最多可以同时丢失三个管理器节点。
  • 九个管理器群最多可以同时丢失四个管理器节点。
  • Docker 建议一个集群最多有七个管理器节点。 (添加更多管理器并不意味着可伸缩性或性能的提高。一般来说,情况恰恰相反。)

部署应用

以nginx为例

1. 部署nginx服务

docker run 容器启动,不具有扩缩容器。

docker service 服务启动,具有扩缩容,滚动更新

# 部署应用

docker service create -p 8888:80 --name nginx nginx

# 查看服务

docker service ls

# 查看容器

docker service ps nginx

# 查看详细信息

docker service inspect nginx

 2. 动态扩容nginx副本

docker service update --replicas 2 nginx

3. 自定义网络方式部署nginx

任意一个节点都可以访问

#在manager节点中创建overlay网络:
docker network create -d overlay wfnet

#删除docker网络
docker network rm NETWORK_ID

#查看docker 某网路
docker network inspect NETWORK_ID/name

#创建3个nginx:alpines容器的集群:
docker service create --name wf-register --network wfnet -p 90:80 --replicas 3 wf-register # (镜像名)

#在manager节点使用docker service ls 命令查看服务情况,worker节点无法查看:
docker service ls

#在manager或者worker节点都可以执行docker ps命令查看本虚拟机容器情况:
docker ps

#manager节点只用于管理集群,不希望部署服务。
docker node update --availability drain manager-01

#使用docker service scale wf-register=3命令将服务缩减/扩容为2个容器:
docker service scale wf-register=2
# 更新暴露的端口

docker service update --publish-add 8090:80 nginx

# 删除服务

docker service rm wf-register
# 一键部署nacos 示例


# 指定集群环境
docker service create \
--name wf-register \
--network wfnet \
-p 8848:8848 \
-p 9848:9848 \
-p 9555:9555 \
-p 9849:9849 \
--host=wf-mysql:192.168.200.173 \
-e MODE=cluster \
-e NACOS_SERVERS="192.168.200.172:8848 192.168.200.173:8848 192.168.200.174:8848" \
-e JVM_XMX=2g \
-e JVM_XMN=2g \
-e JVM_MS=128m \
-e JVM_MMS=320m \
--replicas 3 192.168.200.173:5000/wf-register

 stack命令

1. docker-compose.yml

#stack 最低支持版本为 3
version: "3"
  services:
    nginx-web: # 服务名称
      image: nginx:1.19.3-alpine  # 镜像名称
      container_name: nginx # 容器名称
      networks: 
        - nginx-net #指定网络
      restart: always #重启策略
      ports:
        - 81:80 #挂载端口
      deploy:
        replicas: 5  #生成实例数量
networks:
  nginx-net: #需要创建的网络名称
    driver: overlay #指定网络类型

 2.启动nginx

#在manager节点中创建docker-compose.yml文件。执行如下命令:

docker stack deploy nginx-stack --compose-file=docker-compose.yml 

或者是

docker stack deploy nginx-stack -c docker-compose.yml

#查看stack服务运行情况。执行如下命令:
docker stack services nginx-stack

#查看5个容器运行在哪个节点中。执行如下命令:

docker service ls #查看到NAME中的服务名为:nginx-stack_nginx-web

docker service ps nginx-stack_nginx-web

 常用命令

docker swarm init    初始化一个 swarm 群集
docker swarm join    加入群集作为节点或管理器
docker swarm join-token    管理用于加入群集的令牌
docker swarm leave    离开 swarm 群集
docker swarm unlock    解锁 swarm 群集
docker swarm unlock-key    管理解锁钥匙
docker swarm update    更新 swarm 群集

docker node demote    从 swarm 群集管理器中降级一个或多个节点
docker node inspect    显示一个或多个节点的详细信息
docker node ls    列出 swarm 群集中的节点
docker node promote    将一个或多个节点推入到群集管理器中
docker node ps    列出在一个或多个节点上运行的任务,默认为当前节点
docker node rm    从 swarm 群集删除一个或多个节点
docker node update    更新一个节点

docker service create    创建服务
docker service inspect    显示一个或多个服务的详细信息
docker service logs    获取服务的日志
docker service ls    列出服务
docker service rm    删除一个或多个服务
docker service scale    设置服务的实例数量
docker service update    更新服务
docker service rollback    恢复服务至update之前的配置

docker stack deploy部署新的堆栈或更新现有堆栈
docker stack ls列出现有堆栈
docker stack ps列出堆栈中的任务
docker stack rm删除一个或多个堆栈
docker stack services列出堆栈中的服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/627932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机视觉】使用 notebook 展示如何下载和运行 CLIP models,计算图片和文本相似度,实现 zero-shot 图片分类

文章目录 一、CLIP 模型二、准备三、加载模型四、查看图片处理器五、文本分词六、输入图片和文本&#xff0c;并可视化七、将图片和文字 encode 生成特征八、计算 cosine 相似度九、零样本进行图片分类十、编写函数进行图片分类十一、测试自己的函数十二、编写函数对多图片进行…

面对职业发展“迷茫期”除了抱怨焦虑我们还能做什么?

关注“软件测试藏经阁”微信公众号&#xff0c;回复暗号【软件测试】&#xff0c;即可获取氪肝整理的全套测试资源 Java和Python做自动化测试&#xff0c;哪个更有优势&#xff1f;这两个语言都是很流行的语言&#xff0c;所以从技术上很难说谁好谁不好的。因为要说好不好得看…

linux安装homeassistant(智能设备远程控制开源框架)

1、安装docker 先切换到root 用户&#xff0c;先安装一些基本环境&#xff1a; yum install -y yum-utils device-mapper-persistent-data lvm2添加阿里云软件源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo然后安装 D…

QT+OpenGL高级光照 Blinn-Phong和Gamma校正

QTOpenGL高级光照1 本篇完整工程见gitee:QtOpenGL 对应点的tag&#xff0c;由turbolove提供技术支持&#xff0c;您可以关注博主或者私信博主 Blinn-Phong 冯氏光照&#xff1a;视线与反射方向之间的夹角不小于90度&#xff0c;镜面光分量会变成0.0&#xff08;不是很合理&am…

死信队列小结

死信队列是RabbitMQ中非常重要的一个特性。简单理解&#xff0c;他是RabbitMQ对于未能正常消费的消息进行的 一种补救机制。死信队列也是一个普通的队列&#xff0c;同样可以在队列上声明消费者&#xff0c;继续对消息进行消费处理。 对于死信队列&#xff0c;在RabbitMQ中主要…

Spring 是什么?IoC 和 DI的区别

1. Spring 是什么?2. IoC是什么&#xff1f; 2.DI概念说明 1. Spring 是什么? 我们通常讲的Spring指的是Spring Framework(Spring框架),它是一个开源的框架,有着活跃而庞大的社区,这也是它之所谓经久不衰的原因。官方的解读是:Spring官网 翻译过来就是:Spring使Java编程对每…

学会这5个步骤,就能轻轻松松地获取代码覆盖率报告

目录 前言&#xff1a; 1、创建main函数的test文件 2、插桩方式编译源码 3、运行主服务 4、执行测试用例 5、优雅退出主服务&#xff0c;并生成覆盖率报告 前言&#xff1a; 代码覆盖率报告可以帮助我们了解测试用例的质量和覆盖程度。 小编前期所测项目多为go语言研发&…

《C++高级编程》读书笔记(一:C++和标准库速成)

1、参考引用 C高级编程&#xff08;第4版&#xff0c;C17标准&#xff09;马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门&#xff0c;笔记链接如下 21天学通C读书笔记&#xff08;文章链接汇总&#xff09; 1. C 基础知识 1.1 小程序 “hello world” // helloworld.cpp…

开源项目合集......

likeshop开源商城系统&#xff0c;公众号商城、H5商城、微信小程序商城、抖音小程序商城、字节小程序商城、头条小程序商城、安卓App商城、苹果App商城代码全开源&#xff0c;免费商用。 适用场景&#xff1a;B2C商城、新零售商城、社交电商商城、分销系统商城、小程序商城、商…

循环链表的创建

循环链表的介绍及创建&#xff08;C语言代码实现&#xff09; 点击打开在线编译器&#xff0c;边学边练 循环链表概念 对于单链表以及双向链表&#xff0c;其就像一个小巷&#xff0c;无论怎么样最终都能从一端走到另一端&#xff0c;然而循环链表则像一个有传送门的小巷&…

力扣 912. 排序数组

文章目录 一、题目描述二、题解1.快速排序2.堆排序3.二路归并排序 一、题目描述 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;nums [5,1,1…

精细消费 年轻人和父母的奇妙交汇

日本社会学家三浦展结合对日本“311”大地震后的社会观察&#xff0c;提出了“第四消费时代”&#xff0c;即人们在经历了消费社会充分的发展过程之后&#xff0c;社会上逐渐兴起了低欲望、乐于共享、重视环保的消费理念。 在当时&#xff0c;主流观点普遍认为中国还处于大众化…

JWT单点登录

单点登录 文章目录 单点登录零、用户模块内容以及设计一、问题的提出二、单点登录SSO1.1 什么是单点登录1.2 单点登录的技术实现机制 二、远程调用方式RPC三、JWT的使用3.1 session的使用原理3.2 JWT介绍3.3 JWT原理3.4 JWT的使用 四、CAS实现单点登录的原理四、CAS的安装和代码…

十二、进程间通信

目录 目录 零、前置知识 一、什么是进程间通信 &#xff08;一&#xff09;含义 &#xff08;二&#xff09;发展 &#xff08;三&#xff09;类型 1.管道 2.System V IPC 3.POSIX IPC 二、为什么要有进程间通信 三、怎么进行进程间通信 &#xff08;一&#xff09;…

Snipaste工具推荐

Snipaste Snipaste 不只是截图&#xff0c;善用贴图功能将帮助你提升工作效率&#xff01; 新用户&#xff1f; 截图默认为 F1&#xff0c;贴图为 F3&#xff0c;然后请对照着 快捷键列表 按一遍&#xff0c;体会它们的用法&#xff0c;就入门啦&#xff01; 遇到了麻烦&…

Java通过Ip2region实现IP定位

我们在一些短视频平台上可以看到,视频作者或评论区可以显示IP地址,这其实就是根据IP获取到的我们可以通过一些在线网站就可以看到我们当前的公网IP和IP定位,最近有个需求也需要通过请求获取客户端的IP和IP的定位,于是通过一系列的百度,最终选择使用Ip2region这个工具库来进行定…

flutter的自定义系列雷达图

自定义是flutter进阶中不可缺少的ui层知识点&#xff0c;这里我们来总结下&#xff1a; 在Flutter中&#xff0c;自定义绘制通常是通过使用CustomPaint和CustomPainter来实现的。 创建CustomPaint组件 首先&#xff0c;需要创建一个CustomPaint组件。CustomPaint是一个Widge…

MobPush 厂商通道申请指南

华为厂商申请 创建应用 登录华为开发者联盟&#xff0c;注册您的应用&#xff0c;在应用信息中获取APP ID和Client Secret 配置SHA256证书指纹 在华为开发者联盟配置SHA256证书指纹。获取及配置请参见华为官方文档配置AppGallery Connect 设置消息回执 集成华为厂商通道SDK…

带你了解二进制

目录 视频参考&#xff1a; 讲解&#xff1a;​编辑 运算&#xff1a; 1001&#xff08;二进制&#xff09; 9&#xff08;十位数&#xff09;1111&#xff08;二进制&#xff09; 15&#xff08;十位数&#xff09;11001&#xff08;二进制&#xff09; 25&#xff08;…

第二章 搭建TS环境

搭建 TypeScript 的开发环境。一个舒适、便捷且顺手的开发环境&#xff0c;不仅能大大提高学习效率&#xff0c;也会对我们日常的开发工作有很大帮助。 这一节我们就来介绍 VS Code 下的 TypeScript 环境搭建&#xff1a;插件以及配置项。对于 TS 文件的执行&#xff0c;我们会…