docker Swarm集群配置

前言:

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。
Docker Swarm集群中有三个角色:manager(管理者);worker(实际工作者)以及service(服务)。
在上面的三个角色中,其本质上与我们公司的组织架构类似,有领导(manager),有搬砖的(worker),而领导下发给搬砖者的任务,就是Docker Swarm中的service(服务)。
需要注意的是,在一个Docker Swarm群集中,每台docker服务器的角色可以都是manager,但是,不可以都是worker,也就是说,不可以群龙无首,并且,参与群集的所有主机名,千万不可以冲突。

Docker Swarm规划

Docker安装

 [[email protected] ~]#  wget  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 [[email protected] ~]# mv docker-ce.repo  /etc/yum.repos.d/
 [[email protected] ~]#  yum install -y docker-ce
 [[email protected] ~]#  systemctl  daemon-reload
 [[email protected] ~]# systemctl  start docker  

设置互通和开放iptables访问(三台都执行)

 [[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub  k8s-master01:
 [[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub  k8s-node03:
 [[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub  k8s-node02:
 [[email protected] ~]# iptables -A INPUT -p tcp  -s 192.168.1.29 -j ACCEPT
 [[email protected] ~]# iptables -A INPUT -p tcp  -s 192.168.1.101 -j ACCEPT         

设置集群

设置k8s-master01为manage节点
[[email protected] ~]# docker swarm init --advertise-addr 192.168.1.23

配置node节点加入Swarm节点


升级节点为manager

[[email protected] ~]# docker node promote k8s-node02  #将k8s-node02从worker升级为manager

若docker02或者docker03要脱离这个群集 (k8s-node03节点为例子)

[[email protected] .ssh]# docker swarm leave    #在k8s-node03上执行此命令
Node left the swarm.
[[email protected] ~]# docker node rm k8s-node03  #然后manager节点移除k8s-node03
[[email protected] ~]# docker swarm leave -f    #若是最后一个manager上进行删除群集,则需要加“-f”选项
#最后一个删除后,这个群集也就不存在了

Docker Swarm常用命令

[[email protected] ~]# docker node ls   ####查看节点数量
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
zdtrj1duj7rz2m0a0w4bh3kww *   k8s-master01        Ready               Active              Leader              19.03.4
nnc6df9g6gzwpstjspdvrvl5u        k8s-node02          Ready               Active                                  19.03.3-rc1
vkxwfe025vp3m3dxyphkfc0u6     k8s-node03          Ready               Active                                  19.03.4
[[email protected] ~]# docker service ls #查看service服务
[[email protected] ~]# docker swarm join-token worker      #如果后期需要加入worker端,可以执行此命令查看令牌(也就是加入时需要执行的命令)
[[email protected] ~]# docker swarm join-token manager         #同上,若要加入manager端,则可以执行这条命令查看令牌。
[[email protected] ~]# docker service scale nginx=3    #容器的动态扩容及缩容
[[email protected] ~]# docker service ps nginx       #查看创建的容器运行在哪些节点
[[email protected] ~]# docker service ls        #查看创建的服务
[[email protected] ~]# docker service rm helloworld  #删除服务
[[email protected] ~]#docker service inspect helloworld  #查看服务信息
#将docker03脱离这个群集
[[email protected] ~]# docker swarm leave        #k8s-node02脱离这个群集
[[email protected] ~]# docker node rm k8s-node02         #然后在manager角色的服务器上移除k8s-node02
[[email protected] ~]#docker node promote k8s-node02    #将k8s-node02从worker升级为manager。
#升级后docker02状态会为Reachable
[[email protected] ~]# docker node demote k8s-node02    #将k8s-node02从manager角色降级为worker
[[email protected] ~]# docker node update --availability drain k8s-node02   #设置主机k8s-node02以后不运行容器,但已经运行的容器并不会停止

搭建Docker Swarm的WEB界面

[[email protected] ~]#  docker run -d -p 8000:8080 -e HOST=172.168.1.3  -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock  --name visualizer  dockersamples/visualizer

搭建service服务

[[email protected] ~]# docker service create --replicas 1 --name helloworld alpine ping docker.com
[[email protected] ~]# docker service ls  #查看服务
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
le5fusj4rses        helloworld          replicated          1/1                 alpine:latest
[[email protected] ~]# docker service inspect --pretty helloworld

ID:     le5fusj4rsesv6d4ywxwrvwno
Name:       helloworld
Service Mode:   Replicated
 Replicas:  1
Placement:
UpdateConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Update order:      stop-first
RollbackConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Rollback order:    stop-first
ContainerSpec:
 Image:     alpine:[email protected]:c19173c5ada610a5989151111163d28a67368362762534d8a8121ce95cf2bd5a
 Args:      ping docker.com
 Init:      false
Resources:
Endpoint Mode:  vip
此时服务运行在集群的这台机器,我们扩展下,使他运行到work两台上
   [[email protected] ~]# docker service scale helloworld=3  #扩缩容器 只需要修改 helloword=#数字即可

.
         然后你可以到各个worker查看 docker ps -a查看

设置特定worker不运行容器

在上述的配置中,若运行指定数量的容器,那么将是群集中的所有docker主机进行轮询的方式运行,直到运行够指定的容器数量,那么,如果不想让k8s-master01这个manager角色运行容器呢?可以进行以下配置:
    [[email protected] ~]# docker node update --availability drain k8s-master01 #
k8s-master01
#设置主机k8s-master01以后不运行容器,但已经运行的容器并不会停止
# “--availability”选项后面共有三个选项可配置,如下:
# “active”:工作;“pause”:暂时不工作;“drain”:永久性的不工作    

在扩容查看

[[email protected] ~]# docker service scale helloworld=6

创建一个nginx服务

  [[email protected] ~]# docker service create  --replicas 2 --name nginx15  -p 80  192.168.1.23:5000/nginx:1.15
 [[email protected] ~]# docker service ls
 ID                  NAME                MODE                REPLICAS            IMAGE                                 PORTS
 le5fusj4rses        helloworld          replicated          6/6                 alpine:latest
 tw7s5ps953lm        nginx15             replicated          2/2                 192.168.1.23:5000/nginx:1.15   *:30001->80/tcp

 发现k8s-master是不运行任务的  

Docker swarm集群节点路由网络

swarm可以轻松的发布服务和端口,所有节点都参与入口的路由网络,路由网络能够使得集群中每个节点都能够接受已经发布端口上的任何服务。即使在节点上没有运行任何服务,也可以在集群中运行任何服务。路由网络将所有传入请求路由到可用节点上,也就是存活的容器上。
[[email protected] ~]# docker service create --replicas 2 --name nginx --publish 8081:80 192.168.1.23:5000/nginx:1.15
[[email protected] ~]# curl http://192.168.1.29:8081
[[email protected] ~]# curl http://192.168.1.101:8081

原文地址:https://blog.51cto.com/9025736/2447076

时间: 2024-11-29 08:20:12

docker Swarm集群配置的相关文章

Docker Swarm集群部署实战

基本概念: Swarm介绍:Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in Go, docker_py,docker等)均可以直接与Swarm通信.Swarm几乎全部用Go语言来完成开发,Swarm0.2版本增加了一个新的策略来调度集群中的容器,使得在可

docker swarm集群及其UI部署

一.规划 ①swarm01作为manager节点,swarm02和swarm03作为worker节点. # cat /etc/hosts 127.0.0.1   localhost 192.168.139.175  swarm01  192.168.139.176  swarm02  192.168.139.177  swarm03 ②配置SSH免密登陆 # ssh-keygen -t rsa -P '' # ssh-copy-id -i .ssh/id_rsa.pub [email prote

非节点主机通过内网远程管理docker swarm集群

这是今天使用 docker swarm 遇到的一个问题,终于在睡觉前解决了,在这篇随笔中记录一下. 在 docker swarm 集群的 manager 节点上用 docker cli 命令可以正常管理集群.但是在另外一台不是集群节点的主机上,虽然设置了DOCKER_HOST环境变量 export DOCKER_HOST="tcp://manger节点内网IP:2377" 但连接不上 # docker ps Cannot connect to the Docker daemon at

Docker Swarm集群部署应用

在Docker Swarm集群部署应用 我们过去使用docker run的命令创建容器, 把前面替换成docker service create就行了. 建议搭建一个registry,为所的docker主机提供镜像下载,否则你需要在每个docker主机本地存在容器镜像. 所以搭建一个私有仓库,由私有仓库提供所需要的镜像, 本实验环境中用node1同时作为registry. 拉取本地私有仓库registry,查看registry镜像 基础环境 全部为CentOS7系统,Docker 版本为1.12

通过docker-machine和etcd部署docker swarm集群

本片文章介绍一下 使用docker-machine 搭建docker swarm 集群:docker swarm是docker 官方搭建的容器集群编排工具:容器编排,就是可以使你像使用一太机器一样来使用一个集群,你运行的容器可能会在容器中的任何一个节点上运行: 首先盗一张 docker swarm的架构图: 图片来源 https://yeasy.gitbooks.io/docker_practice/content/swarm/intro.html 在使用 Swarm 管理docker 集群时,

从零开始搭建Docker Swarm集群

从零开始搭建Docker Swarm集群 检查节点Docker配置 1. 打开Docker配置文件(示例是centos 7)vim /etc/sysconfig/docker 2. 添加-H tcp://0.0.0.0:2375到OPTIONSOPTIONS='-g /cutome-path/docker -H tcp://0.0.0.0:2375' 3. CentOS6.6 需要另外添加-H unix:///var/run/docker.sockOPTIONS='-g /mnt/docker 

云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障

3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月22日,我们进行移除与重启节点的操作时引发了故障,详见 云计算之路-阿里云上-容器服务:移除节点引发博问站点短暂故障 . 3月24日,我们参考阿里云容器服务帮助文档-指定多节点调度通过给节点添加用户标签的方式成功移除了部分节点.我们是这么操作的,当时所有节点没有添加用户标签,给待移除节点之外的所有节

swarm 集群配置

Swarm 介绍Swarm 是 Docker 公司在 2014 年 12 月初发布的一套较为简单的工具,用来管理Docker 集群,它将一群 Docker 宿主机变成一个单一的虚拟的主机. Swarm 使用标准的Docker API 接口作为其前端访问入口,换言之,各种形式的 Docker Client(dockerclient in Go, docker_py, docker 等)均可以直接与 Swarm 通信. Swarm 几乎全部用 Go语言来完成开发,Swarm0.2 版本增加了一个新的

Docker系列(十四):Docker Swarm集群

一.Swarm简介 Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源.Swarm和Kubernetes比较类似,但是更加轻便,具有的功能也较kubernetes更少一些. Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令.目前,Swarm 是 Do