Linux Docker容器 三剑客之Docker Swarm

一、什么是Docker Swarm

在这里插入图片描述
  Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/docker/swarm, 它是将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为其前端的访问入口,换言之,各种形式的Docker

Client(compose,docker-py等)均可以直接与Swarm通信,甚至Docker本身都可以很容易的与Swarm集成,这大大方便了用户将原本基于单节点的系统移植到Swarm上,同时Swarm内置了对Docker网络插件的支持,用户也很容易的部署跨主机的容器集群服务。

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。

从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。

Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受Docker客户端发来的请求,调度适合的节点来运行容器,这就意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,放Swarm重新恢复运行之后,他会收集重建集群信息。

二、Docker Swarm 基本结构图

在这里插入图片描述
在结构图可以看出 Docker Client使用Swarm对 集群(Cluster)进行调度使用。

上图可以看出,Swarm是典型的master-slave结构,通过发现服务来选举manager。manager是中心管理节点,各个node上运行agent接受manager的统一管理,集群会自动通过Raft协议分布式选举出manager节点,无需额外的发现服务支持,避免了单点的瓶颈问题,同时也内置了DNS的负载均衡和对外部负载均衡机制的集成支持
回到顶部

三、Swarm的几个关键概念

1.Swarm
集群的管理和编排是使用嵌入docker引擎的SwarmKit,可以在docker初始化时启动swarm模式或者加入已存在的swarm

2.Node
一个节点是docker引擎集群的一个实例。您还可以将其视为Docker节点。您可以在单个物理计算机或云服务器上运行一个或多个节点,但生产群集部署通常包括分布在多个物理和云计算机上的Docker节点。
要将应用程序部署到swarm,请将服务定义提交给 管理器节点。管理器节点将称为任务的工作单元分派 给工作节点。
Manager节点还执行维护所需群集状态所需的编排和集群管理功能。Manager节点选择单个领导者来执行编排任务。
工作节点接收并执行从管理器节点分派的任务。默认情况下,管理器节点还将服务作为工作节点运行,但您可以将它们配置为仅运行管理器任务并且是仅管理器节点。代理程序在每个工作程序节点上运行,并报告分配给它的任务。工作节点向管理器节点通知其分配的任务的当前状态,以便管理器可以维持每个工作者的期望状态。

3.Service
一个服务是任务的定义,管理机或工作节点上执行。它是群体系统的中心结构,是用户与群体交互的主要根源。创建服务时,你需要指定要使用的容器镜像。

4.Task
任务是在docekr容器中执行的命令,Manager节点根据指定数量的任务副本分配任务给worker节点

------------------------------------------使用方法-------------------------------------
docker swarm:集群管理,子命令有init, join, leave, update。(docker swarm --help查看帮助)
docker service:服务创建,子命令有create, inspect, update, remove, tasks。(docker service–help查看帮助)
docker node:节点管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rm。(docker node --help查看帮助)

node是加入到swarm集群中的一个docker引擎实体,可以在一台物理机上运行多个node,node分为:
manager nodes,也就是管理节点
worker nodes,也就是工作节点

1)manager node管理节点:执行集群的管理功能,维护集群的状态,选举一个leader节点去执行调度任务。
2)worker node工作节点:接收和执行任务。参与容器集群负载调度,仅用于承载task。
3)service服务:一个服务是工作节点上执行任务的定义。创建一个服务,指定了容器所使用的镜像和容器运行的命令。
service是运行在worker nodes上的task的描述,service的描述包括使用哪个docker 镜像,以及在使用该镜像的容器中执行什么命令。
4)task任务:一个任务包含了一个容器及其运行的命令。task是service的执行实体,task启动docker容器并在容器中执行任务。
回到顶部
四、Swarm的工作模式

  1. Node
    在这里插入图片描述
  2. Service
    在这里插入图片描述
  3. 任务与调度
    在这里插入图片描述
  4. 服务副本与全局服务
    在这里插入图片描述

五、Swarm的调度策略

Swarm在调度(scheduler)节点(leader节点)运行容器的时候,会根据指定的策略来计算最适合运行容器的节点,目前支持的策略有:spread, binpack, random.
1)Random
顾名思义,就是随机选择一个Node来运行容器,一般用作调试用,spread和binpack策略会根据各个节点的可用的CPU, RAM以及正在运
行的容器的数量来计算应该运行容器的节点。

2)Spread
在同等条件下,Spread策略会选择运行容器最少的那台节点来运行新的容器,binpack策略会选择运行容器最集中的那台机器来运行新的节点。
使用Spread策略会使得容器会均衡的分布在集群中的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器。

3)Binpack
Binpack策略最大化的避免容器碎片化,就是说binpack策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在
一个节点上面。
回到顶部

六、Swarm Cluster模式特性

1)批量创建服务
建立容器之前先创建一个overlay的网络,用来保证在不同主机上的容器网络互通的网络模式

2)强大的集群的容错性
当容器副本中的其中某一个或某几个节点宕机后,cluster会根据自己的服务注册发现机制,以及之前设定的值–replicas n,
在集群中剩余的空闲节点上,重新拉起容器副本。整个副本迁移的过程无需人工干预,迁移后原本的集群的load balance依旧好使!
不难看出,docker service其实不仅仅是批量启动服务这么简单,而是在集群中定义了一种状态。Cluster会持续检测服务的健康状态
并维护集群的高可用性。

3)服务节点的可扩展性
Swarm Cluster不光只是提供了优秀的高可用性,同时也提供了节点弹性扩展或缩减的功能。当容器组想动态扩展时,只需通过scale
参数即可复制出新的副本出来。

仔细观察的话,可以发现所有扩展出来的容器副本都run在原先的节点下面,如果有需求想在每台节点上都run一个相同的副本,方法
其实很简单,只需要在命令中将"–replicas n"更换成"–mode=global"即可!

复制服务(–replicas n)
将一系列复制任务分发至各节点当中,具体取决于您所需要的设置状态,例如“–replicas 3”。

全局服务(–mode=global)
适用于集群内全部可用节点上的服务任务,例如“–mode global”。如果大家在 Swarm 集群中设有 7 台 Docker 节点,则全部节点之上都将存在对应容器。

  1. 调度机制
    所谓的调度其主要功能是cluster的server端去选择在哪个服务器节点上创建并启动一个容器实例的动作。它是由一个装箱算法和过滤器
    组合而成。每次通过过滤器(constraint)启动容器的时候,swarm cluster 都会调用调度机制筛选出匹配约束条件的服务器,并在这上面运行容器。

------------------Swarm cluster的创建过程包含以下三个步骤----------------------
1)发现Docker集群中的各个节点,收集节点状态、角色信息,并监视节点状态的变化
2)初始化内部调度(scheduler)模块
3)创建并启动API监听服务模块

一旦创建好这个cluster,就可以用命令docker service批量对集群内的容器进行操作,非常方便!

在启动容器后,docker 会根据当前每个swarm节点的负载判断,在负载最优的节点运行这个task任务,用"docker service ls" 和"docker service ps + taskID"
可以看到任务运行在哪个节点上。容器启动后,有时需要等待一段时间才能完成容器创建。

七、Docker Swarm集群搭建

1.实验准备

三台虚拟机均安装好docker,并连接网络,selinux和firewalld均为关闭状态。

环境:rhel7.6

主机名作用ip
server1leader172.25.63.1
server2node172.25.63.2
server3node172.25.63.3

2.Docker Swarm集群初始化

在leader主机:

[root@server1 ~]# docker swarm init

 
 
  • 1

在这里插入图片描述
然后在各节点执行图中红框内的命令:

[root@server2 ~]# docker swarm join --token SWMTKN-1-3qn0jpan0xilzor9em02jsthkehupwhdkwu2byhzt3ovt8cdpl-94syme5ixjbtfupqgdw91zg7f 172.25.63.1:2377
This node joined a swarm as a worker.

 
 
  • 1
  • 2
[root@server3 ~]# docker swarm join --token SWMTKN-1-3qn0jpan0xilzor9em02jsthkehupwhdkwu2byhzt3ovt8cdpl-94syme5ixjbtfupqgdw91zg7f 172.25.63.1:2377
This node joined a swarm as a worker.

 
 
  • 1
  • 2

这时Docker Swarm集群就搭建好了,可以在leader主机查看各节点状态:

[root@server1 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
a3lrirdxzq5qg5xiayjpulouv *   server1             Ready               Active              Leader              19.03.8
1horcfn0p5zqaprr41zwfjsb6     server2             Ready               Active                                  19.03.8
tdyqxopemw03iz8x01baydo8j     server3             Ready               Active                                  19.03.8

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

注意:搭建节点时每个节点的docker版本最好一致。

八、Docker Swarm搭建负载均衡集群

1.创建一个覆盖网络,保证在不同主机上的容器互通

[root@server1 ~]# docker network create -d overlay mynet
2gwf2bt47hl17wr76whfcyfox

 
 
  • 1
  • 2

在这里插入图片描述

如果不创建的化默认使用ingress网络。

2.创建服务

[root@server1 ~]# docker service create --name my_cluster --network mynet --replicas 3 -p 80:80 ikubernetes/myapp:v1 

 
 
  • 1

其中ikubernetes/myapp:v1为测试镜像,可以直接从docker hub拉取。

在这里插入图片描述可以docker service ls查看所有服务。
在这里插入图片描述
可以使用docker service ps 服务名称查看服务状态。
在这里插入图片描述

3.对服务进行监控

在server1拉取监控镜像:

[root@server1 ~]# docker pull dockersamples/visualizer

 
 
  • 1

启动监控:

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

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

访问8080端口查看监控。

在这里插入图片描述

监控部署成功。

4.测试负载均衡

此时三个节点均可以访问到:

[root@foundation63 ~]# curl 172.25.63.1
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@foundation63 ~]# curl 172.25.63.2
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@foundation63 ~]# curl 172.25.63.3
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

访问一个节点:

[root@foundation63 ~]# curl 172.25.63.3/hostname.html
b521ba274159
[root@foundation63 ~]# curl 172.25.63.3/hostname.html
60bc1b92f09a
[root@foundation63 ~]# curl 172.25.63.3/hostname.html
18c240449f61
[root@foundation63 ~]# curl 172.25.63.3/hostname.html
b521ba274159
[root@foundation63 ~]# curl 172.25.63.3/hostname.html
60bc1b92f09a
[root@foundation63 ~]# curl 172.25.63.3/hostname.html
18c240449f61

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

节点ip后加hostname.html可以查看容器id,以上结果说明是三个容器在负载均衡提供服务。

5.拉伸服务容器个数
拉伸为6个:

[root@server1 ~]# docker service scale my_cluster=6

 
 
  • 1

此时查看监控:

在这里插入图片描述

拉伸成功。

注意:新加的节点也可以实现动态负载均衡。

同样也可以做缩减:

缩减为4个:

[root@server1 ~]# docker service scale my_cluster=4

 
 
  • 1

在这里插入图片描述

缩减成功。

6.滚动更新集群容器

为了实验效果,更新前先将容器拉伸为6个

[root@server1 ~]# docker service scale my_cluster=6

 
 
  • 1

更新:

[root@server1 ~]# docker service update --image ikubernetes/myapp:v2 --update-parallelism 3 --update-delay 5s my_cluster

 
 
  • 1

其中--update-parallelism 3表示一次更新3个容器,--update-delay 5s表示更新完一批后等待5s。

在这里插入图片描述
更新完成后访问查看版本:

[root@foundation63 ~]# curl 172.25.63.1
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>

 
 
  • 1
  • 2

可以看出版本从v1更新到了v2。

九、使用yml文件的形式创建集群

首先删除原来的集群:

[root@server1 ~]# docker service rm my_cluster 

 
 
  • 1

1.编辑docker-compose.yml文件

[root@server1 ~]# cd compose/
[root@server1 compose]# vim docker-compose.yml 
[root@server1 compose]# cat docker-compose.yml 
version: "3.7"
services:
  myapp:
    image: ikubernetes/myapp:v1
    networks:
      - mynet
    ports:
      - "80:80"
    deploy:
      replicas: 3
      update_config:
        parallelism: 2
        delay: 5s
      restart_policy:
        condition: on-failure
networks:
  mynet:

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2.创建集群

[root@server1 compose]# docker stack deploy -c docker-compose.yml my_cluster
Creating network my_cluster_mynet
Creating service my_cluster_myapp

 
 
  • 1
  • 2
  • 3

查看集群:
在这里插入图片描述

3.集群容器个数的拉伸

上述yml文件中设置了3个容器 也可以直接改成6个再次运行即可:

[root@server1 compose]# vim docker-compose.yml 
[root@server1 compose]# cat docker-compose.yml 
version: "3.7"
services:
  myapp:
    image: ikubernetes/myapp:v1
    networks:
      - mynet
    ports:
      - "80:80"
    deploy:
      replicas: 6
      update_config:
        parallelism: 2
        delay: 5s
      restart_policy:
        condition: on-failure
networks:
  mynet:
[root@server1 compose]# docker stack deploy -c docker-compose.yml my_cluster
Updating service my_cluster_myapp (id: 55467r6e50rt2d8p8b3gp1g8e)

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

查看监控:
在这里插入图片描述
拉伸成功

4.为集群添加卷

修改yml文件:

[root@server1 compose]# vim docker-compose.yml 
[root@server1 compose]# cat docker-compose.yml 
version: "3.7"
services:
  myapp:
    image: ikubernetes/myapp:v1
    networks:
      - mynet
    ports:
      - "80:80"
    volumes:
      - webdata:/usr/share/nginx/html
    deploy:
      replicas: 6
      update_config:
        parallelism: 2
        delay: 5s
      restart_policy:
        condition: on-failure
networks:
  mynet:
volumes:
  webdata:

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

更新集群:

[root@server1 compose]# docker stack deploy -c docker-compose.yml my_cluster

 
 
  • 1

查看卷的挂载路径:
在这里插入图片描述

在这里插入图片描述
在挂载目录下写入测试发布文件:

[root@server1 compose]# cd /var/lib/docker/volumes/my_cluster_webdata/_data
[root@server1 _data]# ls
50x.html  index.html
[root@server1 _data]# vim test.html
[root@server1 _data]# cat test.html 
6666666

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

同时将这个测试文件发送给其他节点:

[root@server1 _data]# scp test.html server2:/var/lib/docker/volumes/my_cluster_webdata/_data
test.html                                                                    100%    8     9.1KB/s   00:00    
[root@server1 _data]# scp test.html server3:/var/lib/docker/volumes/my_cluster_webdata/_data
test.html                                                                    100%    8     8.8KB/s   00:00   

 
 
  • 1
  • 2
  • 3
  • 4

访问测试文件:

[root@foundation63 ~]# curl 172.25.63.1/test.html
6666666
[root@foundation63 ~]# curl 172.25.63.1/test.html
6666666
[root@foundation63 ~]# curl 172.25.63.1/test.html
6666666
[root@foundation63 ~]# curl 172.25.63.1/test.html
6666666

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

说明卷挂载成功。

十、为集群添加资源限制

修改yml文件:

[root@server1 compose]# vim docker-compose.yml 
[root@server1 compose]# cat docker-compose.yml 
version: "3.7"
services:
  myapp:
    image: ikubernetes/myapp:v1
    networks:
      - mynet
    ports:
      - "80:80"
    volumes:
      - webdata:/usr/share/nginx/html
    deploy:
      replicas: 6
      update_config:
        parallelism: 2
        delay: 5s
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M
networks:
  mynet:
volumes:
  webdata:

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

其中limits表示容器资源限制,reservations表示节点最少满足这个条件才会把容器调度到结点上运行。

更新集群:

[root@server1 compose]# docker stack deploy -c docker-compose.yml my_cluster

 
 
  • 1

资源限制配置成功。

十一、为集群集成仓库

之前运行的集群使用的仓库是docker hub,当镜像比较大时创建速度会比较慢,因此我们可以为集群集成仓库,可以加快集群构建的速度。

删除集群:

[root@server1 compose]# docker stack rm my_cluster 
Removing service my_cluster_myapp
Removing network my_cluster_mynet

 
 
  • 1
  • 2
  • 3

1.启动之前配置的habor仓库

[root@server1 harbor]# docker-compose up -d

 
 
  • 1

habor仓库的配置可以参考:https://blog.csdn.net/qq_35887546/article/details/105411743

之后查看harbor仓库:
在这里插入图片描述
2.准备镜像

删除前面实验拉取的myapp镜像,重新拉取:

[root@server1 ~]# docker pull ikubernetes/myapp:v1
[root@server1 ~]# docker pull ikubernetes/myapp:v2

 
 
  • 1
  • 2

之后将两个镜像上传到harbor仓库:

[root@server1 ~]# docker tag ikubernetes/myapp:v1 reg.westos.org/library/myapp:v1
[root@server1 ~]# docker push reg.westos.org/library/myapp:v1
[root@server1 ~]# docker tag ikubernetes/myapp:v1 reg.westos.org/library/myapp:v2
[root@server1 ~]# docker push reg.westos.org/library/myapp:v2

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

也可以把监控镜像也上传上去:

[root@server1 ~]# docker tag dockersamples/visualizer reg.westos.org/library/visualizer:latest
[root@server1 ~]# docker push reg.westos.org/library/visualizer:latest

 
 
  • 1
  • 2

在所有节点将上面的监控以及myapp镜像全部删除,使服务从harbor仓库拉取而不是本机,注意在server1删除dockersamples/visualizer镜像前需要删除服务viz:

[root@server1 ~]# docker service rm viz

 
 
  • 1

之后就可以把镜像全部删除。

之后配置daemon文件使其从私有仓库拉取:

[root@server1 ~]# vim /etc/docker/daemon.json 
[root@server1 ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://reg.westos.org"]
}
[root@server1 ~]# systemctl daemon-reload 
[root@server1 ~]# systemctl restart docker

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

server2和server3也是同样的操作。

srever2之前做过仓库配置,故直接将证书复制给server3即可:

[root@server2 ~]# cd /etc/docker/
[root@server2 docker]# scp -r certs.d/ server3:/etc/docker/

 
 
  • 1
  • 2

同时也需要在server3写解析:

[root@server3 ~]# cat /etc/hosts
172.25.63.250   foundation63.ilt.example.com
172.25.63.1     server1 reg.westos.org
172.25.63.2     server2
172.25.63.3     server3

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

可以在server3测试拉取harbor仓库镜像成功。

3.修改yml文件

之后更改manager主机yml文件

[root@server1 compose]# vim docker-compose.yml 
[root@server1 compose]# cat docker-compose.yml 
version: "3.7"
services:
  myapp:
    image: myapp:v1
    networks:
      - mynet
    ports:
      - "8000:80"
    deploy:
      replicas: 3
      update_config:
        parallelism: 2
        delay: 5s
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M
networks:
  mynet:

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

主要是更改镜像名称和端口(防止端口冲突)

3.创建服务:
接下来就是创建服务:

[root@server1 compose]# docker stack deploy -c docker-compose.yml my_cluster

 
 
  • 1

在这里插入图片描述
创建成功。

4.滚动更新

也可以做滚动更新使其更新到v2版本:

[root@server1 compose]# vim docker-compose.yml 
[root@server1 compose]# cat -n docker-compose.yml | grep 5
     5	    image: myapp:v2
[root@server1 compose]# docker stack deploy -c docker-compose.yml my_cluster

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

之后查看各节点版本:
在这里插入图片描述
更新成功。

5.利用portainer 管理docker集群

首先新建一个harbor公开项目portainer:

在这里插入图片描述

之后将portainer镜像(可以从docker hub拉取)上传到私有仓库:

[root@server1 ~]# docker tag portainer/portainer:latest reg.westos.org/portainer/portainer:latest
[root@server1 ~]# docker tag portainer/agent reg.westos.org/portainer/agent:latest
[root@server1 ~]# docker push reg.westos.org/portainer/portainer:latest
[root@server1 ~]# docker push reg.westos.org/portainer/agent:latest

 
 
  • 1
  • 2
  • 3
  • 4

之后获取portainer-agent-stack.yml文件并运行服务:

[root@server1 ~]# cd portainer/
[root@server1 portainer]# ls
portainer-agent-stack.yml
[root@server1 portainer]# docker stack deploy -c portainer-agent-stack.yml portainer

 
 
  • 1
  • 2
  • 3
  • 4

浏览器访问http://172.25.63.1:9000/,输的入用户名和密码登陆(第一次登陆需要注册):
在这里插入图片描述

在这里插入图片描述

实现了对集群的监控:

在这里插入图片描述

也可以通过portainer创建服务。在这里插入图片描述

这里不做赘述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值