一,概述
docker swarm 可以让 n 台机器组成一个集群,在这个集群中部署的服务 service,可以相互连接(overlay技术)、动态更新、动态扩缩容,灰度发布等!
例如,在swarm集群中,部署了2个副本的redis服务。当访问压力变大了,可动态添加多 n 个副本,以应对突发的流量。
1.1,重点概念
swarm:
swarm 用于集群的管理的编排,docker可以初始化一个swarm集群,分为 manager 管理节点 和 slaver 工作节点,所有操作在 manager 节点操作;
node:(节点)
就是一个docker节点,多个节点组成了一个网络集群;
service:(服务)
指一组任务的集合,服务定义了任务的属性。
task:(副本-replacated)
是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。
命令流程:
命令 -> 管理 -> api -> 调度 -> 工作节点(创建 task 容器维护创建)
主要掌握:搭建集群、会启动服务、动态管理容器。
1.2,节点如何工作
Docker Engine 1.12 引入了 swarm 模式,使您能够创建一个由一个或多个 Docker 引擎组成的集群,称为 swarm。swarm 由一个或多个节点组成:在 swarm 模式下运行 Docker Engine 1.12 或更高版本的物理或虚拟机。
有两种类型的节点:manager 管理节点和 workers 工作节点。
1.3,manager 管理节点
- 维护集群状态;
- 调度服务;
- 为群模式HTTP API 端点提供服务;
为了利用 swarm 模式的容错特性,Docker 建议您根据组织的高可用性要求实现奇数个节点。当您有多个管理器时,您可以在不停机的情况下从管理器节点的故障中恢复。
三个管理器的群体最多可以容忍一个管理器的损失。一个五管理器群可以容忍最大同时丢失两个管理器节点。一个N管理器集群最多可以容忍管理器的丢失 (N-1)/2。Docker 建议一个群最多有七个管理器节点。
1.4,worker 工作节点
工作节点也是 Docker 引擎的实例,其唯一目的是执行容器。Worker 节点不参与 Raft 分布式状态,不做出调度决策,也不为 swarm 模式 HTTP API 提供服务。
二,swarm 命令
2.1,docker swarm --help
swarm 集群管理相关命令
[root@iZwz9hdkhnyvzivpk6q3svZ ~]# docker swarm --help
Usage: docker swarm COMMAND
Manage Swarm
Options:
--help Print usage
Commands:
init Initialize a swarm
join Join a swarm as a node and/or manager
join-token Manage join tokens
leave Leave the swarm
unlock Unlock swarm
unlock-key Manage the unlock key
update Update the swarm
docker swarm init --help
[root@iZwz9hdkhnyvzivpk6q3svZ ~]# docker swarm init --help
Usage: docker swarm init [OPTIONS]
Initialize a swarm 初始化一个swarm集群
Options:
--advertise-addr string Advertised address (format: <ip|interface>[:port])
--autolock Enable manager autolocking (requiring an unlock key to start a stopped manager)
--cert-expiry duration Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)
--dispatcher-heartbeat duration Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)
--external-ca external-ca Specifications of one or more certificate signing endpoints
--force-new-cluster Force create a new cluster from current state
--help Print usage
--listen-addr node-addr Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
--max-snapshots uint Number of additional Raft snapshots to retain
--snapshot-interval uint Number of log entries between Raft snapshots (default 10000)
--task-history-limit int Task history retention limit (default 5)
其中,重点关注 --advertise-addr string 选项,广播地址,其它节点监控的地址,对应主节点的ip地址,可通过 ip addr 获取。
2.2,docker service --help
服务管理相关命令
[root@iZwz9hdkhnyvzivpk6q3svZ ~]# docker service --help
Usage: docker service COMMAND
Manage services
Options:
--help Print usage
Commands:
create Create a new service
inspect Display detailed information on one or more services
ls List services
ps List the tasks of a service
rm Remove one or more services
scale Scale one or multiple replicated services
update Update a service
scale:腻害了!动态扩容容器
update:更新服务
ps:查看服务列表
inspect:查看服务详情
docker service create 创建服务
docker run 是在单机中起一个容器,docker service create 是在集群中起服务,可以有多个副本且可以动态扩缩容!
# 命令
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
# 使用示例
docker service create -p 80:80 --name mynginx nginx:latest
动态扩缩容
# 命令
docker service update --relipcas
# 使用示例
docker service update --relipcas 3 mynginx
# 命令
docker service scale
# 使用示例
docker service scale mynginx=3
2.3,docker node --help
节点管理相关命令
[root@iZwz9hdkhnyvzivpk6q3svZ ~]# docker node update --help
Usage: docker node update [OPTIONS] NODE
Update a node
Options:
--availability string Availability of the node (active/pause/drain)
--help Print usage
--label-add list Add or update a node label (key=value) (default [])
--label-rm list Remove a node label if exists (default [])
--role string Role of the node (worker/manager)
恢复、暂停删除一个节点
# 恢复一个节点
docker node update --availability active [node]
# 暂停一个节点
docker node update --availability pause [node]
# 删除一个节点
docker node update --availability drain [node]
三,集群搭建:
1,init 生成主节点;
docker swarm init --advertise-addr [主节点的私网地址]
2,加入节点
在主节点获取manager 或slaver的token,在待加入的服务器中执行此生成的命令;
# 命令 获取加入当前swarm集群的manager或worker的命令
docker swarm join-token manager/worker
四,Raft 协议
保证>1 台管理节点存活,才可用;
五,扩展:网络模式
Swarm集群使用:“PublishMode”:“ingress”
overlay:可连通不同服务器下的容器。不同服务器下使用的是同一个网络。
ingress:特殊的 overlay 网络!具有负载均衡功能!IPVS VIP!
六,Docker stack
七,Docker Secret
安全,密码,证书
八,Docker Config
同一的一些配置。
九,扩展到K8S
云原生时代
技术趋势。。
首先,精通 k8s!必须要的。
Go语言!!好好掌握!天然的高并发!指针,内存安全,垃圾回收。效率接近于C语言!入门、基本语法、高级对象、操作数据库、框架。
Docker 是 Go 开发的;
K8S 是 Go 开发的;
Etcd 是 Go 开发的;
评论区