侧边栏壁纸
博主头像
再见理想博主等级

只争朝夕,不负韶华

  • 累计撰写 112 篇文章
  • 累计创建 64 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Docker集群- Swarm

再见理想
2022-05-25 / 0 评论 / 0 点赞 / 371 阅读 / 1,600 字

一,概述

docker swarm 可以让 n 台机器组成一个集群,在这个集群中部署的服务 service,可以相互连接(overlay技术)、动态更新、动态扩缩容,灰度发布等!
例如,在swarm集群中,部署了2个副本的redis服务。当访问压力变大了,可动态添加多 n 个副本,以应对突发的流量。
image.png

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 或更高版本的物理或虚拟机。
image.png
有两种类型的节点: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 [主节点的私网地址]

image.png

2,加入节点

在主节点获取manager 或slaver的token,在待加入的服务器中执行此生成的命令;

# 命令 获取加入当前swarm集群的manager或worker的命令
docker swarm join-token manager/worker

image.png

四,Raft 协议

保证>1 台管理节点存活,才可用;

五,扩展:网络模式

Swarm集群使用:“PublishMode”:“ingress”

overlay:可连通不同服务器下的容器。不同服务器下使用的是同一个网络。
ingress:特殊的 overlay 网络!具有负载均衡功能!IPVS VIP!

六,Docker stack

image.png

七,Docker Secret

安全,密码,证书

八,Docker Config

同一的一些配置。

九,扩展到K8S

云原生时代

技术趋势。。

首先,精通 k8s!必须要的。

Go语言!!好好掌握!天然的高并发!指针,内存安全,垃圾回收。效率接近于C语言!入门、基本语法、高级对象、操作数据库、框架。
Docker 是 Go 开发的;
K8S 是 Go 开发的;
Etcd 是 Go 开发的;

0

评论区