开始试用docker的swarm模式
2016-06-21 15:05
561 查看
开始试用docker的swarm模式
docker 1.12以及之后的版本集成了swarmkit等编排服务,现在docker的版本为1.12-rc2版本。本文来尝试试用此种模式建立原生的docker集群本文将包含如下几点:
在swarm模式下初始化一个docker引擎的集群
添加节点至swarm中
发布一个应用服务到swarm中
当运行起来之后进行swarm管理
设置
尝试本例子需要如下几点要求:三台网络互通的宿主机:
安装1.12或更高版本的docker
管理节点的IP地址
开启宿主机之间的端口
TCP端口2377集群管理端口
TCP与UDP端口7946节点之间通讯端口
TCP与UDP端口4789 overlay网络通讯端口
iptables -A INPUT -p tcp --dport 2377 -j ACCEPT iptables -A INPUT -p tcp --dport 7946 -j ACCEPT iptables -A INPUT -p udp --dport 7946 -j ACCEPT iptables -A INPUT -p tcp --dport 4789 -j ACCEPT iptables -A INPUT -p udp --dport 4789 -j ACCEPT
创建swarm集群
创建管理节点
docker swarm init --listen-addr <MANAGER-IP>:<PORT>
如下所示:
[root@centos01 container]# docker swarm init --listen-addr 172.18.18.201:2377 Swarm initialized: current node (4am2qb52uw8r2ubxlkq3bxzyl) is now a manager. [root@centos01 container]# docker info Containers: 11 Running: 7 Paused: 0 Stopped: 4 Images: 5 Server Version: 1.12.0-rc1 Storage Driver: devicemapper Pool Name: docker-253:0-2098542-pool Pool Blocksize: 65.54 kB Base Device Size: 10.74 GB Backing Filesystem: xfs Data file: /dev/loop0 Metadata file: /dev/loop1 Data Space Used: 1.251 GB Data Space Total: 107.4 GB Data Space Available: 36.45 GB Metadata Space Used: 2.642 MB Metadata Space Total: 2.147 GB Metadata Space Available: 2.145 GB Thin Pool Minimum Free Space: 10.74 GB Udev Sync Supported: true Deferred Removal Enabled: false Deferred Deletion Enabled: false Deferred Deleted Device Count: 0 Data loop file: /var/lib/docker/devicemapper/devicemapper/data WARNING: Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning. Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata Library Version: 1.02.107-RHEL7 (2015-12-01) Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: null bridge host overlay Swarm: active NodeID: 4am2qb52uw8r2ubxlkq3bxzyl IsManager: Yes Managers: 1 Nodes: 1 CACertHash: sha256:4306ba735e22975ecba482e122e881fc1cac28ed43443e0bf1a4397f354f2cb3 Runtimes: default Default Runtime: default Kernel Version: 4.6.2-1.el7.elrepo.x86_64 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 2 Total Memory: 992 MiB Name: centos01 ID: 5OPS:GL5A:IKVO:74U5:3T3T:EBSW:5REH:USD3:AM3S:DRU4:ZLOW:EEKK Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ WARNING: bridge-nf-call-ip6tables is disabled Insecure Registries: 127.0.0.0/8 [root@centos01 container]# docker node ls ID NAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS LEADER 4am2qb52uw8r2ubxlkq3bxzyl * centos01 Accepted Ready Active Reachable Yes
添加节点到集群
在节点机器上运行如下命令docker swarm join <MANAGER-IP>:<PORT>
如:
docker swarm join 172.18.18.201:2377 This node joined a Swarm as a worker.
在manager节点上查看节点
[vagrant@centos01 ~]$ docker node ls ID NAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS LEADER 8i07v3mx5ogdz1z68iide3yrn centos03 Accepted Ready Active cioe124z1315ucs5rwd8n2mdv * centos01 Accepted Ready Active Reachable Yes dfsp35af3tvt1ztf6ffcehtko centos02 Accepted Ready Active
发布服务
在manager上执行如下命令:
[vagrant@centos01 ~]$ docker service create --replicas 1 --name helloworld alpine ping docker.com 6gxhvlwx8uqbio7fn2yxnw1yg
docker service create命令创建一个 service.
--name标签命名service为helloworld.
--replicas标签来详细声明1个运行实体.
参数
alpine ping docker.com定义执行
pingg docker.com作为alpine容器的服务.
使用docker service ls
查看服务
[vagrant@centos01 ~]$ docker service ls ID NAME SCALE IMAGE COMMAND 6gxhvlwx8uqb helloworld 1 alpine ping docker.com
使用docker service inspect
审查服务
[vagrant@centos01 ~]$ docker service inspect --pretty helloworld ID: 6gxhvlwx8uqbio7fn2yxnw1yg Name: helloworld Mode: REPLICATED Replicas: 1 Placement: Strategy: SPREAD UpateConfig: Parallelism: 1 ContainerSpec: Image: alpine Args: ping docker.com
使用docker service tasks <SERVICE-ID>
查看服务运行在哪个节点上
[vagrant@centos01 ~]$ docker service tasks helloworld ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE 30nkhczhr8g1ot6jh9couixed helloworld.1 helloworld alpine Running 10 minutes Running centos01 [vagrant@centos01 ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8b1e88baadfd alpine:latest "ping docker.com" 10 minutes ago Up 10 minutes helloworld.1.30nkhczhr8g1ot6jh9couixed
Scale service
docker service scale <SERVICE-ID>=<NUMBER-OF-TASKS>
如:
[vagrant@centos01 ~]$ docker service scale helloworld=5 helloworld scaled to 5 [vagrant@centos01 ~]$ docker service tasks helloworld ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE 30nkhczhr8g1ot6jh9couixed helloworld.1 helloworld alpine Running 13 minutes Running centos01 3g2ini5ovypy24umr85grcm6g helloworld.2 helloworld alpine Preparing 19 seconds Running centos03 4trr53ebdpzxo7wnjfet7gpl6 helloworld.3 helloworld alpine Preparing 19 seconds Running centos02 38t0tzje48uk63ros32olrfou helloworld.4 helloworld alpine Preparing 19 seconds Running centos02 exe4vkbsbaoy2l2lwylbi9g8o helloworld.5 helloworld alpine Running 19 seconds Running centos01
删除service
[vagrant@centos01 ~]$ docker service rm helloworld helloworld [vagrant@centos01 ~]$ docker service inspect helloworld [] Error: no such service: helloworld
滚动升级
$ docker service create --replicas 3 --name redis --update-delay 10s --update-parallelism 1 redis:3.0.6 0u6a4s31ybk7yw2wyvtikmu50 [root@centos01 docker]# docker service ls ID NAME SCALE IMAGE COMMAND 3h9kbnrw5lgg redis 3 redis:3.0.6 [root@centos01 docker]# docker service tasks redis ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE bstvlwynaw6shfv9rgiinyuvp redis.1 redis redis:3.0.6 Running 16 minutes Running centos03 7xnp1n5ii9667xbvr1eaefyqu redis.2 redis redis:3.0.6 Running 16 minutes Running centos02 8w3pnr57j0sb8jpieu9wkuudf redis.3 redis redis:3.0.6 Running 16 minutes Running centos01 [vagrant@centos01 ~]$ docker service update --image redis:3.0.7 redis redis [root@centos01 docker]# docker service ls ID NAME SCALE IMAGE COMMAND 3h9kbnrw5lgg redis 3 redis:3.0.7 [root@centos01 docker]# docker service tasks redis ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE bstvlwynaw6shfv9rgiinyuvp redis.1 redis redis:3.0.6 Running 17 minutes Running centos03 bkq2qi6j5uq6tl3jn37nurq0z redis.2 redis redis:3.0.7 Preparing 6 seconds Running centos02 8w3pnr57j0sb8jpieu9wkuudf redis.3 redis redis:3.0.6 Running 17 minutes Running centos01 [vagrant@centos01 ~]$ docker service inspect --pretty redis ID: 3h9kbnrw5lggasae7zl8umw7m Name: redis Mode: REPLICATED Replicas: 3 Placement: Strategy: SPREAD UpateConfig: Parallelism: 1 Delay: 10s ContainerSpec: Image: redis:3.0.7
--update-parallelism标签配置服务中同步升级的任务数量.
--update-delay标签配置一个服务任务或一系列任务升级的时延.
node下线
有些时候需要维护一个节点,此时此节点可能会网络断开或者需要关机,造成节点上服务可用。使用docker node update --availability drain <NODE-ID>将节点下线,swarm会将当前节点上的容器关闭并在其他节点上启动。当维护完成,需要上线是,将节点状态修改为active状态即可,命令如下:
docker node update --availability active <NODE-ID>
相关文章推荐
- 100 个最佳 Ubuntu 应用(中)
- 在 AppImage、Flathub 和 Snapcraft 平台上搜索 Linux 应用
- RedHat 5.8 安装Oracle 11gR2_Grid集群
- windows用windeployqt发布qt quick application程序
- mysql集群之MMM简单搭建
- 【DevOps】为什么我们永远疲于奔命?
- 24 个必备的 Linux 应用程序
- 注册表趣味应用小集
- 远程控制技术的应用
- 网络管理之IP地址篇
- 文件的读出 编辑 管理
- 路由器访问列表的应用
- xDSL技术及其应用
- 基于XML的桌面应用
- Java 版的 Ruby 解释器 JRuby 1.7.14 发布
- Fedora Linux 7 Test 4 发布 下载地址
- SQL Server 2008 R2 应用及多服务器管理
- Node.js 应用跑得更快 10 个技巧