您现在的位置是:首页 > 文章详情

docker1.12版本的swarm集群特性

日期:2016-08-05点击:568

    docker1.12版本之后集成了swarm模块,直接使用dokcer-engin就能很方便地创建一个docker集群,不用再像以前那样第三方配置。


环境:

        manager/node1  :  swarm_node1

                       node2  :   swarm_node2


1:首先在各节点上安装最新版dokcer

# curl -fsSL https://test.docker.com/ | sh # docker -v Docker version 1.12.0-rc4, build e4a0dbc


2:在node1上初始化一个swarm集群

   swarm_node1:

[root@swarm_node1 ~]# docker swarm init No --secret provided. Generated random secret:         dm18yjza2eb00wsbbk1hleq8q Swarm initialized: current node (4abdf6see9vqr83emyhdf529s) is now a manager. To add a worker to this swarm, run the following command:         docker swarm join --secret dm18yjza2eb00wsbbk1hleq8q \         --ca-hash sha256:cda112fa02a5c17850852b4d65366bb8484bcb204a46ae97063648b5545e277d \         192.168.1.131:2377


3:根据提示,把node2添加进swarm集群

    swarm_node2:

[root@swarm_node2 ~]#  docker swarm join --secret dm18yjza2eb00wsbbk1hleq8q --ca-hash sha256:cda112fa02a5c17850852b4d65366bb8484bcb204a46ae97063648b5545e277d  192.168.1.131:2377 This node joined a Swarm as a worker.

    提示节点添加成功。


4:查看集群状态,需在管理节点node1上:

[root@swarm_node1 ~]# docker swarm inspect [ { "ID": "0kx8spry37citf16ty448y65e", "Version": { "Index": 11 }, "CreatedAt": "2016-08-05T02:09:17.248225691Z", "UpdatedAt": "2016-08-05T02:09:17.861408652Z", "Spec": { "Name": "default", "AcceptancePolicy": { "Policies": [ { "Role": "worker", "Autoaccept": true, "Secret": "$2a$10$oqvNfMPFiKIrEvYrZENRGOxsJly8.QnzNZ7XDKkP20MN8027N3gxm" }, { "Role": "manager", "Autoaccept": false, "Secret": "$2a$10$oqvNfMPFiKIrEvYrZENRGOxsJly8.QnzNZ7XDKkP20MN8027N3gxm" } ] }, "Orchestration": { "TaskHistoryRetentionLimit": 10 }, "Raft": { "SnapshotInterval": 10000, "LogEntriesForSlowFollowers": 500, "HeartbeatTick": 1, "ElectionTick": 3 }, "Dispatcher": { "HeartbeatPeriod": 5000000000 }, "CAConfig": { "NodeCertExpiry": 7776000000000000 } } } ] [root@swarm_node1 ~]# docker node ls ID                            HOSTNAME      MEMBERSHIP  STATUS    AVAILABILITY   MANAGER   STATUS 4abdf6see9vqr83emyhdf529s *   swarm_node1   Accepted    Ready     Active         Leader cs95yh0c4c0fo892996m5wozk     swarm_node2   Accepted    Ready     Active

 可以看到各节点的状态(Active)和角色(Leader)等。


5:service管理

  1.12新增了service命令,用于管理一个服务。例如我们需要一个test的服务,需要两个容器,运行ping的命令:

[root@swarm_node1 ~]# docker service create --name test --replicas 2 centos ping 127.0.0.1 bgach5ib1uoubo2ljarrx48xu [root@swarm_node1 ~]# docker service ls ID NAME REPLICAS IMAGE COMMAND bgach5ib1uou test 0/2 centos ping 127.0.0.1      [root@swarm_node1 ~]# docker service tasks test ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE 5rw3fr6xdl3kojhh28qzg8yos test.1 test centos Preparing 21 seconds ago Running swarm_node1 1l9siyzbflljowd543c5ehdil test.2 test centos Preparing 21 seconds ago Running swarm_node2

 --repicas 2指定了服务的个数为2,可以看到在node1,node2上分别跑了一个容器,组成了一个test的服务。


6:service的错误恢复与容器迁移。

    service的新特性最大的亮点是错误迁移与恢复的机制,如果某一个节点上的docker服务下线了,或者服务器出现故障,swarm集群会检测service是否发生变动,如果发现某个节点故障,会在另外的节点恢复容器,以保证service的完整。

    比如,这时,我让swarm_node2退出swarm集群:

[root@swarm_node2 ~]# docker swarm leave Node left the swarm.

   再查看test服务:

[root@swarm_node1 ~]# docker service tasks test ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE 5rw3fr6xdl3kojhh28qzg8yos test.1 test centos Preparing 5 minutes ago Running swarm_node1 9pzt555uzeswik14lj6bp96hf test.2 test centos Preparing about a minute ago Running swarm_node1

 可以看到test这个服务依旧保持了2个容器,而且由于node2已经下线,容器全部迁移到了node1。

原文链接:https://blog.51cto.com/icenycmh/1834643
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章