Docker Swarm one-day Tour

本文介绍如何使用 Docker Swarm 构建高可用的集群架构。通过详细步骤展示如何初始化管理节点、加入工作节点及额外的管理节点,并创建服务。同时介绍了为防止单点故障而采用的 HA 机制。

服务器列表

IPhostnameswarm role
192.168.2.121ubuntumanager
192.168.2.122zipkinworker
192.168.2.123elasticworker
192.168.2.124tensorflowmanager

本次验证所使用的docker 版本如下:

kube@tensorflow:~$ docker version
Client:
 Version:      1.13.1
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 06:42:29 2017
 OS/Arch:      linux/amd64

Server:
 Version:      1.13.1
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 06:42:29 2017
 OS/Arch:      linux/amd64
 Experimental: false

本次验证的主要架构如下图所示:

这里写图片描述
为了防止Swarm Mange单点故障,引入了HA机制,Swarm Manage自身是无状态的,所以还是很容易实现HA的。 实现过程中采用主备方式,当主节点故障以后,会从新选主提供服务,选主过程中采用分布式锁实现,现在支持etcd、zookeeper、consul三种类型的分布式存储,用来提供分布式锁。 当备节点收到消息后,会将消息转发给主节点

Steps

kube@ubuntu:~$ docker swarm init --listen-addr 192.168.2.121:2377
Swarm initialized: current node (tlm00esjj8c794bnt27ohy6ax) is now a manager.

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

    docker swarm join \
    --token SWMTKN-1-1d0zbvscbn5n879a8d8gninqc0zrgio9eu21vvh4c3r48h22o1-a0iw8a8mkwwczrnxeedff57br \
    192.168.2.121:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
kube@ubuntu:~$ docker swarm join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-1d0zbvscbn5n879a8d8gninqc0zrgio9eu21vvh4c3r48h22o1-brgeenpout0mom3506l19ioqi \
    192.168.2.121:2377
kube@ubuntu:~$ docker swarm join-token -q  manager      //查看swarm manager的token
SWMTKN-1-1d0zbvscbn5n879a8d8gninqc0zrgio9eu21vvh4c3r48h22o1-brgeenpout0mom3506l19ioqi
kube@ubuntu:~$ docker swarm join-token -q  worker       //查看swarm worker的token
SWMTKN-1-1d0zbvscbn5n879a8d8gninqc0zrgio9eu21vvh4c3r48h22o1-a0iw8a8mkwwczrnxeedff57br
kube@zipkin:~$ docker swarm join \
 --token SWMTKN-1-1d0zbvscbn5n879a8d8gninqc0zrgio9eu21vvh4c3r48h22o1-a0iw8a8mkwwczrnxeedff57br \
192.168.2.121:2377

This node joined a swarm as a worker.
kube@elastic:~$ docker swarm join \
--token SWMTKN-1-1d0zbvscbn5n879a8d8gninqc0zrgio9eu21vvh4c3r48h22o1-a0iw8a8mkwwczrnxeedff57br \
192.168.2.121:2377

This node joined a swarm as a worker.
kube@tensorflow:~$ docker swarm join \
--token SWMTKN-1-1d0zbvscbn5n879a8d8gninqc0zrgio9eu21vvh4c3r48h22o1-brgeenpout0mom3506l19ioqi \
192.168.2.121:2377

This node joined a swarm as a manager
kube@ubuntu:~$ docker  node ls
ID                           HOSTNAME    STATUS  AVAILABILITY  MANAGER STATUS
2p25ctjidc4ep93x9dtc94o41    elastic     Ready   Active        
tlm00esjj8c794bnt27ohy6ax *  ubuntu      Ready   Active        Leader
xw25t5biu4lt22ctfiqyy98ls    tensorflow  Ready   Active        Reachable
y3tbcpks0hmatb2eylxo93516    zipkin      Ready   Active
kube@ubuntu:~$ docker service create --replicas 1 --name svc alpine ping docker.com
yagle957bftymp5r9f4irpqe5
kube@ubuntu:~$ docker service create --replicas 3 --name redis --update-delay 10s --update-parallelism 1 redis:3.2.7
xbfehf2v0pmx8onc6n0jvj145
### Docker Swarm 部署与管理及 `docker swarm join` 使用方法 Docker SwarmDocker 的原生集群管理工具,可以将多个 Docker 主机组成一个虚拟的 Docker 引擎,并提供服务发现、负载均衡、弹性扩展等功能。部署和管理 Docker Swarm 通常包括初始化集群、添加节点以及管理服务等操作。 #### 初始化 Swarm 集群 在主节点上运行以下命令以初始化一个新的 Swarm 集群: ```bash docker swarm init --advertise-addr <MANAGER_IP> ``` 其中 `<MANAGER_IP>` 是主节点的 IP 地址。该命令会输出一个用于加入其他节点的令牌和地址。 #### 加入工作节点到 Swarm 集群 当主节点初始化完成后,可以通过 `docker swarm join` 命令将工作节点或额外的管理节点加入到集群中。例如: ```bash docker swarm join --token SWMTKN-1-xxxxxx <MANAGER_IP>:2377 ``` 上述命令中的 `SWMTKN-1-xxxxxx` 是从主节点初始化时获得的令牌,而 `<MANAGER_IP>:2377` 是主节点的 IP 地址和端口 [^4]。 #### 管理 Swarm 服务 一旦集群建立起来,就可以开始部署和管理服务了。创建服务的基本命令如下: ```bash docker service create --name my_web --replicas 3 -p 80:80 nginx ``` 这个例子创建了一个名为 `my_web` 的服务,使用 Nginx 镜像,并且设置了 3 个副本,并映射了端口 80。 #### 查看节点和服务状态 要查看当前集群中的节点和服务的状态,可以使用以下命令: ```bash # 查看节点列表 docker node ls # 查看服务列表 docker service ls ``` #### 更新服务配置 如果需要更新已存在的服务配置,比如更改镜像版本或者调整副本数量,可以使用 `update` 子命令: ```bash docker service update --image nginx:latest --replicas 5 my_web ``` #### 删除服务 当不再需要某个服务时,可以将其删除: ```bash docker service rm my_web ``` 通过这些步骤,能够有效地部署和管理 Docker Swarm 服务,并利用 `docker swarm join` 命令来扩展集群规模。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值