GVKun编程网logo

如何在docker swarm上配置自动缩放?(docker swarm使用)

26

这篇文章主要围绕如何在dockerswarm上配置自动缩放?和dockerswarm使用展开,旨在为您提供一份详细的参考资料。我们将全面介绍如何在dockerswarm上配置自动缩放?的优缺点,解答d

这篇文章主要围绕如何在docker swarm上配置自动缩放?docker swarm使用展开,旨在为您提供一份详细的参考资料。我们将全面介绍如何在docker swarm上配置自动缩放?的优缺点,解答docker swarm使用的相关问题,同时也会为您带来29. docker swarm 创建 三个节点 swarm 的集群、Docker Compose比Docker Swarm和Docker Stack有什么好处?、Docker Swarm Mode 学习笔记(创建 Swarm 集群)、docker Swarm 中如何在docker-compose使用变量的实用方法。

本文目录一览:

如何在docker swarm上配置自动缩放?(docker swarm使用)

如何在docker swarm上配置自动缩放?(docker swarm使用)

我想知道如何配置此工具,使其从最小数量的节点开始,并在需要时增长到最大数量的节点。

我应该使用其他工具还是docker swarm可以为我解决这个问题?

答案1

小编典典

简短的答案 :目前尚无简便的方法可以使用Docker Swarm做到这一点。

Docker Swarm(或Swarm模式)不支持 自动缩放 机器。您需要为此使用另一种解决方案,例如docker-machine在基础架构上创建计算机(使用docker)并将它们链接到现有Swarm集群(使用docker swarm join)。

这将涉及大量脚本编写,但是其想法是监视群集的CPU /内存/网络使用情况(使用topmonit),一旦超出阈值(例如占群集总资源的 70%
),则触发脚本调用docker-machine以进行扩展集群。使用您还可以通过按比例缩小同样的想法 排水删除
节点(最好是Agent从现有的群群集节点),一旦你是低于下限阈值。

如果要使用此条件,则需要确保监视资源的持续使用,否则基础架构会因资源使用的频繁和突然更改而产生并破坏节点。

您可以为集群中的计算机定义下限和上限,以使事物处于受控状态。

请注意,Swarm至少需要3个Manager节点(推荐5个)来维护分布式共识算法的仲裁。因此 ,建议的最小下限是5个节点
Agent随着资源逐渐被服务使用,您可以随节点扩展)。

在某种程度上,您还可以查看Docker
InfraKit或Terraform,以进行
基础结构自动化 和运行状况 监视

更新 :现在有一个有前途的跨平台自动缩放器,它支持Swarm Mode 任务自动缩放
:Orbiter。尽管对于服务/机器自动缩放仍然没有现成的方法。

29. docker swarm 创建 三个节点 swarm 的集群

29. docker swarm 创建 三个节点 swarm 的集群

1.使用 vagrant 部署 三台 centos/7 的 环境

###Vagrantfile

# -*- mode: ruby -*-

# vi: set ft=ruby :

Vagrant.require_version ">= 1.6.0"

boxes = [

    {

            :name=>"docker-host",

            :eth1=>"192.168.205.10",

            :mem=>"1024",

            :cpu=>"1",

            :port=>"8888"

    },

    {

            :name=>"docker-node1",

            :eth1=>"192.168.205.11",

            :mem=>"1024",

            :cpu=>"1",

            :port=>"8889"

    },

    {

            :name=>"docker-node2",

            :eth1=>"192.168.205.12",

            :mem=>"1024",

            :cpu=>"1",

            :port=>"8890"

    }

]

Vagrant.configure(2) do |config|

config.vm.box = "centos/7"

boxes.each do |opts|

config.vm.define opts[:name] do |config|

config.vm.hostname = opts[:name]

config.vm.network "forwarded_port", guest: 80, host: opts[:port]

config.vm.provider "vmware_fusion" do |v|

v.vmx["memsize"] = opts[:mem]

v.vmx["numvcpus"] = opts[:cpu]

end

config.vm.provider "virtualbox" do |v|

v.customize ["modifyvm", :id, "--memory", opts[:mem]]

v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]

end

config.vm.network :private_network, ip: opts[:eth1]

end

end

config.vm.synced_folder "./labs", "/home/vagrant/labs"

config.vm.provision "shell", privileged: true, path: "./setup.sh"

end

 

2.编写 setup.sh

 

###setup.sh

 

#/bin/sh

# install some tools

sudo yum install -y wget

sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak

sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

sudo yum makecache

sudo yum -y update

sudo yum install -y git vim gcc glibc-static telnet bridge-utils

# install docker

curl -fsSL get.docker.com -o get-docker.sh

sh get-docker.sh

# start docker service

sudo groupadd docker

sudo usermod -aG docker vagrant

sudo systemctl start docker

rm -rf get-docker.sh

sudo tee /etc/docker/daemon.json <<-''EOF''

{

"registry-mirrors": ["https://v2ltjwbg.mirror.aliyuncs.com"]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

docker version

 

3.创建labs 文件夹 并启动容器

  mkdir  lables

  vagrant up

4. 进去 host 节点

  vagrant ssh docker-host

  声明 manager 节点

  docker swarm init --advertise-addr=192.168.205.10

  只需要 在其他节点运行这段代码 即可 进入这个节点

5. 进入node1节点 并 加入 swarm 集群

  进入docker-node1 节点

    vagrant ssh docker-node1

  运行刚刚生成的代码即可加入 swarm 集群

    docker swarm join --token SWMTKN-1-29cjw98xafo5454juq28ldear34aafbp1n616wilrnjl0q92jz-dt02qoe4nhe98mf6jon9rukca 192.168.205.10:2377

  在 host 节点查看集群节点情况

    docker-host 下

    docker node ls

  docker-node2 节点同理

 

6. 在 docker-machine 上进行 swarm 安装

  docker-machine create swarm-manager

  docker-machine create swarm-node1

  docker-machine create swarm-node2

  同理 加入

7. 在 labs.play-with-docker.com

  常见三个虚拟主机即可运行上面的命令即可

Docker Compose比Docker Swarm和Docker Stack有什么好处?

Docker Compose比Docker Swarm和Docker Stack有什么好处?

从我读到的内容来看,似乎Docker-Compose是一个在单个主机上创建多个容器的工具,而Docker Swarm是一个可以完全相同但具有更多控制权的工具,并且在Docker Stack的帮助下可以在多个主机上完成.我浏览了教程,也遇到了这个帖子:

docker-compose.yml vs docker-stack.yml what difference?

而且我得出的结论是,当你可以将Docker Swarm与Docker Stack一起使用时,没有理由使用Docker-Compose.他们甚至可以使用相同的docker-compose.yml.

似乎Docker-compose出现在swarm和堆栈之前,并且可能是swarm堆栈的新解决方案使得compose过时,但它仍然是遗留原因.这个想法是否正确?如果没有,在构建开发或生产环境方面,Docker-Compose对Docker Swarm和Docker Stack有什么好处?

最佳答案

It seems that Docker-compose came before the swarm and stack and maybe the new solution of swarm + stack makes compose obsolete,but it still remains for legacy reasons. Is this thinking correct?

简而言之,是的. Compose在所有Swarm之前出现(它起源于名为fig的第三方实用程序).更糟糕的是,甚至还有两个不同的Swarms,旧的Swarm(一个是单独的工具)和Swarm模式(这些日子内置于docker二进制文件中).

它似乎正在演变为内置于Docker中的服务和部署概念.但我猜想Docker Compose和Swarm Mode部署的东西会并存一段时间.

知道Docker Compose基础是一个名为libcompose(https://github.com/docker/libcompose)的库是有益的,其他第三方实用程序使用它来支持用于部署的docker-compose.yml文件格式(参见Rancher和rancher-compose作为示例) .我想他们会努力继续支持libcompose.

我不清楚Docker Swarm部署的东西是否实际上使用了libcompose.在我粗略的搜索中,Swarm模式似乎没有实现libcompose并且做了自己的事情.我不确定这与Docker Compose和libcompose的未来有何关系.你认为合适的解释……

Docker Swarm Mode 学习笔记(创建 Swarm 集群)

Docker Swarm Mode 学习笔记(创建 Swarm 集群)

Swarm 集群由管理节点与工作节点组成。

初始化集群

使用命令:docker swarm init

如果你的 Docker 主机有多个网卡, 拥有多个 IP 地址, 必须使用 --advertise-addr 来指定 IP ,例如:

docker swarm init --addvertise-addr xxx.xxx.xxx.xxx

我们在 Docker 主机上执行了此命令之后, 即会初始化 Swarm 集群, 也会讲此 Docker 主机初始化为一个 Manager 节点。

Swarm初始化

增加工作节点

在初始化 Swarm 集群之后, 我们也拥有了一个管理节点。如上图所示,添加工作节点可以在其他 Docker 主机上执行:

docker swarm join --token SWMTKN-1-3b10lvrdqihuiuig8sabov8hvq3m64sk2hqt07fnww15wsptlt-diw13ezqycdaeznmmmy0ldl0y 192.168.65.3:2377 (这里的 join-token 与IP地址视实际情况而定)

增加工作节点

docker swarm join-token manager

例如,如果想增加一个工作节点加入到上面初始化的 Swarm 集群中,执行下面的命令:

docker swarm join-token manager

Swarm集群增加管理节点

这样我们就能查看到 Swarm 集群管理节点的 join-token,接着执行

docker swarm join --token SWMTKN-1-3b10lvrdqihuiuig8sabov8hvq3m64sk2hqt07fnww15wsptlt-1w7qtjbkp62svewsceyhii8cy 192.168.65.3:2377 (这里的 join-token 与IP地址视实际情况而定)

查看集群

docker node ls

查看集群节点

注意上面有一项为 Manager Status ,即管理节点状态。这里一个集群只会有一个 leader , 可以有多个 Manager , 多个 Worker 。

docker Swarm 中如何在docker-compose使用变量

docker Swarm 中如何在docker-compose使用变量

先看一个docker-comose的yml文件

version: "3.2"
services:
  docker-test:
    hostname: docker-test
    image: ''${DOCKER_REGISTRY_URL}/dockerteam/docker-test:1.0''
    ports:
      - "9118"
    env_file: .env
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
      placement:
        constraints: [node.role== worker]
      resources:
        limits:
#          cpus: ''1''
          memory: 1GB
        reservations:
#          cpus: ''0.2''
          memory: 512M

如上文件中,env_file在docker-comose 命令里是支持的,只需要提供对应的.env文件,在.env文件中设置${DOCKER_REGISTRY_URL}变量即可。

但是如果线上在docker swarm 集群环境中docker-comose使用env_file是无效的,那这时候怎么办?这时候不能再去使用.env文件了,我尝试了一下把变量加入到宿主机的环境变量里:

 export DOCKER_REGISTRY_URL=docker.sifu.cn:12135

再次运行docker stack命令,服务部署成功。

注意:上述的加入环境变量我只是做测试之用,如果真实情况,请在/etc/profile文件里添加对应的环境变量

关于如何在docker swarm上配置自动缩放?docker swarm使用的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于29. docker swarm 创建 三个节点 swarm 的集群、Docker Compose比Docker Swarm和Docker Stack有什么好处?、Docker Swarm Mode 学习笔记(创建 Swarm 集群)、docker Swarm 中如何在docker-compose使用变量的相关知识,请在本站寻找。

本文标签: