• 高级架构师_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/
    
    • 1

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    初始化第一个管理节点

    关于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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    如何加入新的节点

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    manager节点说明

    MANAGER STATUS列说明:

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

    AVAILABILITY列说明:

    • 1)Active 意味着调度程序可以将任务分配给节点。
    • 2)Pause 意味着调度程序不会将新任务分配给节点,但现有任务仍在运行。
    • 3)Drain 意味着调度程序不会向节点分配新任务。调度程序关闭所有现有任务并在可用节点上调度它们。
    验证节点
    master节点: 
    docker info 
    
    work节点:
    docker info
    
    • 1
    • 2
    • 3
    • 4
    • 5
    节点权限提升/降低
    将worker节点提升为manager节点,在manager节点执行如下命令: 
    docker node promote work-01 
    docker node ls
    
    将manager节点降低为worker节点,在manager节点执行如下命令: 
    docker node demote work-02 
    docker node ls
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    脱离集群

    在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 不复存在。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    图形界面

    docker官网地址
    https://hub.docker.com/r/dockersamples/visualizer
    
    • 1
    基础镜像配置
    # 拉取镜像 
    docker pull dockersamples/visualizer:latest 
    
    # 备份镜像 
    docker save dockersamples/visualizer:latest -o dockersamples.visualizer.tar 
    
    # 还原镜像 
    docker load -i dockersamples.visualizer.tar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    运行镜像
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    测试镜像
    http://192.168.198.105:8099
    
    • 1

    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 *
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    部署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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    升级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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    删除服务
    docker service rm nginx 
    docker network rm nginx-net
    
    • 1
    • 2

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    运行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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    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。
  • 相关阅读:
    CSDN每日一练 |『阿波罗的魔力宝石』『贝博士外星信号统计』『字符串子串的增删』2023-09-14
    “U锂融合”——双碳新标兵
    二:动手实操SpringBoot-使用Spring Initializr创建项目
    [晕事]今天做了件晕事21;设置代理访问网站的时候需注意的问题
    Pytorch实现的LSTM、RNN模型结构
    跨域问题总结
    火爆全网的头戴式耳机,Y2K辣妹时髦单品——Umelody轻律 U1头戴式耳机!
    Mybatis传入参数字符串分割成数组作为条件遍历不用in不用in
    驱动获取设备树节点信息
    前端工程化精讲第二课 界面调试:热更新技术如何开着飞机修引擎?
  • 原文地址:https://blog.csdn.net/guan1843036360/article/details/127714849