设为首页 收藏本站
查看: 735|回复: 0

[经验分享] docker-集群的管理-swarm

[复制链接]

尚未签到

发表于 2017-2-6 09:28:35 | 显示全部楼层 |阅读模式
  使用docker引擎的swarm模式是v1.12.0版本以后的新特性,我们使用docker cli创建一个swarm,部署和管理应用服务集群。
swarm集群特色
docker引擎综合了集群管理功能:
默认自带集群服务的管理工具,不需要额外的工具。
分布式的设计思路:
部署docker时不区分节点角色,当启动时根据不同角色使用不同参数。docker引擎分为管理器和工作程序 ,这就意味着你可以使用一个磁盘构建一个完整集群。

服务声明模式
docker引擎可以让你在海量应用服务里面,给服务定义你想要状态。例如:你可以描述一个程序服务集群包括消息队列服务,数据库后端,web前端组成。
服务的弹性可伸缩
       对于你想要运行的每个服务你可以声明想要运行的任务数。当你批量启动和停止服务时,swarm集群管理器自动适应添加和移除任务来达到你想要维护的服务状态
服务状态自愈
swarm管理器通过不断的监控集群状态,让集群从现实状态不断接近你期望的状态。例如:你现在需要运行10个容器副本,并且其中两个容器副本worker机器崩溃了,这个swarm manager将创建两个容器副本来替换崩溃的这两个副本。
多主机网络
你可以创建容器指定一个覆盖型网络。swarm 管理器初始化或更新应用程序时,会自动为覆盖网络上的容器分配地址。
服务发现机制
swarm管理器节点会分配给每个服务唯一dns容器名并负载均各个容器。您可以通过嵌入在swarm中的DNS服务器查询在群中运行的每个容器。
负载均衡
你可以使用容器暴露的端口使用外部应用进行负载均衡,在内部你可以使用swarm指定如何在节点之间分发服务容器。
默认安全网络
每个swarm的节点里强制使用TLS双向认证和加密传输,以保证本机和其它节点间通讯安全。这里你可以使用自签名的证书或者自定义CA的证书。
滚动更新
      在升级时你可以渐进的升级(滚动升级),swarm管理器可以控制多同节点间的调度部署升级的延时,一旦出现问题你可以回退到之前版本。


下面是swarm的重要概念和教程:

         在docker引擎v1.12集成了swarmkit,主要包含了集群管理,编排功能。所以docker可以使用swarm模式创建一个集群或者加入一个现有集群。
swarm内分为service(服务)和node(节点)管理。
swarm节点分为两个角色:manager节点和Worker节点.
wKioL1iPOcHjiRFMAAJUocJEWaA916.jpg
manager模式:任务的分派,执行编排,集群管理(集群状态,任务数维持).
Worker模式:接受并执行manager节点分派任务.默认情况下,manager节点还将服务作为Worker节点运行,当你把它配置为manager-only的时候就可以为独占管理器了。agent在每个worker 节点上运行,并报告分配给它的任务。Worker节点向manager节点通知其分配的任务的当前状态,使得manager可以维持每个Worker的期望状态。
wKioL1iPOuLSvE7ZAAGiW52MVSE421.jpg



这里swarm为了方便管理,使用了分片的概念,每个容器为一个分片,就像Elasticsearch的数据分片有点类似。如下图:
wKioL1iPPTnC-j1fAAETp_HnUFk307.jpg

下面介绍下swarm的入门示例:

创建集下面几步:
1.在swarm模式下初始化一组docker引擎
2.添加节点到集群
3.部署应用服务到集群
4.通过swarm管理任何运行的东西

准备资源:
三个节点
docker>=1.12版本
管理主机ip地址
互相之间端口开放
集群管理节点需要使用tcp 2377端口
普通节点通讯使用tcp 和udp的7946端口
覆盖型网络流量端口tcp和udp的4789,50端口

在salt-node1初始化swarm
--advertise-addr 192.168.9.100 #发布对外服务地址,manage角色。
下面输出的内容是加入集群的方法。节点将作为manager或Worker加入,具体取决于--token标志的值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[iyunv@salt-node1
salt]# docker swarm init --advertise-addr 192.168.198.116
Swarm
initialized: current node (2pzv4kzc2p8f7c4wqlfupp9h9) is now a manager.

To add a
worker to this swarm, run the following command:

    docker swarm join \
    --token
SWMTKN-1-4gempr5ydp6d332n5ygsmnf0c25u46mp78aptbl9gda5fw8l71-83ugwkfczgkwmj919lqbqsjfy
\
    192.168.198.116:2377

To add a
manager to this swarm, run 'docker swarm join-token manager' and follow the
instructions.





查询如何加入本集群
1
2
3
4
5
6
7
8
9
10
[iyunv@salt-node1
salt]# docker swarm join-token worker
To add a worker to
this swarm, run the following command:

    docker swarm join \
    --token
SWMTKN-1-4gempr5ydp6d332n5ygsmnf0c25u46mp78aptbl9gda5fw8l71-83ugwkfczgkwmj919lqbqsjfy
\
    192.168.198.116:2377





#加入一个节点
1
2
3
4
5
6
7
8
[iyunv@salt-node2
salt]# docker swarm join \
>     --token
SWMTKN-1-4gempr5ydp6d332n5ygsmnf0c25u46mp78aptbl9gda5fw8l71-83ugwkfczgkwmj919lqbqsjfy
\
>     192.168.198.116:2377
This node joined a
swarm as a worker.




#加入一个节点
1
2
3
4
5
6
7
8
[iyunv@salt-node3
salt]# docker swarm join \
>     --token
SWMTKN-1-4gempr5ydp6d332n5ygsmnf0c25u46mp78aptbl9gda5fw8l71-83ugwkfczgkwmj919lqbqsjfy
\
>     192.168.198.116:2377
This node joined a
swarm as a worke





查看当前swarm状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[iyunv@salt-node1
salt]# docker info
Containers: 12
Running: 0
Paused: 0
Stopped: 12
Images: 54
Server Version:
1.13.0
…………..
Logging Driver:
json-file
Cgroup Driver:
cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm:
active
NodeID: 2pzv4kzc2p8f7c4wqlfupp9h9
Is Manager: true
ClusterID: lndygvfpz9mk09to8iw56s6bb
Managers: 1
Nodes: 3
Orchestration:
  Task History Retention Limit: 5
Raft:
  Snapshot Interval: 10000
  Number of Old Snapshots to Retain: 0
  Heartbeat Tick: 1
  Election Tick: 3
Dispatcher:
  Heartbeat Period: 5 seconds
CA Configuration:
  Expiry Duration: 3 months
Node Address: 192.168.198.116
Manager Addresses:
  192.168.198.116:2377
Runtimes: runc
………




查看当前集群节点
下面的“*”代表你连接的节点。
1
2
3
4
5
6
7
8
9
10
11
[iyunv@salt-node1
salt]# docker node ls
ID                           HOSTNAME    STATUS
AVAILABILITY  MANAGER STATUS
2pzv4kzc2p8f7c4wqlfupp9h9
*  salt-node1  Ready  
Active        Leader
g36lvv23ypjd8v7ovlst2n3yt    salt-node3
Ready   Active      
h14re9viizbs5yj3zunuo9zo8    salt-node2
Ready   Active





部署服务到集群
连接到manager节点创建一个服务,参数描述:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--name指定helloworld 服务
--replicas 1 指定生成一个容器分片
--name helloworld  集群名称helloworld
alpine            镜像名称,默认latest版本
ping docker.com  执行命令

[iyunv@salt-node1
salt]# docker service create --replicas 1 --name helloworld alpine ping
docker.com
091zwwscs8rjv58a6vpev9ztj
[iyunv@salt-node1
salt]# docker ps
CONTAINER ID        IMAGE                                                                           
COMMAND             CREATED             STATUS              PORTS               NAMES
17d5a5b9752b      
alpine@sha256:dfbd4a3a8ebca874ebd2474f044a0b33600d4523d03b0df76e5c5986cb02d7e8   "ping docker.com"   5 seconds ago       Up 2 seconds                           
helloworld.1.tkqacb1kb0pftn5zaljff5g15

docker service
create --name my_web --replicas 3 --publish 8080:80 nginx
把容器的80端口暴露到本机的8080端口





批量启动节点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[iyunv@salt-node1
salt]# docker service scale helloworld=5
helloworld scaled to
5

[iyunv@salt-node1
salt]# docker service ls --filter name=redis3
ID            NAME    MODE      
REPLICAS  IMAGE
ig4hg5e8233r  redis3
replicated  3/3      
registry.cn-hangzhou.aliyuncs.com/forker/redis:latest



$ docker service
create --mode global --name backend backend:latest
b4g08uwuairexjub6ome6usqh
$ docker service
scale backend=10
backend: scale can
only be used with replicated mode




查看服务状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[iyunv@salt-node1
salt]# docker service inspect --pretty helloworld

ID:                091zwwscs8rjv58a6vpev9ztj
Name:                helloworld
Service
Mode:        Replicated
Replicas:        5
Placement:
UpdateConfig:
Parallelism:        1
On
failure:        pause
Max failure ratio: 0
ContainerSpec:
Image:                alpine:latest@sha256:dfbd4a3a8ebca874ebd2474f044a0b33600d4523d03b0df76e5c5986cb02d7e8
Args:                ping
docker.com
Resources:
Endpoint
Mode:        vip




服务信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[iyunv@salt-node1
salt]# docker service inspect --pretty helloworld

ID:                091zwwscs8rjv58a6vpev9ztj
Name:                helloworld
Service
Mode:        Replicated
Replicas:        1
Placement:
UpdateConfig:
Parallelism:        1
On
failure:        pause
Max failure ratio: 0
ContainerSpec:
Image:                alpine:latest@sha256:dfbd4a3a8ebca874ebd2474f044a0b33600d4523d03b0df76e5c5986cb02d7e8
Args:                ping
docker.com
Resources:
Endpoint
Mode:        vip





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-338091-1-1.html 上篇帖子: docker-部署私有仓库Registry 下篇帖子: Centos7 安装docker
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表