高级架构师_Docker_第3章Docker运维管理__ 第1节Swarm集群管理

高级架构师_Docker_第3章Docker运维管理__ 第1节Swarm集群管理

Swarm集群管理

节点信息

服务器用户名:root,服务器密码:123456 。及时做好系统快照。

img

image.png

硬件要求

最低的硬件配置要求为2CPU,2GB内存,50GB硬盘

当前应用状态

img

image.png

容器化部署=大麻烦

怎么保证数据完整性
怎么保护客户隐私数据
怎么去调度容器
怎么去监控追踪容器
怎么去更新容器而不影响客户的业务
如果容器down掉了。怎么自动恢复
怎么去管很多微服容器
怎么根据客户业务需求,快速方便的扩展容器

img

image.png

安装docker-swarm

官网文档
https://docs.docker.com/engine/swarm/

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,可以将组成某个应该的多个docker容器编排在一起,同时管理。
而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口(docker stack)统一管理这些Docker主机上的各种Docker资源。
stack 是构成特定环境中的 service 集合, 它是自动部署多个相互关联的服务的简便方法,而无需单独定义每个服务。
stack file 是一种 yaml 格式的文件,类似于 docker-compose.yml 文件,它定义了一个或多个服务,并定义了服务的环境变量、部署标签、容器数量以及相关的环境特定配置等。

Docker Swarm由两部分组成:

1)Docker集群:将一个或多个Docker节点组织起来,用户就能以集群的方式进行管理;
2)应用编排:有一套API用来部署和管理容器

img

image.png

配置私有仓库

私有仓库不是集群必备的组件。集群的每个节点都需要安装镜像,如果不搭建私有仓库,下载镜像速度比较耗时。

vi /etc/docker/daemon.json 
"insecure-registries":["192.168.198.101:5000"] 

systemctl daemon-reload 
systemctl restart docker
初始化第一个管理节点

关于advertise-addr和listen-addr这两个参数:

  • 1)前者用来指定其他节点连接m0时的地址
  • 2)后者指定承载swarm流量的IP和端口
  • 3)会在本地新建docker网络
docker swarm init --advertise-addr 192.168.198.105:2377 --listen-addr 
192.168.198.105:2377 

docker node ls 
docker network ls
如何加入新的节点

Docker Swarm的新节点加入策略是从管理节点获取一长串命令,被称为join token,任何想加入集群的机器只要自己执行这个join token即可加入Swarm集群;
如果有新的管理节点需要加入,在m0执行命令docker swarm join-token manager即可得到管理manager节点的join token,
如果有新的work节点需要加入,在m0执行命令docker swarm join-token worker即可得到管理work节点的join token

在manager节点执行。可以作为manager节点加入集群 
docker swarm join-token manager 

在manager节点执行。可以作为worker节点加入集群 
docker swarm join-token worker 

docker node ls
manager节点说明

MANAGER STATUS列说明:

  • 1)Leader 意味着该节点是使得群的所有群管理和编排决策的主要管理器节点。
  • 2)Reachable 意味着节点是管理者节点正在参与Raft共识。如果领导节点不可用,则该节点有资格被选为新领导者。
  • 3)Unavailable 意味着节点是不能与其他管理器通信的管理器。如果管理器节点不可用,您应该将新的管理器节点加入群集,或者将工作器节点升级为管理器。

AVAILABILITY列说明:

  • 1)Active 意味着调度程序可以将任务分配给节点。
  • 2)Pause 意味着调度程序不会将新任务分配给节点,但现有任务仍在运行。
  • 3)Drain 意味着调度程序不会向节点分配新任务。调度程序关闭所有现有任务并在可用节点上调度它们。
验证节点
master节点: 
docker info 

work节点:
docker info
节点权限提升/降低
将worker节点提升为manager节点,在manager节点执行如下命令: 
docker node promote work-01 
docker node ls

将manager节点降低为worker节点,在manager节点执行如下命令: 
docker node demote work-02 
docker node ls
脱离集群

在work-02节点使用命令:docker swarm leave
稍微等待几分钟,在manager节点使用命令:docker node ls,发现work-02节点已经脱离集群管理。

删除脱离集群的节点
先使用命令:docker node demote 节点名称。将某一个节点降为worker节点后,再删除。 

使用命令:docker node rm 节点名称|节点ID 
例如:docker node rm work-02 

manager节点只能强制退出。
命令:docker swarm leave --force。manager退出后意味着整个swarm 不复存在。

图形界面

docker官网地址
https://hub.docker.com/r/dockersamples/visualizer
基础镜像配置
# 拉取镜像 
docker pull dockersamples/visualizer:latest 

# 备份镜像 
docker save dockersamples/visualizer:latest -o dockersamples.visualizer.tar 

# 还原镜像 
docker load -i dockersamples.visualizer.tar
运行镜像
docker run -itd --name visualizer -p 8099:8080 -e HOST=192.168.198.105 -e
PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock 
dockersamples/visualizer:latest 

docker service create \ 
    --name=viz \ 
    --publish=8080:8080/tcp \ 
    --constraint=node.role==manager \ 
    --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \ 
    dockersamples/visualizer
测试镜像
http://192.168.198.105:8099

swarm命令

img

image.png

node命令

img

image.png

service命令

命令总结,如下图:

img

image.png

img

image.png

基础镜像配置

集群所有节点都需要下载相关镜像

# 下载指定的nginx版本
docker pull nginx:1.18.0-alpine 
docker pull nginx:1.19.3-alpine

scp nginx.1.18.tar root@192.168.198.106:/data/ 
scp nginx.1.18.tar root@192.168.198.107:/data/ 

scp nginx.1.19.3.alpine.tar root@192.168.198.106:/data/ 
scp nginx.1.19.3.alpine.tar root@192.168.198.107:/data/ 

所有节点执行如下命令: 
cd /data 
docker load -i nginx.1.18.tar 
docker load -i nginx.1.19.3.alpine.tar 

rm -rf *
部署nginx
在manager节点中创建overlay网络: 
docker network create -d overlay nginx-net 

创建5个nginx:alpines容器的集群: 
docker service create --name nginx --network nginx-net -p 80:80 --replicas 5 
nginx:1.18.0-alpine 

在manager节点使用docker service ls 命令查看服务情况,worker节点无法查看: 
docker service ls 

在manager或者worker节点都可以执行docker ps命令查看本虚拟机容器情况: 
docker ps 

manager节点只用于管理集群,不希望部署服务。 
docker node update --availability drain master-01 

使用docker service scale nginx=2命令将服务缩减为2个容器: 
docker service scale nginx=2
升级nginx版本
进入其中一个容器查看nginx的版本信息: 
注意事项:因nginx是alpine的linux版本。不能使用/bin/bash指令。 

docker exec -it 503fe639bb89 sh 
nginx -v

1.更新镜像: 
docker service update --image nginx:1.19.3-alpine nginx 

2.添加或者更新一个对外端口: 
docker service update --publish-add 8090:80 nginx
删除服务
docker service rm nginx 
docker network rm nginx-net

stack命令

命令总结,如下图:

img

image.png

部署nginx

docker-compose.yml

version: "3" 
services: 
  nginx-web: 
    image: nginx:1.19.3-alpine 
    container_name: nginx 
    networks: 
      - nginx-net 
    restart: always 
    ports: 
      - 80:80 
    deploy: 
      replicas: 5 
    
  networks: 
    nginx-net: 
      driver: overlay
运行nginx
在manager节点中创建docker-compose.yml文件。执行如下命令: 
docker stack deploy nginx-stack --compose-file=docker-compose.yml 或者是 
docker stack deploy nginx-stack -c docker-compose.yml 

查看stack服务运行情况。执行如下命令: 
docker stack services nginx-stack 

查看5个容器运行在哪个节点中。执行如下命令: 
docker service ls 查看到NAME中的服务名为:nginx-stack_nginx-web 
docker service ps nginx-stack_nginx-web 

进行测试: 
curl 192.168.0.105 
curl 192.168.0.106 
curl 192.168.0.107

删除stack服务。执行如下命令:
docker stack rm nginx-stack

networks中也可以不指定driver:overlay,因为docker swarm默认网络类型是overlay。
整个networks都可以不用配置。stack部署时会默认创建网络。如果我们定义网络。在dockerstack deploy时会先默认创建一个网络,在创建一个我们定义的网络。
一定要把镜像先拉取到本地再执行

Docker Stack和Docker Compose区别

  • 1)Docker stack会忽略了“构建”指令,无法使用stack命令构建新镜像,它是需要镜像是预先已经构建好的。 所以docker-compose更适合于开发场景;
  • 2)Docker Compose是一个Python项目,在内部,它使用Docker API规范来操作容器。所以需要安装Docker -compose,以便与Docker一起在您的计算机上使用;
  • 3)Docker Stack功能包含在Docker引擎中。你不需要安装额外的包来使用它,docker stacks 只是swarm mode的一部分。
  • 4)Docker stack不支持基于第2版写的docker-compose.yml ,也就是version版本至少为3。然而Docker Compose对版本为2和3的 文件仍然可以处理;
  • 5)docker stack把docker compose的所有工作都做完了,因此docker stack将占主导地位。同时,对于大多数用户来说,切换到使用docker stack既不困难,也不需要太多的开销。如果您是Docker新手,或正在选择用于新项目的技术,请使用docker stack。

它使用Docker API规范来操作容器。所以需要安装Docker -compose,以便与Docker一起在您的计算机上使用;

  • 3)Docker Stack功能包含在Docker引擎中。你不需要安装额外的包来使用它,docker stacks 只是swarm mode的一部分。
  • 4)Docker stack不支持基于第2版写的docker-compose.yml ,也就是version版本至少为3。然而Docker Compose对版本为2和3的 文件仍然可以处理;
  • 5)docker stack把docker compose的所有工作都做完了,因此docker stack将占主导地位。同时,对于大多数用户来说,切换到使用docker stack既不困难,也不需要太多的开销。如果您是Docker新手,或正在选择用于新项目的技术,请使用docker stack。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

管程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值