这篇文章主要围绕如何在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使用)
- 29. docker swarm 创建 三个节点 swarm 的集群
- Docker Compose比Docker Swarm和Docker Stack有什么好处?
- Docker Swarm Mode 学习笔记(创建 Swarm 集群)
- docker Swarm 中如何在docker-compose使用变量
如何在docker swarm上配置自动缩放?(docker swarm使用)
我想知道如何配置此工具,使其从最小数量的节点开始,并在需要时增长到最大数量的节点。
我应该使用其他工具还是docker swarm可以为我解决这个问题?
答案1
小编典典简短的答案 :目前尚无简便的方法可以使用Docker Swarm做到这一点。
Docker Swarm(或Swarm模式)不支持 自动缩放 机器。您需要为此使用另一种解决方案,例如docker-machine
在基础架构上创建计算机(使用docker)并将它们链接到现有Swarm集群(使用docker swarm join
)。
这将涉及大量脚本编写,但是其想法是监视群集的CPU /内存/网络使用情况(使用top
或monit
),一旦超出阈值(例如占群集总资源的 70%
),则触发脚本调用docker-machine
以进行扩展集群。使用您还可以通过按比例缩小同样的想法 排水 和 删除
节点(最好是Agent
从现有的群群集节点),一旦你是低于下限阈值。
如果要使用此条件,则需要确保监视资源的持续使用,否则基础架构会因资源使用的频繁和突然更改而产生并破坏节点。
您可以为集群中的计算机定义下限和上限,以使事物处于受控状态。
请注意,Swarm至少需要3个Manager
节点(推荐5个)来维护分布式共识算法的仲裁。因此 ,建议的最小下限是5个节点
(Agent
随着资源逐渐被服务使用,您可以随节点扩展)。
在某种程度上,您还可以查看Docker
InfraKit或Terraform,以进行
基础结构自动化 和运行状况 监视 。
更新 :现在有一个有前途的跨平台自动缩放器,它支持Swarm Mode 任务自动缩放
:Orbiter。尽管对于服务/机器自动缩放仍然没有现成的方法。
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.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 集群)
Swarm 集群由管理节点与工作节点组成。
初始化集群
使用命令:docker swarm init
如果你的 Docker 主机有多个网卡, 拥有多个 IP 地址, 必须使用 --advertise-addr
来指定 IP ,例如:
docker swarm init --addvertise-addr xxx.xxx.xxx.xxx
我们在 Docker 主机上执行了此命令之后, 即会初始化 Swarm 集群, 也会讲此 Docker 主机初始化为一个 Manager 节点。
增加工作节点
在初始化 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 集群管理节点的 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-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使用变量的相关知识,请在本站寻找。
本文标签: