Docker Swarm 集群部署笔记

简介: Docker Swarm 集群部署笔记

Docker Swarm 集群的一些概念



节点


swarm集群分为管理节点和工作节点,管理节点可以操作swarm命令控制swarm集群,工作节点是用于运行服务的节点,理论上管理节点也可以是工作节点,一样可以用于运行服务。


一般来说一个swarm集群需要两个以上的管理节点。

640.png


服务


在分布式集群应用中,应用的不同部分拆分成“服务”,服务在swarm集群中可部署在多个节点上,形成集群,可使用swarm命令动态扩展服务在swarm集群中运行的实例数量,以满足需求。

640.png


技术栈


技术栈是一组相关的服务,它们共享依赖项并且可以一起进行编排和扩展,比如我们的vipay和cash项目的各个服务,可使用compose.yml文件编排成vipay技术栈以及cash技术栈,并使用 docker stack deploy分别进行部署。技术栈也是swarm集群中层次结构的最高级别。


640.png


Docker Swarm 集群的命令栈



docker swarm: 集群管理,子命令有 init, join, leave, update

docker service: 服务管理,子命令有 create, inspect, update, remove, tasks

docker node:节点管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rm

docker network: 网络管理,子命令有connect,create,disconnect,inspect,ls,prune,rm

docker stack: 服务上层管理,子命令有deploy,ls,ps,rm,services

docker volume:数据卷管理,子命令有ls,inpsect,rm,create


以下是一些常用的命令操作:

# 创建服务
docker service create \  
  --image nginx \
  --replicas 2 \
  nginx 
# 更新服务
docker service update \  
  --image nginx:alpine \
  nginx 
# 删除服务
docker service rm nginx
# 减少服务实例(这比直接删除服务要好)
docker service scale nginx=0
# 增加服务实例
docker service scale nginx=5
# 查看所有服务
docker service ls
# 查看服务的容器状态
docker service ps nginx
# 查看服务的详细信息。
docker service inspect nginx


创建 Docker Swarm 集群步骤


安装docker


设置docker版本镜像仓库,从而可以轻松完成安装和升级任务:

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2


添加Docker源,始终需要使用stable镜像仓库进行更新docker版本:

$ sudo yum-config-manager \
--add-repo https://download.docker.com/linux/centos/docker-ce.repo


执行安装:

sudo yum makecache


安装Docker:

$ sudo yum install docker-ce


如果出现以下报错:

Downloading packages:
warning: /var/cache/yum/x86_64/7/base/packages/wget-1.14-13.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Retrieving key from http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
The GPG keys listed for the "CentOS-7 - Base - 163.com" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.
 Failing package is: wget-1.14-13.el7.x86_64
 GPG Keys are configured as: http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6


解决方法:

sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7


配置daemo.json


$ vim /etc/docker/daemon.json
{
  "registry-mirror": [
    "https://registry.docker-cn.com"
  ],
  "insecure-registries": [
    "172.17.10.127:5000"
  ]
}


以上配置目的添加一个私有库以及镜像加速器。


启动docker


$ sudo systemctl start docker


初始化一个swarm集群(后续添加节点该步骤省略)


$ sudo docker swarm init


节点加入集群


查看使用主节点的token添加工作节点到集群的命令:

$ sudo docker swarm join-token worker


查看使用主节点的token添加管理节点到集群的命令:

$ sudo docker swarm join-token manage


集群中加入一个节点:

$ sudo docker swarm join \
--token SWMTKN-1-69luztakii9ix7f5osezl0v6l2ibfzp1vqc0gbhcous63hm1fx-8p3vxanj97f2e0jflznihvl8f \
<HOSST>:<NAME>


创建 Docker 原生私有库



使用docker官方registry仓库镜像,直接在仓库服务器pull下镜像,docker run就可以创建一个私有仓库了


docker默认推送到私有库只能用https协议,在原有的基础上需要配置一个拥有权限认证的私有仓库:

# 创建仓库数据卷
$ sudo docker volume create registry
$ sudo docker run -d -p 5000:5000 \
-v registry:/var/lib/registry \
--restart=always \
--name registry registry


/etc/docker/daemon.json中加入以下内容:

{
  "registry-mirror": [
    "https://registry.docker-cn.com"
  ],
  "insecure-registries": [
    "仓库内网ip:端口"
  ]
}


在每个节点添加兼容私有仓库非 https 协议配置:

$ vim /etc/sysconfig/docker
OPTIONS='--insecure-registry 192.168.1.111:5000'


Docker Swarm 集群的可视化管理



在swarm集群中添加portainer可视化管理工具,先下载compose编排文件:

$ curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml


稍微修改一下文件,以适应我们的swarm集群,比如网络驱动,容器名称,端口等等。

deploy运行:

$ sudo docker stack deploy --compose-file=portainer-agent-stack.yml portainer


Docker Swarm 集群的负载均衡



单机模型:

同一主机docker容器间通过docker内置的虚拟网桥docker0通信, 如果需要跨主机通信, 那么就通过端口映射的方式.


跨主机模型:

通过vxlan网络协议实现, 简单来说就是在所有容器的上面一层,覆盖了一层网络,该网络可以使在集群中的容器像本地通信一样,所以 orverlay 网络模型也称之为覆盖网络, 容器本身并没有把端口映射到主机, 而是将端口暴露的事情交给覆盖网络去处理了.

docker的覆盖网络有个好处就是在集群下, 通过任意一个节点可以访问到对应的服务, 即使当前节点没有该服务实例, 这样也间接性地实现了节点间的负载均衡.


创建跨主机网络驱动:

$ sudo docker network create -d overlay mynet


Swarm集群服务的更新与版本回滚


更新执行命令: docker service update --images xxx:latest my_project

回滚执行命令: docker service update --rollback my_project

指定回滚版本号:docker service update --images xxx:latest my_project:<上一个版本>


镜像版本的一些规范



每次需要打包构建镜像名称:<仓库地址>/<服务名称>:<分支>-<时间戳>

再打包一个镜像名称:<仓库地址>/<服务名称>:<分支>-latest


这么做的好处是:

有时间戳的镜像版本作为回滚的作用,可通过命令 docker service update images 命令回滚到任意一个版本


无时间戳的镜像版本为当前运行的最新版本。每次镜像更新构建完后,默认运行该镜像。


使用 docker swarm 集群的好处



1.可动态调整服务的实例个数


当我们需要增加一个服务部署的实例个数时,我们不需要重新在一台机器里面做一些重复劳动性的工作了,我们只需动动手指头,就可以动态扩。


我直接可通过 docker swarm集群的管理界面工具上,找到相关服务,手动调整实例个数就ojbk了,当然你想逼格更高点,你直接去管理节点敲命令行也是ojbk的:

$ sudo docker service scale myService = 数量

我们以后就再也不用关心项目部署在哪台机了,它会自动随机分配部署到集群的任意一个节点,我们只需通过swarm集群,就可负载均衡地随机访问到任意一个实例。


2.可动态扩容


当我们集群内集群负载过高时,可以增加若干台机器,在每台加入机器装上docker,执行以下加入集群的命令,就可以加入集群,听从管理节点分配的工作。完全不需要在新增的机器上面做一些重复性劳动,你只需要安装docker,就这么任性。

docker swarm join --token SWMTKN-1-69luztakii9ix7f5osezl0v6l2ibfzp1vqc0gbhcous63hm1fx-8p3vxanj97f2e0jflznihvl8f 172.17.10.127:2377


3.一次打包,到处运行


这个也是docker官方的宣传口语,我们只需将所有的运行时依赖打包成一个镜像,就可以任性地到处运行了。测试运维小伙伴再也不需要重新将环境搭建一次了,人都会犯错的,你不能保证你搭建的环境跟我开发的环境是一致的,有时候就会出现我在sit环境部署的很好,一上uat就变火葬场的情况。用上docker,将会大大杜绝这种事情的发生。


4.自动化发版


jenkins监听到仓库对应分支的代码有改动,自动拉取代码,制作新镜像,执行远程命令:


$ sudo docker update --images <imagesname> <servicename>

将会自动更新该服务所有的实例,且不需要停机停服更新,完全可实现平滑升级,比如该服务有3个实例,那么可设置依次更新。


相关文章
|
2月前
|
测试技术 网络安全 数据安全/隐私保护
【Docker项目实战】使用Docker部署Mininote轻量级笔记工具
【4月更文挑战第7天】使用Docker部署Mininote轻量级笔记工具
161 2
|
2月前
|
Kubernetes Docker Python
《Docker 简易速速上手小册》第10章 朝着 Docker Swarm 和 Kubernetes 迈进(2024 最新版)
《Docker 简易速速上手小册》第10章 朝着 Docker Swarm 和 Kubernetes 迈进(2024 最新版)
55 0
|
2月前
|
运维 Linux Docker
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
|
2月前
|
存储 Kubernetes C++
【专栏】Kubernetes VS Docker Swarm了解两者特点,助力选取合适容器编排工具
【4月更文挑战第27天】对比Kubernetes和Docker Swarm:K8s在可扩展性和自动化方面出色,有强大社区支持;Swarm以简易用著称,适合初学者。选择取决于项目需求、团队技能和预期收益。高度复杂项目推荐Kubernetes,快速上手小项目则选Docker Swarm。了解两者特点,助力选取合适容器编排工具。
|
26天前
|
测试技术 Linux 数据库
【Docker项目实战】使用Docker部署Xnote轻量级笔记系统
【6月更文挑战第19天】使用Docker部署Xnote轻量级笔记系统
33 3
|
1月前
|
测试技术 Linux 项目管理
【Docker项目实战】使用Docker部署Note Mark笔记工具
【6月更文挑战第14天】使用Docker部署Note Mark笔记工具
30 4
|
2月前
|
监控 Docker 容器
【Docker 专栏】Docker Swarm 集群的扩展与缩容策略
【5月更文挑战第8天】本文探讨了Docker Swarm集群的扩展与缩容策略。集群扩展可提高性能、增强可用性和适应业务发展,可通过手动或自动方式实现。缩容则需考虑业务需求、资源利用率和节点状态,可手动或按策略执行。关键步骤包括添加/移除节点及任务迁移。注意数据同步、监控评估和测试验证。案例分析和总结强调了灵活管理对保持集群最佳状态的重要性。
【Docker 专栏】Docker Swarm 集群的扩展与缩容策略
|
2月前
|
Kubernetes 负载均衡 调度
【Docker 专栏】Docker Swarm 与 Kubernetes 的选型指南
【5月更文挑战第8天】Docker Swarm 和 Kubernetes 是两大容器编排工具,各有优势。Docker Swarm 简单易用,适合小到中型规模,与 Docker 生态系统集成紧密;而 Kubernetes 功能强大,扩展性好,适用于大规模、复杂场景。选择时需考虑团队技术能力、应用需求及现有技术栈。Kubernetes 学习曲线较陡,Docker Swarm 则较平缓。
【Docker 专栏】Docker Swarm 与 Kubernetes 的选型指南
|
2月前
|
负载均衡 安全 数据安全/隐私保护
【Docker专栏】Docker Swarm集群管理详解
【5月更文挑战第7天】Docker Swarm是Docker的原生集群管理工具,用于将多个Docker主机整合为虚拟主机。其主要特点是服务发现、负载均衡、自动恢复和扩展性。Swarm由Manager(负责管理与控制)和Worker(运行服务)节点组成。创建Swarm集群涉及初始化、添加Worker节点及查看集群状态。服务部署包括创建、更新、扩展和缩减。Swarm还支持滚动更新、健康检查、网络管理和安全加密。本文概述了Swarm的基本功能,鼓励读者进一步探索其高级特性。
【Docker专栏】Docker Swarm集群管理详解
|
2月前
|
Cloud Native 测试技术 数据库
【云原生之Docker实战】使用Docker部署flatnotes笔记工具
【5月更文挑战第17天】使用Docker部署flatnotes笔记工具
109 8