zoukankan      html  css  js  c++  java
  • 第八节:基于docker swarm进行集群管理和基于service/stack进行容器服务管理

    一. 概念剖析

    1. docker compose

     docker compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。它主要是通过docker-compose.yml文件进行相关容器的配置,然后通过一些简单的指令可以操作该配置文件所包含的容器,常见的操作有:创建容器并启动、关闭容器、删除容器等等。(详见:https://www.cnblogs.com/yaopengfei/p/13672708.html)

     注:docker compose相关指令主要是对一个docker-compose.yml文件进行管理,所以它的指令主要服务于单服务器,不适用于集群环境。

     另外,一个docker-compose.yml可以管理一组容器,也就是一组任务的集合,这个也叫作services

    2. swarm

    (1). 定义

     Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。Swarm 和 K8s 比较类似,但是更加轻,具有的功能也较 kubernetes 更少一些。

     Swarm内部主要是通过节点(node)进行集群管理的,节点分为:管理节点和工作节点。

    简单的说:swarm就是用来创建管理docker集群的。

    (2). 节点概念

     运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) ,节点分为管理 (manager) 节点和工作 (worker) 节点。

     A. 管理节点:

      用于 Swarm 集群的管理,docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader,leader 通过 raft 协议实现。

     B. 工作节点

      是任务执行节点,管理节点将服务 (service)下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点。

    3. services

     services是指一组任务的集合,服务定义了任务的属性,服务有两种模式,如下,两种模式通过 docker service create 的 --mode 参数指定。

     (1). replicated services 按照一定规则在各个工作节点上运行指定个数的任务。

     (2). global services 每个工作节点上运行一个任务

    简单的说:services就是在swarm构建好的集群的基础上进行 “ 单容器创建等容器相关的管理工作 ”。(这里的单容器是指一条指令只能操作一个容器,但这条指令可以在集群的每个节点上生效)

    4. stack

     Stack 是基于 Docker Swarm 之上来完成应用的部署,Stack 能够在单个声明文件中定义复杂的多服务应用。Stack 还提供了简单的方式来部署应用并管理其完整的生命周期:初始化部署 -> 健康检查 -> 扩容 -> 更新 -> 回滚,以及其他功能!它可以通过一个docker-compose.yml文件进行多个容器的管理。

    简单的说:stack就是在swarm构建好的集群的基础上进行“ 多容器创建等容器相关的管理工作 ”。(这里的多容器是指基于docker-compose.yml可以操作多个容器,这条指令可以在集群的每个节点上生效)

    换句话说:stack可以同时操作多个services。

     

     5. 总结

       Dockerfile、docker compose 、service、node、 swarm、stack

    (1). Dockerfile是用来构建镜像的,一个Dockerfile只能构建一个镜像

    (2). docker compose可以在单机上构建一组任务,可以管理多个容器

    (3). service 是一组任务,包含多个镜像和容器,通常用于在集群的基础上管理容器

    (4). node是swarm中的节点概念,一个节点对应一台服务器。

    (5). swarm是用来构建集群

    (6). stack是在集群的基础上管理容器,他可以操作多个service

    二. swarm+service集群容器管理

    1. 环境准备

     (1). 两台centos服务器:192.168.137.201 和 192.168.137.202

     (2). 每个服务器事先准备好两个webapi镜像:ypfwebapi1(暴露端口9001) 和 ypfwebapi2(暴露端口9002)

     (3). 服务器的防火墙要关闭,相关指令如下:

    #查看防火墙服务
    systemctl status firewalld.service
    #关闭防火墙
    systemctl stop firewalld.service
    #永久关闭防火墙(可能不好用)
    systemctl disable firewalld.service

    2. 搭建集群的步骤

    (1). 选择192.168.137.201作为管理(manager)节点,运行下面指令

    docker swarm init --advertise-addr 192.168.137.201 

    (2). 在192.168.137.202主机上执行下面指令,加入工作节点(worker)这个集群

     docker swarm join --token SWMTKN-1-254wexmq8blkpmi2ujs8o6job51u6e1jjy3k44pyngwjzx3my2-anldosyr1a9wbww4lriycuaxw 192.168.137.201:2377

    PS:出现下面错误,说明201服务器的防火墙没关:(指令见上)

    然后重新执行加入集群的命令,执行成功

    3. 构建容器的步骤 

    (1). 在管理(manager)节点上执行下面指令:  (201服务器)

    # 基于镜像ypfwebapi1构建service_con1容器
    docker service create --replicas 2 --name service_con1 --publish 8201:9001 ypfwebapi1
    # 基于镜像ypfwebapi2构建service_con2容器
    docker service create --replicas 2 --name service_con2 --publish 8202:9002 ypfwebapi2

     参数说明:

     A. - -replicas 2 : 代表在2个任务,即在两台主机上执行上述指令

     B. -- publish:端口映射,8201为容器的端口,9001是镜像的端口。

    注:程序的端口必须写死在程序中或dockerfile中,因为这里不能动态传参。

    运行如图:

    (2). 查看相应信息

      A. 在管理节点服务器上: 用指令【docker service ls】查看集群中的容器情况  , 【docker node ls】查看节点情况。

     B. 在工作节点服务器上,用指令【docker ps】查看

    4. 测试

     经测试,以下4个地址均可以正常访问。

     http://192.168.137.201:8201/weatherforecast    http://192.168.137.201:8202/weatherforecast  http://192.168.137.202:8201/weatherforecast  http://192.168.137.202:8202/weatherforecast

    5. 指令总结

     

    二. swarm+stack进行集群容器管理

    1. 环境准备

       同上。

    2. 搭建集群

       同上。

    3. stack构建容器步骤 

    (1). 在管理节点服务器上(201服务器)进行操作

      在工作目录上新建一个文件夹 【mkdir mystack】,然后新建一个docker-compose.yml文件【vi docker-compose.yml】,复制下面内容进去并保存。

    内容如下:

    {
      "version": "3.8",
      "services": {
        "api1": {
        "image": "ypfwebapi1", "ports": [ "8301:9001" ], "deploy": { "mode": "replicated", "replicas": 2 } }, "api2": {
        "image": "ypfwebapi2", "ports": [ "8302:9002" ], "deploy": { "mode": "replicated", "replicas": 2 } } } }

     PS: 这里个人倾向使用json格式,缩进的那种格式非常容易出错。 参数介绍详见:https://www.cnblogs.com/yaopengfei/p/13672708.html

    (2). 进入mystack文件下,运行下面指令进行发布,其中ypfstack1是 stack的名称。

    docker stack deploy -c docker-compose.yml ypfstack1

    (3). 查看相关信息

     A. 查看所有的stack  【docker stack ls】

     B. 查看所有的service 【docker service ls】

    4. 测试

     以下4个地址均能访问

     http://192.168.137.201:8301/weatherforecast   http://192.168.137.201:8302/weatherforecast  http://192.168.137.202:8301/weatherforecast  http://192.168.137.202:8302/weatherforecast

    5. 其他

     

    !

    • 作       者 : Yaopengfei(姚鹏飞)
    • 博客地址 : http://www.cnblogs.com/yaopengfei/
    • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
    • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
     
  • 相关阅读:
    使用ANY、Some或All关键字
    Exists 和 Not Exists
    in和not in
    斐波那契数列 迭代与递归效率对比
    欧几里得算法
    递归
    字符长串破解密码
    对return函数的认识
    global与nonlocal关键字总结
    闭包
  • 原文地址:https://www.cnblogs.com/yaopengfei/p/13710126.html
Copyright © 2011-2022 走看看