docker-swarm

2023-03-01 17:27:00 浏览数 (1)

文章目录[隐藏]

  • 基础命令
  • 服务service
  • 使用Label控制service的位置
  • 网络
  • Scheduling Mode
  • docker stack
  • 其他命令

基础命令

代码语言:javascript复制
# 初始化 
 前提开放
用于群集管理通信的TCP端口2377
TCP和UDP端口7946,用于节点之间的通信
UDP端口4789,用于覆盖网络流量,云服务器该端口不可用data-path-port 可修改该端口。
docker swarm init --advertise-addr 172.172.172.172 --data-path-port=7777 
# 2377是集群管理端口,2375是docker服务监听端口 
出现表示成功 docker swarm join --token SWMTKN-1-3oeem1x4sd5cugqfattkxpyuz4-2dsfjkhfskhfss2y7qiuhlw2g25j000no5gh7  172.172.172.172:2377
#加入集群
在其他节点服务器运行上面出现的命令出现This node joined a swarm as a worker表示加入成功
#查看所有节点
docker node ls
# 删除节点
##排空节点上的集群容器 。
docker node update --availability drain g36lvv23ypjd8v7ovlst2n3yt 
##主动离开集群,让节点处于down状态,才能删除 
docker swarm leave 
##删除指定节点 (管理节点上操作) 
docker node rm g36lvv23ypjd8v7ovlst2n3yt 
#管理节点,解散集群 docker swarm leave --force 

服务service

代码语言:javascript复制
#创建服务
 docker service create --name web-sqgs -p 81:80 --replicas 5
 dqgs/dqgs-docker-ci
#查看所有服务
docker service ls # 查看某服务下的任务状态 docker service ps nginx # 删除服务 docker service rm [SERVICE_NAME] # 服务的扩缩容 docker service scale web-dqgs=10 会将服务副本数由 5 个增加到 10 个。后台会将服务的期望状态从 5 个增加到 10 个 再次执行 docker service scale 命令将副本数从 10 个降为 5 个。 docker service scale web-fe=5

使用Label控制service的位置

使用 label可以精细控制 Service 的运行位置呢。 逻辑分两步: 1、为每个 node 定义 label。 2、设置 service 运行在指定 label 的 node 上。

label 可以灵活描述 node 的属性,其形式是 key=value,用户可以任意指定,例如将 swarm-worker1 作为测试环境,为其添加 label env=test: docker node update –label-add env=test swarm-worker1。对应的,将 swarm-worker2 作为生产环境,添加 label env=prod: docker node update –label-add env=prod swarm-worker2

代码语言:javascript复制
#现在部署 service 到测试环境:
docker service create --constraint node.labels.env==test --replicas 3 --name my_web  --publish 8080:80 
更新 service,将其迁移到生产环境:
docker service update --constraint-rm node.labels.env==test my_web
docker service update --constraint-add node.labels.env==prod my_web

网络

overlay 集群网络模式

  • 多节点集群下统一分配服务独立ip
  • 跨机器节点上的docker服务间能互相通信
  • 支持主机节点和集群网络内的节点间互相通信
  • 支持节点间加密通信 注:windows机器节点不支持加密通信
代码语言:javascript复制
#创建自定义集群网络
docker network create -d overlay my-overlay
#创建可以与主机上其他docker服务通信的集群网络
docker network create -d overlay --attachable my-attachable-overlay
#创建加密通信且可以与主机上其他docker服务通信的集群网络
docker network create --opt encrypted --driver overlay --attachable my-attachable-multi-host-network

创建网络时,还可以指定ip地址范围、子网、网关等配置

portainer

参考

代码语言:javascript复制
docker service create     --name portainer_agent     --network dqgs-all    --mode global     --constraint 'node.platform.os == linux'     --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock     --mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes portainer/agent

Scheduling Mode

  • replicated mode
代码语言:javascript复制
Swarm 可以在 service 创建或运行过程中灵活地通过 --replicas 调整容器副本的数量,内部调度器则会根据当前集群的资源使用状况在不同 node 上启停容器。 如果创建 service 时不指定,默认是 Replicated。在此模式下,node 上运行的副本数有多有少,一般情况下,资源更丰富的 node 运行的副本数更多,反之亦然。
  • global mode

其作用是强制在每个 node 上都运行一个且最多一个副本。此模式特别适合需要运行 daemon 的集群环境。比如要收集所有容器的日志,就可以 global mode 创建 service,在所有 node 上都运行 hello/word容器,即使之后有新的 node 加入swarm 也会自动在新 node 上启动一个hello/word 副本

docker stack

部署命令:

代码语言:javascript复制
docker stack deploy -c docker-compose.yml --with-registry-auth dqgs-web

其他命令

一、Token相关

Join tokens是允许一个节点加入集群的密钥。有两种可用的不同的join tokens,一个是用作worker角色,另一个是用作manager角色。在执行swarm join时使用–token来传递token。节点只在它们加入集群时才使用这个token。

代码语言:javascript复制
# 常用命令:
swarm join-token :可以查看或更换join token。
docker swarm join-token worker:查看加入woker的命令。
docker swarm join-token manager:查看加入manager的命令
docker swarm join-token --rotate worker:重置woker的Token。
docker swarm join-token -q worker:仅打印Token。

0 人点赞