docker-swarm

docker 寻梦 3年前 (2021-05-12) 722次浏览 0个评论 扫描二维码
文章目录[隐藏]

基础命令

# 初始化 
 前提开放
用于群集管理通信的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

#创建服务
 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
# 更新某个服务的镜像
sudo docker service update --image image_name:image_version service_name

使用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

#现在部署 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机器节点不支持加密通信
#创建自定义集群网络
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

参考

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
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

部署命令:

# 创建或者更新stack
docker stack deploy -c docker-compose.yml --with-registry-auth dqgs-web
# 查看stack
docker stack ls
# 列出某个已经部署的 Stack 相关详情。该命令支持 Stack 名称作为其主要参数
docker stack ps [OPTIONS]
在服务启动失败时,docker stack ps 命令是首选的问题定位方式。该命令展示了 Stack 中每个服务的概况,
包括服务副本所在节点、当前状态、期望状态以及异常信息,再配合 docker service logs 查看某个具体服务或任务的详细信息
# 列出某个已经部署的 Stack 的服务,包括服务的模式,使用的镜像,端口映射等
docker stack services [OPTIONS]
# 从 Swarm 集群中移除 一个或多个 Stack。移除操作执行前并不会进行二次确认
docker stack rm [OPTIONS] STACK [STACK…]

其他命令

一、Token相关

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

# 常用命令:
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。

参考

喜欢 (2)
[支付宝扫码,感谢支持]
分享 (0)
关于作者:

您必须 登录 才能发表评论!