• Docker容器编排


    1了解Docker容器主流的编排技术。

    2掌握Docker Swarm的部署和基本使用。

    3掌握Docker Compose的部署和基本使用。

    所有节点已配置好主机名和网卡,并安装好docker-ce。

    1.部署Swarm集群

    1)配置主机映射

    所有节点修改/etc/hosts文件配置主机映射。

    [root@master ~]# cat /etc/hosts

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

    172.16.51.35master

    172.16.51.36 node

    2)配置时间同步

    所有节点安装chrony服务。

    # yum install -y chrony

    Master节点修改/etc/chrony.conf文件,注释默认NTP服务器,指定上游公共NTP服务器,并允许其他节点同步时间。

    [root@master ~]# sed -i 's/^server/#&/' /etc/chrony.conf

    [root@master ~]# cat >> /etc/chrony.conf << EOF

    local stratum 10

    server master iburst

    allow all

    EOF

    Master节点重启chronyd服务并设为开机启动,开启网络时间同步功能。

    [root@master ~]# systemctl enable chronyd && systemctl restart chronyd

    [root@master ~]# timedatectl set-ntp true

    Node节点修改/etc/chrony.conf文件,指定内网 Master节点为上游NTP服务器,重启服务并设为开机启动。

    [root@node ~]# sed -i 's/^server/#&/' /etc/chrony.conf

    [root@node ~]# echo server 172.16.51.35 iburst >> /etc/chrony.conf  

    //IPmaster节点地址

    [root@node ~]# systemctl enable chronyd && systemctl restart chronyd

     

    所有节点执行chronyc sources命令,查询结果中如果存在以“^*”开头的行,即说明已经同步成功

    # chronyc sources

     

    3)配置Docker API

    所有节点开启Docker API

    # vi /lib/systemd/system/docker.service

       ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

    修改为

       ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

     

    4)初始化集群

    Master节点创建Swarm集群

     

    初始化命令中--advertise-addr”选项表示管理节点公布它的IP是多少。其它节点必须能通过这个IP找到管理节点。

    输出结果中包含3个步骤:

    Swarm创建成功,swarm-manager成为manager node

    ②添加worker node需要执行的命令。

    ③添加manager node需要执行的命令。

    5Node节点加入集群

    复制前面的docker swarm join命令,在Node节点执行以加入Swarm集群

    如果初始化时没有记录下docker swarm init提示的添加worker的完整命令,可以通过docker swarm join-token worker命令查看。

    [root@master ~]# docker swarm join-token worker

     

    如果初始化时没有记录下docker swarm init提示的添加worker的完整命令,可以通过docker swarm join-token worker命令查看

     

    6)验证集群

    登录Master节点,查看各节点状态

     

    7)安装Portainer

    PortainerDocker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传和下载镜像、创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型企业对容器管理的全部需求。

    登录Master节点,安装Portainer

     

    遇到问题以及解决办法

     

    docker service rm portainer将之前运行的service删除

    重新运行service

    8)登录Portainer

    打开浏览器,输入地址http://172.16.51.35:9000访问Portainer主页

     

    首次登录时需设置用户名和密码,然后输入设置的用户名和密码进行登录,进入Swarm控制台

     

    2.运行Service

    1)运行Service

    部署一个运行httpd镜像的Service

     

    部署Service的命令形式与运行容器的docker run很相似,--nameService命名,httpd为镜像的名字。

    docker service ls命令可以查看当前Swarm中的Service

    REPLICAS显示当前副本信息,1/1意思是web_server这个Service期望的容器副本数量为1,目前已经启动的副本数量为1,即当前Service已经部署完成。命令docker service ps可以查看Service每个副本的状态

     

    可以查看到Service唯一的副本被分派到node,当前的状态是Running

    2Service伸缩

    刚刚部署了只有一个副本的Service,不过对于Web服务,通常会运行多个实例。这样可以负载均衡,同时也能提供高可用。

    Swarm要实现这个目标非常简单,增加Service的副本数

     

    副本数增加到5,通过docker service lsdocker service ps命令查看副本的详细信息

     

     

    5个副本已经分布在Swarm的所有节点上。

    可以通过scale up扩容服务,也可以通过scale down减少副本数

     

    (3)访问Service

    要访问http服务,首先得保证网络通畅,其次需要知道服务的IP。查看容器的网络配置。

    Master上运行了一个容器,是web_server的一个副本,容器监听了80端口,但并没有映射到Docker Host,所以只能通过容器的IP访问。但是服务并没有暴露给外部网络,只能在Docker主机上访问,外部无法访问。要将Service暴露到外部

     

     

    --publish-add 8080:80将容器的80映射到主机的8080端口,这样外部网络就能访问到Service了。通过http://172.16.51.35P:8080即可访问Service

     

    4Service存储数据

    Service的容器副本可能会伸缩,甚至失败,会在不同的主机上创建和销毁,这就引出一个问题,如果Service有需要管理的数据,那么这些数据应该如何存放呢?如果把数据打包在容器里,这显然不行,除非数据不会发生变化,否则,如何在多个副本之间保持同步呢?volume是将宿主级的目录映射到容器中,以实现数据持久化。可以用两种方式来实现:

    l volume默认模式:工作节点宿主机数据同步到容器内。

    l volume NFS共享存储模式:管理节点宿主同步到工作节点宿主,工作节点宿主同步到容器。

    生产环境中一般推荐使用volume NFS共享存储模式。

    登录Master节点,安装NFS服务端、配置NFS主配置文件、添加权限并启动

    [root@master ~]# yum install nfs-utils -y

    添加目录让相应网段可以访问并添加读写权限。

    [root@master ~]# vi /etc/exports

    /root/share 172.16.51.35/24(rw,async,insecure,anonuid=1000,anongid=1000,no_root_squash)

    创建共享目录,添加权限。

    /root/share为共享目录,生效配置

    开启RPC服务并设置开机自启。

    启动NFS服务并设置开机自启

     

    查看NFS是否挂载成功。

     

    登录Node节点,安装NFS客户端并启动服务。

    [root@node ~]# yum install nfs-utils -y

    [root@node ~]# systemctl start rpcbind

    [root@node ~]# systemctl enable rpcbind

    [root@node ~]# systemctl start nfs

    [root@node ~]# systemctl enable nfs

    部署的服务可能分不到各个节点上,在所有节点创建docker volume

    [root@master ~]#docker volume create --driver local --opt type=nfs --opt o=addr=172.16.51.35

    ,rw --opt device=:/root/share foo33

    --opt device=:/root/share用于指向共享目录,也可以是共享目录下的子目录。

    查看volume

     

    可以查看到docker volume列表中有foo33,查看volume详细信息

    可以看出NFS/root/share被挂载到了/var/lib/docker/volumes/foo33/_data目录。

    创建并发布服务

     查看服务分布的节点

     

    Master节点/root/share目录中生成一个index.html文件

     

    查看宿主机目录挂载情况。

     

    查看容器目录。

     

    5)调度节点

    默认配置下Master也是worker node,所以Master上也运行了副本。如果不希望在Master上运行Service,可以执行如下命令

     

    通过 docker node ls 命令查看各节点现在的状态

     

    使docker service ps命令来查看

     

  • 相关阅读:
    leetcode_357. Count Numbers with Unique Digits
    leetcode_712. Minimum ASCII Delete Sum for Two Strings
    leetcode_865. Smallest Subtree with all the Deepest Nodes
    leetcode_919. Complete Binary Tree Inserter
    leetcode_1014. Capacity To Ship Packages Within D Days
    leetcode_998. Maximum Binary Tree II
    leetcode_654. Maximum Binary Tree
    leetcode_894. All Possible Full Binary Trees
    leetcode_486. Predict the Winner
    二叉树的遍历
  • 原文地址:https://www.cnblogs.com/lzp123/p/13769776.html
Copyright © 2020-2023  润新知