Docker Swarm群集

Docker Swarm 是什么?

Docker Swarm是一个用于创建Docker主机(运行Docker守护进程的服务器)集群的工具,使用Swarm操作集群,会使用户感觉就像是在一台主机上进行操作

docker1.12集成了swarmkit, 使你可以不用安装额外的软件包, 使用简单的命令启动创建docker swarm集群。

如果你在运行 Docker 1.12时,你就可以原生创建一个 Swarm 集群 .

集成了swarm集群的安全特性, 集成了K-V存储, 你现在不需要额外部署etcd或者consul。

在Docker1.12版本中,一个大的功能点是swarm集群(基于swarmkit项目),通过Docker命令可以直接实现docker-engine相互发现,并组建成为一个容器集群。

SwarmKit将节点分为两类:

工作节点(Worker):负责通过执行容器运行任务。SwarmKit的默认执行器为Docker容器执行器(Docker Container Executor)。

  (1)内建分布式存储,不要额外的数据库

  (2)支持Rolling update

  (3容器高可用

  (4)通过TLS保证了节点之间通讯的安全

管理节点(Manager):负责接收和响应用户请求,将集群状态调节到最终状态。在SwarmKit中,用户可以动态调整节点的角色,即在Manager和Worker之间转换。

如下图所示,这是一个典型的master-slave的架构。每个节点都是运行着Docker Engine的Docker主机。一些节点有更高的权限,被称为Manager。下面的节点是worker节点,接收来自manager组的任务指示。

部署docker1.12 Swarm

实验环境:

这里选择三台主机运行Swarm,依次为:

node1   192.168.100.5

node2  192.168.100.6

node3  192.168.100.7

基本环境配置

3台主机确保时间一致 ntp

3台主机均关闭selinux,开启路由转发。 /ect/sysctl.conf

[[email protected] ~]# sysctl -p
net.ipv4.ip_forward = 1

4关闭selinux

[[email protected] ~]# setenforce 0

5 3台主机修改/etc/hosts文件

Ping  连通性

开启宿主机之间的端口

TCP端口2377集群管理端口

TCP与UDP端口7946节点之间通讯端口

TCP与UDP端口4789 overlay网络通讯端口

配置所有节点密钥登录.

配置所下节点密钥互信, 在node1可以免密码登录各节点,只在node1上执行:

生成sshkey

[[email protected] ~]# ssh-keygen

发布sshkey到各个节点  ssh-copy-id node2  3 1

测试密钥登录

安装docker 1.12  如yum报错 rm -rf  /var/rum/yum.pid 删除pid  3台都需要安装

[[email protected] /]# yum -y install docker
[[email protected] /]# systemctl start docker

docker1.12 Swarm 模式简介

Docker Engine 1.12 集成了Swarm集群工具.

主要使用三个新的命令行工具创建一个swarm集群:

docker swarm 开启swarm模式; 加入Swarm集群; 配置集群参数

docker node 查询集群节点信息; 提升/移除一个管理节点; 管理swarm节点主机

docker service 创建管理 service

可以查看docker  --help

创建 Swarm集群

在node1上初始化swram集群:

注意 你只需要在一个node1上初始化swarm集群, 其他node加入这个集群就行了, 所以以下命令只需要在node1上运行.

[[email protected] /]# docker swarm init --advertise-addr 192.168.100.5

1) 查看swarm集群node列表 

[[email protected] /]# docker node ls

我们的其他节点服务器,以worker角色加入swarm集群需要登录到服务器运行如下命令:

[[email protected] /]# docker swarm  join-token  worker

1) 其他节点以worker加入集群使用上面查看到的命令加入集群(node2、node3上)

1) 查看集群节点情况,验证加入与否

1) 提升node2为管理 

[[email protected] /]# docker node promote node2

docker  swarm:集群管理,子命令主要有下面几个。

docker swarm init命令用于初始化一个集群

dockerswarm join命令用于加入一个现有集群

dockerswarm leave命令由于离开集群

有了Docker Swarm集群我们如何把我们的应用跑在Swarm集群上呢?

很简单, 基本上原来我们使用docker run的命令创建容器, 把前面替换成docker service create就行了.

建议搭建一个registry,为所的docker主机提供镜像下载,否则你需要在每个docker主机本地存在容器镜像。

所以搭建一个私有仓库,由私有仓库提供所需要的镜像,

本实验环境中用node1同时作为registry。

拉取本地私有仓库registry,查看registry镜像

上传registry2.tar

运行容器(端口映射、随docker启动时容器亦启动、路径映射、名字)

[[email protected] src]# mkdir -p /opt/data/registry
[[email protected] src]# docker run -d -p 5000:5000 --restart=always -v /opt/data/registry/:/var/lib/registry --name registry2 registry:2

查看私有仓库(可以看到仓库为空)

[[email protected] src]# curl 192.168.100.5:5000/v2/_catalog

1. 所有节点指向registry服务器:

停止docker服务

[[email protected] src]# vim /usr/lib/systemd/system/docker.service

[[email protected] src]# systemctl daemon-reload 
[[email protected] src]# systemctl start docker

1. 推送镜像并验证

node2上传镜像

[[email protected] src]# docker load < centos7.tar

node2配置Dockerfile

[[email protected] apache]# vim dockerfile 
FROM docker.io/centos:latest
RUN yum -y install httpd net-tools
RUN sed ‘s/#ServerName /ServerName /g‘ -i /etc/httpd/conf/httpd.conf
EXPOSE 80
CMD  ["/usr/sbin/httpd","-DFOREGROUND"]

node2构建

[[email protected] apache]# docker build -t 192.168.100.5:5000/centos:httpd .

node2上传镜像到registry

查看registry中镜像

[[email protected] apache]# curl 192.168.100.5:5000/v2/_catalog

node3、node1测试从registry下载镜像  在nond3 测试

overlay网络

解决了镜像构建问题, 为了让应用跑在swram集群上,我们还需要解决容器间的网络访问问题.

单台服务器的时候我们应用所有的容器都跑在一台主机上, 所以容器之间的网络是互通的. 现在我们的集群有3台主机, 所以docker应用的服务会分布在这3台主机上.

如何保证不同主机上的容器网络互通呢?

swarm集群已经帮我们解决了这个问题了,就是只用overlay network.

在docker 1.12以前, swarm集群需要一个额外的key-value存储(consul, etcd). 来同步网络配置, 保证所有容器在同一个网段中.

在docker 1.12已经内置了这个存储, 集成了overlay networks的支持.

下面我们演示下如何创建一个 overlay network:

注:swarm上默认已有一个名为ingress的overlay 网络, 可以直接使用, 但本文会创建一个新的

为我们的docker应用创建一个名为dockercoins的overlay network

1. node2上创建overlay network

[[email protected] apache]# docker network create --driver overlay dockercoins
[[email protected] apache]# docker network ls

1. node1上查看(worker节点看不到)

注:一旦新的任务被指定给这个节点,Overlay网络就会被按需创建。

在swarm集群上运行docker应用

概念解释:service

Docker1.12 swarm引入了服务的概念,一个服务由多个任务组成,一个任务即一个运行的容器。

服务包括两种类型:

复制服务(replicated services):类似 k8s 中复制集的概念,保持一定数量的相同任务在集群中运行;

全局服务(global services):类似 k8s 中 daemon 的概念,每个工作节点上运行一个。

发布服务:

在manager上执行如下命令:

下面我们可以使用之前push到本地镜像仓库的镜像启动服务, 以centos:http为例:

以复制服务类型运行服务

在manager上执行如下命令:

[[email protected] src]# docker service create --replicas 1 --network dockercoins --name web1 -p 8000:80 192.168.100.5:5000/centos:httpd
efd1jxmt3pthvwscgkt1n1hj6

浏览器验证:(三个节点ip:8000都可以访问)

如运行web2,俩个容器运行服务:

[[email protected] src]# docker service create --replicas 2 --network dockercoins --name web2 -p 8080:80 192.168.100.5:5000/centos:httpd
f2wh08sgy2q2wp5s63oczxk1t

从上图可以看到web2名称的service有2个副本分别运行在node2和node3节点上

1. 以全局服务类型运行服务:

从下图可以看到服务web4在每个节点上都运行一个

下面我们扩展旧的服务,从下图可以看到web1  service目前只有一个副本

[[email protected] /]# docker service scale web1=3

可以看到web1服务扩展到3个副本数。

3 缩减已有的服务副本数:

[[email protected] /]# docker service scale web1=2

可以看到web1服务缩减到2个副本数。

Swarm节点是自组织(self-organizing)和自修复(self-healing)的,什么意思?只要有节点或容器宕掉,swarm engine就会尝试修复,下面我们来具体看一下

自修复(self-healing)

可以看到:3个节点,运行8个任务(容器)。包含一个registry容器。

我们模拟让node3上的容器都宕掉或部分宕掉

[[email protected] /]# docker stop $(docker ps -aq)

结果:

可以看到docker会在相同节点上启动1个不同ID的容器。

Self-Organizing

现在我们让node3整个宕掉,node3上的容器会自动在其它节点上启动。

在manager节点上执行docker  server ps服务名

[[email protected] /]# systemctl stop docker

结果: node1 上

node2

可以看到node3上的web2.2在node2上启动了;至于node3上的web4.0则因为是全局服务类型,故而node3停止服务后,会停掉。

时间: 2024-10-11 01:37:20

Docker Swarm群集的相关文章

Docker Swarm群集配置实战

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合. 从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要

Docker Swarm群集配置实战(2)

前言: 这篇博文是基于docker Swarm群集环境之上,延伸了Docker Swarm的功能. 博文大纲:一.Docker Swarm网络管理二.二.Swarm的service管理及版本更新 这篇博文的环境还是基于上一篇博文中搭建的环境,具体可以参考博文:Docker Swarm群集配置实战(1) ,在进行接下来的操作之前,必须要保证访问docker Swarm的web UI时,可以看到以下界面: 一.Docker Swarm网络管理 Swarm群集会产生两种不同类型的流量: 控制和管理层面

Docker Swarm群集项目案例

DockerSwarm群集 DockerSwarm 是一个用于创建 Docker 主机(运行 Docker 守护进程的服务器)集群的工具, 使用 Swarm 操作集群,会使用户感觉就像是在一台主机上进行操作 docker1.12 集成了 swarmkit, 使你可以不用安装额外的软件包, 使用简单的命令启动创建 docker swarm 集群. 如果你在运行 Docker 1.12 时,你就可以原生创建一个 Swarm 集群 . 集成了 swarm 集群的安全特性, 集成了K-V 存储, 你现在

部署Docker swarm集群(一)

一.Docker swarm简介 Docker swarm与docker-compose一样,都是docker官方推出的docker容器的编排工具.但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合. Docker swarm:其作用就是把若干个Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各

Docker swarm搭建(1)

Docker swarm docker swarm集群:三剑客之一 一. Docker Swarm 的基本概念和原理 Docker Swarm 简介 Swarm是Docker公司推出的用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(docker client in Go, docker_py, docker等)均可以直接与Swarm通信.Swarm几乎全部

从零开始,使用Docker Swarm部署集群教程

本文首先从Dockerfile创建了一个简单web镜像 然后将web镜像推送到了远程仓库,以备后面集群中不同机器自动下载 之后使用docker-compose.yml配置了一个应用 而后新建了2台虚拟机作为swarm节点,并部署应用的5个实例在这两台虚拟机上 最后还讲了如何如果更改集群配置.如何扩容您的集群和如重新发布您的应用 一.创建一个简单web镜像,并推送到docker仓库 1.创建Dockerfile 创建一个空目录, 然后CD到新目录,创建名为Dockerfile的文件,将以下内容复制

Swarm群集搭建

Swarm是一套极为简单管理docker集群工具,使得docker集群暴露给用户的是一个虚拟整体.搭建环境:关闭防火墙和安全linux[[email protected] ~]# systemctl stop firewalld[[email protected] ~]# setenforce 0分别修改主机名:[[email protected] ~]# vi /etc/hostnameswarm01swarm02重启并分别添加一张桥接网卡联网[[email protected] ~]# sy

docker swarm英文文档学习-11-上锁你的集群来保护你的加密密钥

Lock your swarm to protect its encryption key上锁你的集群来保护你的加密密钥 在Docker 1.13及更高版本中,默认情况下,群管理器使用的Raft日志在磁盘上加密.这种静止加密保护你的服务的配置和数据不受获得加密Raft日志访问权的攻击者的攻击.引入该特性的原因之一是支持新的Docker secrets特性. 当Docker重新启动时,用于加密集群节点间通信的TLS密钥和用于加密和解密磁盘Raft日志的密钥都被加载到每个管理器节点的内存中.Dock

linux docker swarm集群安装

1. docker swarm 简介 Docker Swarm是Docker自己的Docker容器本地集群解决方案,具有与Docker生态系统紧密集成并使用自己的API的优势.它监视跨服务器群集的容器数量,是在没有其他硬件的情况下创建群集docker应用程序的最便捷方式.它为Dockerized应用程序提供了一个小规模但有用的编排系统. 使用Docker Swarm的优点 与docker集成的集群管理工具 去中心化设计,只使用docker引擎即可创建各类节点 声明式服务模型.可以声明的方式来定义