Docker教程
Docker —— 从入门到实践 简介 什么是 Docker 为什么要使用 Docker? 基本概念 Docker 镜像 Docker 容器 Docker 仓库 安装 Ubuntu 系列安装 Docker CentOS 系列安装 Docker Docker 镜像 获取镜像 列出本地镜像 创建镜像 存出和载入镜像 移除本地镜像 镜像的实现原理 Docker 容器 启动容器 后台(background)运行 终止容器 进入容器 导出和导入容器 删除容器 仓库 Docker Hub 私有仓库 仓库配置文件 Docker 数据管理 数据卷 数据卷容器 利用数据卷容器来备份、恢复、迁移数据卷 Docker 中的网络功能介绍 外部访问容器 容器互联 高级网络配置 快速配置指南 配置 DNS 容器访问控制 映射容器端口到宿主主机的实现 配置 docker0 网桥 自定义网桥 工具和示例 编辑网络配置文件 示例:创建一个点到点连接 实战案例 使用 Supervisor 来管理进程 创建 tomcat/weblogic 集群 多台物理主机之间的容器互联(暴露容器到真实网络中) 标准化开发测试和生产环境 安全 内核名字空间 控制组 Docker服务端的防护 内核能力机制 其它安全特性 总结 Dockerfile 基本结构 指令 创建镜像 底层实现 基本架构 名字空间 控制组 联合文件系统 容器格式 Docker 网络实现 Docker Compose 项目 简介 安装 使用 Compose 命令说明 YAML 模板文件 Docker Machine 项目 简介 安装 使用 Docker Swarm 项目 简介 安装 使用 swarm 调度策略 Swarm 过滤器 etcd 什么是 etcd 安装 使用 etcdctl Fig 快速搭建基于 Docker 的隔离开发环境 安装 Fig Fig客户端参考 fig.yml 参考 环境变量参考 使用 Django 入门 Fig 使用 Rail 入门 Fig 使用 Wordpress 入门 Fig CoreOS CoreOS介绍 Kubernetes 项目简介 快速上手 基本概念 kubectl 使用 基本架构 Mesos 项目 简介 Mesos + Marathon 安装与使用 Mesos 基本原理与架构 Mesos 配置项解析 Mesos 常见框架 附录一 Docker命令查询 附录二 常见仓库介绍 Ubuntu CentOS MySQL MongoDB Redis Nginx WordPress Node.js 附录三 资源链接

发布于 2015-09-22 15:24:43 | 555 次阅读 | 评论: 0 | 来源: 网络整理

swarm支持多种调度策略来选择节点。每次在swarm启动container的时候,swarm会根据选择的调度策略来选择节点运行container。目前支持的有:spread,binpack和random。

在执行swarm manage命令启动 swarm 集群的时候可以通过 --strategy 参数来指定,默认的是spread。

spread和binpack策略会根据每台节点的可用CPU,内存以及正在运行的containers的数量来给各个节点分级,而random策略,顾名思义,他不会做任何的计算,只是单纯的随机选择一个节点来启动container。这种策略一般只做调试用。

使用spread策略,swarm会选择一个正在运行的container的数量最少的那个节点来运行container。这种情况会导致启动的container会尽可能的分布在不同的机器上运行,这样的好处就是如果有节点坏掉的时候不会损失太多的container。

binpack 则相反,这种情况下,swarm会尽可能的把所有的容器放在一台节点上面运行。这种策略会避免容器碎片化,因为他会把未使用的机器分配给更大的容器,带来的好处就是swarm会使用最少的节点运行最多的容器。

spread 策略

先来演示下 spread 策略的情况。

rio@083:~$ sudo docker run -d -p 2376:2375 -v $(pwd)/cluster:/tmp/cluster swarm manage --strategy=spread file:///tmp/cluster
7609ac2e463f435c271d17887b7d1db223a5d696bf3f47f86925c781c000cb60
ats@sclu083:~$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
7609ac2e463f        swarm:latest        "/swarm manage --str   6 seconds ago       Up 5 seconds        0.0.0.0:2376->2375/tcp   focused_babbage

三台机器除了83运行了 Swarm之外,其他的都没有运行任何一个容器,现在在85这台节点上面在swarm集群上启动一个容器

rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-1 -d -P redis
2553799f1372b432e9b3311b73e327915d996b6b095a30de3c91a47ff06ce981
rio@085:~$ sudo docker -H 192.168.1.83:2376 ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                  PORTS                          NAMES
2553799f1372        redis:latest        /entrypoint.sh redis   24 minutes ago      Up Less than a second   192.168.1.84:32770->6379/tcp   084/node-1

启动一个 redis 容器,查看结果


rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-2 -d -P redis
7965a17fb943dc6404e2c14fb8585967e114addca068f233fcaf60c13bcf2190
rio@085:~$ sudo docker -H 192.168.1.83:2376 ps
CONTAINER ID        IMAGE                            COMMAND                CREATED                  STATUS              PORTS                           NAMES
7965a17fb943        redis:latest   /entrypoint.sh redis   Less than a second ago   Up 1 seconds        192.168.1.124:49154->6379/tcp   124/node-2                  
2553799f1372        redis:latest                     /entrypoint.sh redis   29 minutes ago           Up 4 minutes        192.168.1.84:32770->6379/tcp    084/node-1

再次启动一个 redis 容器,查看结果

rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-3 -d -P redis
65e1ed758b53fbf441433a6cb47d288c51235257cf1bf92e04a63a8079e76bee
rio@085:~$ sudo docker -H 192.168.1.83:2376 ps
CONTAINER ID        IMAGE                            COMMAND                CREATED                  STATUS              PORTS                           NAMES
7965a17fb943        redis:latest                     /entrypoint.sh redis   Less than a second ago   Up 4 minutes        192.168.1.227:49154->6379/tcp   124/node-2
65e1ed758b53        redis:latest                     /entrypoint.sh redis   25 minutes ago           Up 17 seconds       192.168.1.83:32770->6379/tcp    083/node-3
2553799f1372        redis:latest                     /entrypoint.sh redis   33 minutes ago           Up 8 minutes        192.168.1.84:32770->6379/tcp    084/node-1

可以看到三个容器都是分布在不同的节点上面的。

binpack 策略

现在来看看binpack策略下的情况。在083上面执行命令:

rio@083:~$ sudo docker run -d -p 2376:2375 -v $(pwd)/cluster:/tmp/cluster swarm manage --strategy=binpack  file:///tmp/cluster
f1c9affd5a0567870a45a8eae57fec7c78f3825f3a53fd324157011aa0111ac5

现在在集群中启动三个 redis 容器,查看分布情况:

rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-1 -d -P redis
18ceefa5e86f06025cf7c15919fa64a417a9d865c27d97a0ab4c7315118e348c
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-2 -d -P redis
7e778bde1a99c5cbe4701e06935157a6572fb8093fe21517845f5296c1a91bb2
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-3 -d -P redis
2195086965a783f0c2b2f8af65083c770f8bd454d98b7a94d0f670e73eea05f8
rio@085:~$ sudo docker -H 192.168.1.83:2376 ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                  PORTS                          NAMES
2195086965a7        redis:latest        /entrypoint.sh redis   24 minutes ago      Up Less than a second   192.168.1.83:32773->6379/tcp   083/node-3
7e778bde1a99        redis:latest        /entrypoint.sh redis   24 minutes ago      Up Less than a second   192.168.1.83:32772->6379/tcp   083/node-2
18ceefa5e86f        redis:latest        /entrypoint.sh redis   25 minutes ago      Up 22 seconds           192.168.1.83:32771->6379/tcp   083/node-1

可以看到,所有的容器都是分布在同一个节点上运行的。

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务