15. docker三剑客之docker-swarm---01

docker-swarm—01

swarm介绍

swarm几个关键介绍

  1. Swarm
    集群的管理和编排是使用嵌入docker引擎的SwarmKit,可以在docker初始化时启动swarm模式或者加入已存在的swarm
  1. Node
    一个节点是docker引擎集群的一个实例。您还可以将其视为Docker节点。您可以在单个物理计算机或云服务器上运行一个或多个节点,但生产群集部署通常包括分布在多个物理和云计算机上的Docker节点。要将应用程序部署到swarm,请将服务定义提交给 Manager节点还执行维护所需群集状态所需的编排和集群管理功能。Manager节点选择单个领导者来执行编排任务。工作节点接收并执行从管理器节点分派的任务。默认情况下,管理器节点还将服务作为工作节点运行,但您可以将它们配置为仅运行管理器任务并且是仅管理器节点。代理程序在每个工作程序节点上运行,并报告分配给它的任务。工作节点向管理器节点通知其分配的任务的当前状态,以便管理器可以维持每个工作者的期望状态。
  1. Service
    一个服务是任务的定义,管理机或工作节点上执行。它是群体系统的中心结构,是用户与群体交互的主要根源。创建服务时,你需要指定要使用的容器镜像。

Swarm的工作模式

node:
在这里插入图片描述

server:

在这里插入图片描述

任务与调度

在这里插入图片描述

服务副本与全局服务

在这里插入图片描述

swrm调度策略

Swarm在调度(scheduler)节点(leader节点)运行容器的时候,会根据指定的策略来计算最适合运行容器的节点,目前支持的策略有:spread, binpack, random.
1)Random
顾名思义,就是随机选择一个Node来运行容器,一般用作调试用,spread和binpack策略会根据各个节点的可用的CPU, RAM以及正在运
行的容器的数量来计算应该运行容器的节点。
 
2)Spread
在同等条件下,Spread策略会选择运行容器最少的那台节点来运行新的容器,binpack策略会选择运行容器最集中的那台机器来运行新的节点。
使用Spread策略会使得容器会均衡的分布在集群中的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器。
 
3)Binpack
Binpack策略最大化的避免容器碎片化,就是说binpack策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在一个节点上面。

环境:

主机名IP地址
docker-node1192.168.42.1
docekr-node2192.168.42.2
docker-node3192.168.42.3

开始搭建

  1. 修改主机名

    docker-node1:

     hostnamectl set-hostname docker-node1
    

    docker-node2:

    hostnamectl set-hostname docker-node2
    

    docker-node3:

    hostnamectl set-hostname docker-node3
    
  2. 修改域名解析

    cat >> /etc/hosts << EOF
    192.168.42.1  docker-node1
    192.168.42.2  docker-node2
    192.168.42.3  docker-node3 
    EOF
    
  3. 将域名解析复制到其他三台主机上

    scp -rp /etc/hosts 192.168.42.2:/etc/hosts
    scp -rp /etc/hosts 192.168.42.3:/etc/hosts
    
  4. 为了方便我们做一个私有库下载私有库

    docker pull registry:2
    
  5. 修改配置文件,(下面IP为本机IP地址)

    cat > /etc/docker/daemon.json << EOF
      {
      "insecure-registries":["192.168.42.1:5000"],
      "registry-mirrors":
        [
        "http://1dmptu91.mirror.aliyuncs.com",
        "https://0c6d0a431300f29d0f64c01719650540.mirror.swr.myhuaweicloud.com",
        "https://docker.mirrors...ustc.edu.cn",
        "http://f1361db2.m.daocloud.io",
        "https://registry.docker-cn.com"
      ]}
    EOF
    
  6. 重启docker

    systemctl daemon-reload
    systemctl restart docker
    
  7. 运行容器并暴露5000端口

    docker run -d --restart always  -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2
    
  8. 修改标签nginx

    docker tag nginx 192.168.42.1:5000/nginx
    
  9. 上传到私有库中

    docker push 192.168.42.1:5000/nginx
    
  10. 进行免密登录

    docker-node1

    ssh-keygen
    ssh-copy-id docker-node2
    ssh-copy-id docler-node3
    

    docker-node2

    ssh-keygen
    ssh-copy-id docker-node1
    ssh-copy-id docker-node3
    

    docker-node3

    ssh-keygen
    ssh-copy-id docker-node1
    ssh-copy-id docker-node2
    
  11. 把/etc/docker/daemon.json配置文件复制到其他主机

    scp /etc/docker/daemon.json docker-node2:/etc/docker/daemon.json
    scp /etc/docker/daemon.json docker-node3:/etc/docker/daemon.json
    
  12. 重启docker

    docker-node2

    systemctl daemon-reload
    systemctl restart docker
    

    docker-node3

    systemctl daemon-reload
    systemctl restart docker
    
  13. 初始化一下swarm

    docker swarm init --advertise -addr 192.168.42.1
    

在这里插入图片描述

  1. 将node2,node3加入到node1中

    docker-node2(复制上一步用红线括起来的)

    docker swarm join --token SWMTKN-1-
    3g9tuoub2w34i8ysnmcnz3xa97bvgz8qrhd6wqenyrg650jii3-0hs8wh8hl3i31ryowb73ndnx4
    192.168.42.1:2377
    

    docker-node2(复制上一步用红线括起来的)

    docker swarm join --token SWMTKN-1-
    3g9tuoub2w34i8ysnmcnz3xa97bvgz8qrhd6wqenyrg650jii3-0hs8wh8hl3i31ryowb73ndnx4
    192.168.42.1:2377
    
  2. 查看是否加入到节点

    docker node ls
    
  3. 提升docker-node2为管理员

    docker node promote docker-node2
    
  4. 降级node2为普通

    docker node demote docker-node2
    
  5. 管理者不需要存服务

    docker ndoe update --availability drain
    
  6. 创建nginx容器

    docker create  --name web02  --rep 192.168.42.1:5000/nginx
    
  7. 创建10个nginx服务

    docker service create  --replicas 10 --name web02 192.168.42.1:5000/nginx
    
  8. 查看web02的服务分布的节点

    docker service  ps web02
    
  9. 访问端口(更新端口映射或创建时直接加上端口映射)

    docker service update --publish-add 8888:80 web01
    或
    docker service create --name web03 --replicas 10 --publish 50:80 192.168.42.1:5000/nginx
    
  10. 访问一下是否能够访问到nginx

    http://192.168.42.1:50
    或
    http://192.168.42.1:8888
    
  11. 访问一下是否能够访问到nginx

    http://192.168.42.1:50
    或
    http://192.168.42.1:8888
    

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值