首页 > 其他分享 >2023跟我一起学docker-swarm 教程:部署篇「上」

2023跟我一起学docker-swarm 教程:部署篇「上」

时间:2023-10-16 20:32:02浏览次数:49  
标签:service -- redis swarm master 2023 docker 节点

2023跟我一起学docker-swarm 教程:部署篇「上」

2023跟我一起学docker-swarm 教程:部署篇「上」_Docker

Swarm模式是用于管理一组Docker守护程序的高级功能。


ip规划:

Manager: Manager: 172.16.95.137
Node1: 172.16.95.138
Node2: 172.16.95.139

1 、manager节点初始化swarm

docker swarm init --advertise-addr 172.16.95.137

输出:

docker swarm init --advertise-addr 172.16.95.137                                                 
Swarm initialized: current node (57mvxsdn9qg2tq6aiz17et7ot) is now a manager.                                   
To add a worker to this swarm, run the following command:                                                       
    docker swarm join --token SWMTKN-1-544xekdg657cd57fecr4g43uxk7t5pjkvxkkcbitjnygxc0nyh-0f4o0ujh0vz4nm5gxcjh3y
wi3 172.16.95.137:2377                                                                                       
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

2 、运行docker info以查看集群的当前状态:

root@master:~# docker info                                                                                   
Client: Docker Engine - Community                                                                            
 Version:    24.0.5                                                                                           
 Context:    default                                                                                        
 Debug Mode: false                                                                                           
 Plugins:                                                                                                     
  buildx: Docker Buildx (Docker Inc.)                                                                         
    Version:  v0.11.2                                                                                         
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx                                                  
  compose: Docker Compose (Docker Inc.)                                                                      
    Version:  v2.20.2                                                                                         
    Path:     /usr/libexec/docker/cli-plugins/docker-compose                                                    
Server:                                                                                                      
 Containers: 1                                                                                              
  Running: 0                                                                                                
  Paused: 0                                                                                                   
  Stopped: 1                                                                                                 
 Images: 1                                                                                                  
 Server Version: 24.0.5                                                                                      
 Storage Driver: overlay2                                                                                     
  Backing Filesystem: extfs                                                                                   
  Supports d_type: true                                                                                       
  Using metacopy: false                                                                                       
  Native Overlay Diff: true                                                                                   
  userxattr: false                                                                                           
 Logging Driver: json-file                                                                                  
 Cgroup Driver: systemd                                                                                      
 Cgroup Version: 2                                                                                           
 Plugins:                                                                                                     
  Volume: local                                                                                               
  Network: bridge host ipvlan macvlan null overlay                                                           
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog                         
 Swarm: active                                                                                               
  NodeID: 57mvxsdn9qg2tq6aiz17et7ot                                                                           
  Is Manager: true                                                                                           
  ClusterID: qonn6p9e99zv95ekej78u66e0                                                                       
  Managers: 1                                                                                                 
  Nodes: 1                                                                                                   
  Default Address Pool: 10.0.0.0/8                                                                           
  SubnetSize: 24                                                                                             
  Data Path Port: 4789                                                                                       
  Orchestration:                                                                                             
   Task History Retention Limit: 5                                                                           
  Raft:                                                                                                       
   Snapshot Interval: 10000                                                                                   
   Number of Old Snapshots to Retain: 0                                                                       
   Heartbeat Tick: 1                                                                                         
   Election Tick: 10                                                                                         
  Dispatcher:                                                                                                 
   Heartbeat Period: 5 seconds                                                                               
  CA Configuration:                                                                                           
   Expiry Duration: 3 months                                                                                 
   Force Rotate: 0                                                                                           
  Autolock Managers: false                                                                                   
  Root Rotation In Progress: false                                                                           
  Node Address: 172.16.95.137                                                                                 
  Manager Addresses:                                                                                         
   172.16.95.137:2377                                                                                         
 Runtimes: io.containerd.runc.v2 runc                                                                         
 Default Runtime: runc                                                                                       
 Init Binary: docker-init                                                                                     
 containerd version: 3dce8eb055cbb6872793272b4f20ed16117344f8                                                 
 runc version: v1.1.7-0-g860f061                                                                             
 init version: de40ad0                                                                                       
 Security Options:                                                                                           
  apparmor                                                                                                   
  seccomp                                                                                                     
   Profile: builtin                                                                                           
  cgroupns                                                                                                   
 Kernel Version: 5.15.0-78-generic                                                                          
 Operating System: Ubuntu 22.04.2 LTS                                                                         
 OSType: linux                                                                                               
 Architecture: x86_64                                                                                         
 CPUs: 2                                                                                                     
 Total Memory: 3.787GiB                                                                                       
 Name: master                                                                                                 
 ID: cf23034e-99d6-4e37-a1cd-b27f39c0ed2e                                                                     
 Docker Root Dir: /var/lib/docker                                                                             
 Debug Mode: false                                                                                           
 Experimental: false                                                                                         
 Insecure Registries:                                                                                         
  127.0.0.0/8                                                                                                 
 Live Restore Enabled: false

3 、查看节点状态

root@master:~# docker node ls                                                                                 
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION             
57mvxsdn9qg2tq6aiz17et7ot *   master     Ready     Active         Leader           24.0.5

将节点添加到swarm集群中

使用管理器节点创建群后,我们就可以添加工作节点了。

  1. 打开一个终端,然后ssh进入要运行工作节点的机器。本教程使用名称master
  2. master节点运行docker swarm init输出生成的命令,在其他机器上执行一下命令并创建工作节点:
root@node1:~# docker swarm join --token SWMTKN-1-544xekdg657cd57fecr4g43uxk7t5pjkvxkkcbitjnygxc0nyh-0f4o0ujh0vz4nm5gxcjh3ywi3 172.16.95.137:2377
This node joined a swarm as a master.

如果我们忘记了命令, 则可以在 master 节点执行以下命令来查看相关命令:

root@master:~# docker swarm join-token worker                                                                 
To add a worker to this swarm, run the following command:                                                       
    docker swarm join --token SWMTKN-1-544xekdg657cd57fecr4g43uxk7t5pjkvxkkcbitjnygxc0nyh-0f4o0ujh0vz4nm5gxcjh3y
wi3 172.16.95.137:2377

3 、在 node2 节点重复执行 node1 上面的命令

4、在master节点运行的机器,并运行docker node ls命令以查看工作节点:

root@master:~# docker node ls                                                                                
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION             
57mvxsdn9qg2tq6aiz17et7ot *   master     Ready     Active         Leader           24.0.5                     
lqv1e6oa2hle33ff4xgxfslz3     node1      Ready     Active                          24.0.5                     
wwb5rc9nypj1e98wwr5qw99ye     node2      Ready     Active                          24.0.5

MANAGER列标识了集群中的管理器节点。此列node1node2中的空状态标识为worker节点。

将服务部署到swarm中

创建集群后,我们可以将服务部署到集群中。

  1. 打开一个终端,然后ssh进入运行管理器节点的机器。使用名为master的机器。
  2. 运行以下命令:
docker service create --replicas 1 --name helloworld alpine ping docker.com
  • docker service create命令创建服务。
  • --name标志为helloworld服务命名。
  • --replicas标志指定了1个运行实例的所需状态。
  • 参数alpine ping docker.com将服务定义为执行命令ping docker.com的Alpine Linux容器。

2023跟我一起学docker-swarm 教程:部署篇「上」_Docker_02

  1. 运行docker service ls以查看正在运行的服务列表:

检查集群上的服务

  1. 我们使用ssh进入运行master节点的机器。
  2. 运行docker service inspect --pretty <SERVICE-ID>,以易于阅读的格式显示有关服务的详细信息。

执行以下命令查看服务的详细信息

docker service inspect --pretty helloworld

2023跟我一起学docker-swarm 教程:部署篇「上」_docker_03

如果需要输出 json 格式的内容,执行命令 docker service inspect helloworld

  1. 查看服务具体运行在那个节点,我们可以执行以下命令查看:helloworld 为我们要查看的服务名称
    docker service ps helloworld

2023跟我一起学docker-swarm 教程:部署篇「上」_docker_04

从上图中我们可一看到 服务 helloworld 运行在节点 master 的机器中, 而服务 helloword 运行在 node1 的节点中.

helloworld 的服务运行在master的节点上,说明 master 节点也可以像 node 节点一样执行任务.

  1. 服务 helloword 运行在node1的节点上, 我们在 node1 的机器上执行命令 docker ps
root@node1:~# docker ps
CONTAINER ID   IMAGE           COMMAND             CREATED          STATUS          PORTS     NAMES
d3bbf47cf010   alpine:latest   "ping docker.com"   14 minutes ago   Up 14 minutes             helloword.1.nw2qt760d0tupaqqyhodtz2ko

可以看到在 node1 的机器上正在运行 helloword 的服务容器。

扩大集群中服务部署的规模

创建好集群我们就可以使用Docker CLI来扩展服务中的容器数量。在服务中运行的容器被称为“任务”。

  1. 我们使用ssh进入master节点的机器。
  2. 运行以下命令以更改在群中运行的服务的所需状态:
    helloworld 服务扩展为 5 个
docker service scale helloworld=5

2023跟我一起学docker-swarm 教程:部署篇「上」_json_05

  1. 执行完成后我们查看服务具体运行在那个节点
docker service ps helloworld

2023跟我一起学docker-swarm 教程:部署篇「上」_docker_06

可以看到,swarm 创建了 5 个新的任务,并扩展了总共 5 个的 docker 容器实例, 并分布在不同的节点上。

删除集群上运行的服务

如果我们部署的服务不需要了, 那么我们可以从集群中删除对应的服务。

1 、运行docker service rm helloworld以删除helloworld服务。

2023跟我一起学docker-swarm 教程:部署篇「上」_docker_07

执行完命令后我们在执行 docker service ls 查看服务,服务已经被我们删除了。

2、我们可以执行命令 docker service inspect helloworld 来查看服务的信息

2023跟我一起学docker-swarm 教程:部署篇「上」_docker_08

从图中执行的命令可以看出服务已经彻底被删除了。

3、当删除服务的命令执行完成后,任务容器也需要几秒钟才能清理完成,我们可以在节点上执行 docker ps 查看容器是否存在。

服务的滚动更新

在工作中我们需要经常的将我们的应用程序的新版本更新,以替换原有的老的版本的应用程序。在 Docker 的 swarm 中我们如何实现应用程序的滚动更新呢?

1 、比如我们需要部署新的一个 redis 服务到我们的swarm服务集群中。 并以10秒的更新延迟配置swarm。为了更直观的操作, 我们先部署一个较老版本的redis:6.0-alpine 服务,执行以下命令部署:

docker service create --replicas 3 --name redis --update-delay 10s redis:6.0-alpine

2023跟我一起学docker-swarm 教程:部署篇「上」_json_09

我们看到服务已经部署成功了。我们执行 docker service ls 结果显示已经将服务发布在所有的节点上了。

root@master:~# docker service ls   
ID             NAME      MODE         REPLICAS   IMAGE              PORTS                                     e2b2aoag8kr0   redis     replicated   3/3        redis:6.0-alpine                                             root@master:~#

部署命令参数说明:

  • --replicas : 表示我们部署的服务数量是几个,--replicas 3 表示部署 3 个
  • --update-delay : 表示任务更新的时间延迟,我们可以将时间设置为 TsTm,,Th,比如:5m10s 表示延迟 5 分钟 10 秒。
  • --update-parallelism 表示在更新时候的最大任务数量, 默认情况下调度程序一次只更新一个任务。

默认情况下,当单个任务的更新返回RUNNING状态时,调度程序会安排另一个任务进行更新,直到所有任务更新。如果在更新期间的任何时候任务返回FAILED,调度程序将暂停更新。我们可以使用docker service createdocker service update--update-failure-action标志来控制行为。

2、我们查看部署的 redis 服务情况:

docker service inspect --pretty redis

2023跟我一起学docker-swarm 教程:部署篇「上」_docker_10

3 、现在我将已经部署好的 redis 服务更新到一个较新的版本 redis:6.0.20-alpine,管理器根据UpdateConfig策略将更新应用于节点:

执行更新命令:docker service update --image redis:6.0.20-alpine redis

root@master:~# docker service update --image redis:6.0.20-alpine redis                                       
redis                                                                                                         
overall progress: 3 out of 3 tasks                                                                           
1/3: running   [==================================================>]                                         
2/3: running   [==================================================>]                                         
3/3: running   [==================================================>]                                         
verify: Service converged

我们在来查看下服务详细信息:

2023跟我一起学docker-swarm 教程:部署篇「上」_docker_11

image 已经变成了 redis:6.0.20-alpine , 已经更新成功.

我们在节点查看容器信息:

root@node2:~# docker ps                                                                                       
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS      NAMES 
f036280bde79   redis:6.0.20-alpine   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   6379/tcp   redis.1.
01wlu8r8z0jxmb4c2s399a6qo

同样,容器的镜像已经变成了 redis:6.0.20-alpine

调度程序更新说明:

  • 停止第一个任务。
  • 为停止的任务安排更新。
  • 启动更新任务的容器。
  • 如果任务的更新返回RUNNING,请等待指定的延迟期,然后开始下一个任务。
  • 如果在更新期间的任何时候,任务返回FAILED,请暂停更新。

4、 如果我们需要重启服务,可以执行重启服务的命令:

docker service update redis

root@master:~# docker service update redis                                                                   
redis                                                                                                         
overall progress: 3 out of 3 tasks                                                                           
1/3: running   [==================================================>]                                         
2/3: running   [==================================================>]                                         
3/3: running   [==================================================>]                                         
verify: Service converged

5、查看更新的信息:docker service ps redis

2023跟我一起学docker-swarm 教程:部署篇「上」_devops_12


标签:service,--,redis,swarm,master,2023,docker,节点
From: https://blog.51cto.com/demo007x/7893464

相关文章

  • 2023跟我一起学docker-swarm 教程:部署篇「下」
    2023跟我一起学docker-swarm教程:部署篇「下」停止Swarm集群上的一个节点目前我们所有的节点都ACTIVE的状态运行的,master可以将任务分配给任何节点,所以所有的节点都可以接收到任务。很多时候我们需要维护应用的时候,您需要将节点设置为DRAIN可用性。DRAIN状态的节点Maser阻止此类......
  • docker 搭建nextcloud。实现个人网盘nextcloud
    想要docker启用高可用的Nextcloud网站,我们需要安装一下docker-compose安装docker-composewgethttps://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64-O/usr/local/bin/docker-compose下载完成,添加运行权限chmod+x/usr/local/bin/dock......
  • 2023/10/16 学习笔记
    网络层协议与解析网络层的功能: 定义了基于IP协议的逻辑地址  连接不同的媒介类型 选择数据通过网络的最佳路径IP数据包格式: 注解:版本(4) 指IP协议版本。并且通过双方使用的版本必须一致,目前我们使用的是ipv4,表示为0100十进制是4首部长度(4) IP数据包的包头长......
  • 20231016打卡
    上午的课程是铁道技术认知。在这门课上,我们学习了铁道的基础知识,包括受电弓、道岔变道器等。通过老师的讲解和课堂讨论,我们对铁道的运行和设备有了更深入的了解。在课程中,我们还通过虚拟仿真系统在计算机上学习了如何具体进行变轨操作和模拟动车组的运行。此外,通过沙盘的实际操作,......
  • docker
    Docker的安装以ubuntu安装为例子1、如果安装过需要先卸载yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\......
  • linux学习记录(租云服务器及配docker环境) 10.16
    租到的服务器1、毛坯(1)框架(2)thrift2、服务(配好环境的服务器)(1)socket:比如数据库,获得一个IP地址+端口号访问(2)http:重中之重:把毛坯搭好,服务用现成的docker可迁移,且y总会给我们环境镜像,省掉配环境的过程 未来开发的主要工作环境在docker里面docker可配置ssh登录 ......
  • 从嘉手札<2023-10-16>
    一、商君书1)更法商鞅和甘龙、杜挚同秦孝公商量变法。后两者认为变法会动移已有的社会结构,“圣人不易民而教,知者不变法而治”“法古无过,循礼无邪”但商鞅(公孙鞅)认为,三代不同礼而亡,五霸不同法而霸,知者作法,愚者制焉。“夫常人安于故习,学者溺于所闻”“反古者未必可非,循礼者未足......
  • docker容器部署jenkins
    1.下载镜像dockerpulljenkins/jenkins2.创建用户和数据目录并授权useradd-u1000jenkins-M-s/sbin/nologinmkdir/data/jenkins/-pchown-Rjenkins:jenkins/data/jenkins/3.运行镜像dockerrun\--namejenkins\-p8080:8080-p50000:50000\--privilege......
  • 云原生周刊:CNCF 宣布 Cilium 毕业 | 2023.10.16
    开源项目推荐ReloaderReloader是一个Kubernetes控制器,用于监控ConfigMap和Secrets中的变化,并对Pod及其相关部署、StatefulSet、DaemonSet和DeploymentConfig进行滚动升级!SpegelSpegel在瑞典语中意为镜像,是一种无状态集群本地OCI注册镜像。Spegel使Kubernete......
  • 2023年第四季数据治理认证DAMA-CDGA/CDGP认证开始备考
    DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升......