zoukankan      html  css  js  c++  java
  • docker的swarm实现容器群集

    实验要求:可以上网的三台centos 7

    实验步骤:

    准备工作:

    主机一(node1):

    1安装docker环境:
    2.设置ntp服务器的同步时间
    vim /etc/ntp.conf
    添加:
    server 127.127.1.0
    fudge 127.127.1.0 stratum 8
    systemctl restart ntpd
    其他两台服务器同步ntp服务器的时间
    systemctl restart ntpd

    3.修改主机名
    临时修改:
    hostname node1
    bash
    永久修改:
    vim /etc/sysconfig/network
    添加:
    HOSTNAME=node1
    其他两台服务器也修改主机名,分别为:node2 node3
    4.修改hosts文件,用来解析主机。
    vim /etc/hosts
    192.168.6.106 node1
    192.168.6.109 node2
    192.168.6.110 node3
    其他两台服务器做同样的配置
    如:
    scp /etc/hosts root@192.168.6.109:/etc/
    scp /etc/hosts root@192.168.6.110:/etc/
    验证:ping node2
    ping node3
    可以通过主机名进行网络的连通性测试

    5.清除防火墙的默认规则,关闭selinux,开启docke服务
    iptables -F
    iptables –L
    setenforce 0
    systemctl restart docker
    其他两台服务器做同样的配置

    6.配置ssh远程访问,使用密钥的方式创建链接,则不需要密码了。
    生成密钥,一路下一步即可
    ssh-keygen
    将公钥传给其他两台服务器:
    ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.6.109
    ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.6.110
    验证:可以通过主机名链接其他两台服务器
    ssh node3

    正式开始:

    7.创建docker群集的领导者和工作者,node1作为领导者进行配置。

    (1)初始化swarm指定群集的通讯IP地址,此时6.106成为领导者

    docker swarm init --advertise-addr 192.168.6.106

    (2)可查看当前节点成员

    docker node ls  

    (3)根据领导发话将后续节点加入群集,根据下面的这段代码可以将其他的两台服务器加入到swarm群集中,

    docker swarm join

    --token SWMTKN-1-3vxn0lnobabqwngyxi67hxtf74qi00fciy86lfr2

    g931ziv2ro-0varh1mcqoe3pi4ak9qzo5deo

    192.168.6.105:2377

     

    docker  node  ls   //查看swarm群集的成员

    4)分别在其他两台服务器上执行这段代码,将其加入到群集中,如果加不进去的检查防火墙策略清空没有

    (5)再次查看群集节点信息

    docker node ls

     

    8.开启ipv4转发功能

    vim /etc/sysctl.conf

    net.ipv4.ip_forward = 1

    net.ipv4.ip_forward_use_pmtu = 0

    sysctl –p

    其他两台服务做同样的配置

    如:

    scp /etc/sysctl.conf node2:/etc

    scp /etc/sysctl.conf node3:/etc

    并分别到两台服务器上进行内核文件的刷新

     

    9.拉取registry:2镜像,用来做私有仓库,

    (1)公网拉取

    docker  search  registry

    docker pull registry:2

    (2)离线包              //次实验推荐的步骤

    docker load -i registry2.tar    //解压tar包成镜像

    docker images

    创建私有仓库的物理目录 

    mkdir /lpc/xixi –p    

    启动私有库用的容器

    docker run -itd -p 5000:5000 --restart=always -v /lpc/xixi/registry/:/var/lib/registry --name registry registry:2

     

    docker ps

     

    验证容器中的私有库目录是否存在

    curl 192.168.6.106:5000/v2/_catalog

     

    发布私有仓库其他主机可以访问

    注意:为了防止改坏这份文件,可以先做备份

    cp /usr/lib/systemd/system/docker.service /yum/

    然后进行修改:

    vim /usr/lib/systemd/system/docker.service

    ExecStart=后面的选项最下面添加换行符和新选项 --insecure-registry 192.168.6.106:5000

    如:

     

     

    守护进程重新加载

    systemctl daemon-reload

    重启服务

    service docker restart

    验证:

    确保docker ps后容器还在,否则就是配置有误docker ps

     

    其他两台服务器的配置,

    将修改后的docker.service文件分别复制都其他两台服务器的相同的目录路径下,为了可以访问领导者的私有库,并在每台服务器上启动守护进程和重启docker服务。

    scp /usr/lib/systemd/system/docker.service node2:/usr/lib/systemd/system/

    scp /usr/lib/systemd/system/docker.service node3:/usr/lib/systemd/system/

     

    systemctl daemon-reload

    service docker restart

     

    10.拉取或添加nginx镜像

    docker pull nginx 或

    docker load -i nginx2.tar

    docker images

    为这个镜像添加易识别的私有标签,来区别是公有的还是私有的

    docker tag nginx 192.168.6.106:5000/nginx

    docker images

    上传私有镜像到刚才做好的私有仓库

    docker push 192.168.6.106:5000/nginx

    再次查看私有仓库目录

    curl 192.168.6.106:5000/v2/_catalog

    也可以去其他节点试着pull一下192.168.6.106:5000/nginx,但是拉完别忘记删掉一会再推

     

    11.添加群集专属网络

    docker network create --driver overlay my-network

    docker network ls

     

    12. 安装swarm群集图形化监视工具

    拉取镜像

    docker pull docker.io/dockersamples/visualizer

    或者使用离线包   //本实验推荐

    docker load -i visualizer.tar

    docker images

    先给离线镜像做个标记,用来区别公有镜像。

    docker tag dockersamples/visualizer 192.168.6.106:5000/visualizer

    docker images

    将这个镜像发布到私有仓库

    docker push 192.168.6.106:5000/visualizer

    curl 192.168.6.106:5000/v2/_catalog

     

    13. 本地运行图形监视软件所在镜像成为容器

    docker run -itd -p 8888:8080 -e HOST=192.168.6.106 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer 192.168.6.106:5000/visualizer

    docker ps

     

    14.验证图形监控页面

    Firefox  192.168.6.106:8888

     

    15. 创建swarm群集服务,3个容器跑nginx

    docker service create --replicas 3 --network my-network --name web -p 80:80 192.168.6.106:5000/nginx

    docker ps

     

    查看服务节点信息

    docker service ps web

    查看群集列表

    docker service ls

     

    验证:

    重新访问后者刷新游览器首页

    Firefox  192.168.6.106:8888

     

    16.增加容器为5个

    在管理者上执行:

    docker service scale web=5

     

    查看服务节点信息

    docker service  ps web

    查看群集列表

    docker service  ls

    重新访问后者刷新游览器首页

     

    17.验证

    (1)在各个nginx容器中修改主页信息,测试群集效果

    进入正在运行的nginx容器里,添加不同的主页信息

    docker  exec  -it  容器ID  /bin/bash

    echo "<h1>wwww</h1>"  > /usr/share/nginx/html/index.html

     

    (2)关闭node3的docker服务,会发现这个容器被转移到了其他节点,重启打开node3,再把转移走的容器删掉,容器又会转移会node3

     

    注意:在关闭node3后,其他两台服务器会通过自己内部的调度器将node3上的容器运行在其他两台上,当重新启动node3时,并不会自动切回来,需要到其他两台服务器上,查看容器列(docker  ps)表,通过容器运行的时间来确定那几台是刚加进来的,刚加进来的就是node3的容器,删除他,就会自动回到node3上。

    18.群集管理常用命令

    开启节点docker node update --availability active node3

    关闭节点docker node update --availability drain node3

    在界节点上申请退出群集

    docker swarm leave -f

     

     

     

     

    node2node3

     

    1.配置hosts文件,由于是从node1的管理者上直接通过scp传过来的,所以直接查看即可。

    cat  /etc/hosts

     

    2. 清除防火墙的默认规则,关闭selinux,开启docke服务

    iptables –F

    setenforce 0

    systemctl restart docker

     

    3.这是在管理者node1生成的加入swarm群集的代码,在工作者服务器上执行就可以加入群集。

    docker swarm join

    --token SWMTKN-1-3vxn0lnobabqwngyxi67hxtf74qi00fciy86lfr2

    g931ziv2ro-0varh1mcqoe3pi4ak9qzo5deo

    192.168.6.105:2377

    如果后来忘记了

    用Docker swarm join-token worker 重新查看加入命令

     

    4.开启ipv4转发功能,

    vim /etc/sysctl.conf

    net.ipv4.ip_forward = 1

    net.ipv4.ip_forward_use_pmtu = 0

    sysctl –p

     

    5.用来访问管理者私有仓库的配置文件,和node1上的一摸一样,通过scp就可以分别传到node2和node3上,查看即可

    cat /usr/lib/systemd/system/docker.service

    但是需要开启守护进程和重启docker服务

    systemctl daemon-reload

    service docker restart

     

    6.当node1的私有仓库搭建好之后,并上传镜像后,可以在node2,3上测试是否可以使用,拉取镜像。

    docker pull 192.168.6.106:5000/nginx

    docker images

     

    7.修改本服务器上的容器的nginx默认首页文件,用来做群集调度测试。

    添加:

    经理可以加副经理

    docker node promote node2

    删除副经理

    docker node demote node2

    docker  info   //可以查看其经理的信息

  • 相关阅读:
    hadoop作业
    爬虫综合大作业
    爬取全部校园新闻
    理解爬虫原理
    中文词频统计与词云生成
    复合数据类型,英文词频统计
    字符串操作、文件操作,英文词频统计预处理
    了解大数据的特点、来源与数据呈现方式
    Hadoop综合大作业
    分布式文件系统HDFS
  • 原文地址:https://www.cnblogs.com/Leonardo-li/p/8549682.html
Copyright © 2011-2022 走看看