Docker容器集群管理主流方案

Swarm
Docker公司自研发的集群管理系统。
Kubernetes
Google开源的一个容器集群管理系统,用于自动化部署、扩展和管理容器应用。也称为K8S
Mesos
Mesos是一个集群资源调度系统,对集群中的资源进行分配和管理。Marathon是运行在Mesos之上的一个服务管理框架,可管理容器生命周期。
Docker容器集群管理主流方案

  Swarm、Kubernetes和Mesos简单比较:

复杂性
Swarm使用标准Docker接口,集成于Docker Engine,内置Overlay网络、服务发现、负载均衡,很容易上手,学习成本低。
K8S成熟且复杂,自己的管理体系,服务发现,负载均衡等功能,学习成本高。
Mesos是一个成熟分布式资源管理框架,一个通用的集群管理系统。
功能
Swarm支持Docker Compose v3来实现服务编排。
K8S强大的功能,有着一套整体容器解决方案,使用起来更轻松。
社区活跃度
K8S社区相比Swarm和Mesos活跃度都高。

  Swarm介绍

集群部署及节点管理
服务管理
使用原生Overlay网络
数据持久化
服务发现与负载均衡
高可用性
配置文件存储
应用实战
-手动创建和服务编排部署LNMP网站平台

  Swarm是什么

Swarm是Docker公司自研发的容器集群管理系统,Swarm在早期是作为一个独立服务存在,在Docker Engine v1.12中集成了Swarm的集群管理和编排功能。可以通过初始化Swarm或加入现有Swarm来启用Docker引擎的Swarm模式。
Docker Engine CLI和API包括了管理Swarm节点命令,比如添加、删除节点,以及在Swarm中部署和编排服务。
也增加了服务栈(Stack)、服务(Service)、任务(Task)概念。

  Swarm两种角色

Manager:接收客户端服务定义,将任务发送到worker节点;维护集群期望状态和集群管理功能及Leader选举。默认情况下manager节点也会运行任务,也可以配置只做管理任务。
Worker:接收并执行从管理节点分配的任务,并报告任务当前状态,以便管理节点维护每个服务期望状态。

  Swarm的特点

1. Docker Engine集成集群管理
使用Docker Engine CLI 创建一个Docker Engine的Swarm模式,在集群中部署应用程序服务。
2. 去中心化设计
Swarm角色分为Manager和Worker节点,Manager节点故障不影响应用使用。
3. 扩容缩容
可以声明每个服务运行的容器数量,通过添加或删除容器数自动调整期望的状态。
4. 期望状态协调
Swarm Manager节点不断监视集群状态,并调整当前状态与期望状态之间的差异。例如,设置一个服务运行10个副本容器,如果两个副本的服务器节点崩溃,Manager将创建两个新的副本替代崩溃的副本。并将新的副本分配到可用的worker节点。
5. 多主机网络
可以为服务指定overlay网络。当初始化或更新应用程序时,Swarm manager会自动为overlay网络上的容器分配IP地址。
6. 服务发现
Swarm manager节点为集群中的每个服务分配唯一的DNS记录和负载均衡VIP。可以通过Swarm内置的DNS服务器查询集群中每个运行的容器。
7. 负载均衡
实现服务副本负载均衡,提供入口访问。也可以将服务入口暴露给外部负载均衡器再次负载均衡。
8. 安全传输
Swarm中的每个节点使用TLS相互验证和加密,确保安全的其他节点通信。
9. 滚动更新
升级时,逐步将应用服务更新到节点,如果出现问题,可以将任务回滚到先前版本。

  集群部署及节点管理

  使用swarm前提

Docker版本1.12+
集群节点之间保证TCP 2377、TCP/UDP 7946和UDP 4789端口通信

  节点规划

操作系统ubuntu18.04
管理节点:192.168.56.128
工作节点:192.168.56.129
工作节点:192.168.56.130

  查看当前docker版本

  管理节点初始化swarm

docker swarm init --advertise-addr 192.168.56.128

  工作节点加入swarm

 docker swarm join --token SWMTKN-1-2jxm5hdcno1m06v1eqzsrsrcqg1hjsvkotdojo87n67lasngkf-2ick8vihgd6jmkgpoe09wra2s 192.168.56.128:2377

  管理节点查看

 

  查看节点信息

 docker node inspect docker2

  查看运行任务数

docker node ps

  

  服务管理

  创建服务 创建一个服务副本数为1 名字为hello

docker service create --replicas 1 --name hello busybox

  查看

  MODE是replicated会根据默认调度算法分配节点

  REPLICAS副本数 右边是设定多少 左边是启动多少

   查看启动状态多次失败,因为busybox是一个基础镜像没有持续运行

  加一个持续运行的任务

docker service update  --args "ping www.baidu.com" hello

  过滤出只在运行的

docker service ps -f "desired-state=running" hello

  以上信息可以查看到是工作在docker1这个节点上面的

  对该服务进行扩容

docker service scale hello=3

  指定docker1只作为管理节点

docker node update --availability drain docker1

  作为manage的节点没有容器了 会把副本复制到其他节点管理节点的docker删除

  

  滚动更新服务

 docker service create \
> --replicas 3 \
> --name redis \
> --update-delay 10s \
> redis:3.0.6

  更新

docker service update --image redis:3.0.7 redis

  显示更新状态以及老版本信息

  查看刚刚设置的更新策略

docker service inspect redis

  

  创建服务时设定更新策略

 docker service create --name my_web --replicas 10 --update-delay 10s --update-parallelism 2 --update-failure-action continue nginx:1.12

  --update-parallelism最大并行数量

  --update-failure-action continue更新失败后继续

  服务更新

docker service update --image nginx:1.13 my_web

  创建服务时设定回滚策略 创建前删除docker service rm my_web

docker service create \
--name my_web \
--replicas 10 \
--rollback-parallelism 2 \
--rollback-monitor 20s \
--rollback-max-failure-ratio .2 \
nginx:1.12

  先更新

docker service update --image nginx:1.13 my_web

  手动回滚

docker service update --rollback my_web

  又回滚到1.12版本了

  

Docker容器集群管理之Swarm的更多相关文章

  1. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  2. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  3. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  4. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  6. Swarm容器集群管理(超详细)

    一.Swarm介绍 Swarm是Docker公司自研发的容器集群管理系统, Swarm在早期是作为一个独立服务存在, 在Docker Engine v1.12中集成了Swarm的集群管理和编排功能.可 ...

  7. Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET

    Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET undefined Package - crawler undefined 科学网- ...

  8. 容器、容器集群管理平台与 Kubernetes 技术漫谈

    原文:https://www.kubernetes.org.cn/4786.html 我们为什么使用容器? 我们为什么使用虚拟机(云主机)? 为什么使用物理机? 这一系列的问题并没有一个统一的标准答案 ...

  9. Kubernetes容器集群管理环境 - 完整部署(中篇)

    接着Kubernetes容器集群管理环境 - 完整部署(上篇)继续往下部署: 八.部署master节点master节点的kube-apiserver.kube-scheduler 和 kube-con ...

随机推荐

  1. 【Mac使用系列】【转载】十几个Mac实用工具

    本文摘自:https://www.jianshu.com/p/15c7b3711005 经过验证,这几个不存在: CleanMyMac.OmniGraffle,我将可用的放在云盘里,有需要的话,可以从 ...

  2. MySQL 聚簇索引&&二级索引&&辅助索引

    MySQL非聚簇索引&&二级索引&&辅助索引 mysql中每个表都有一个聚簇索引(clustered index ),除此之外的表上的每个非聚簇索引都是二级索引,又叫辅 ...

  3. maven打包含有多个main程序的jar包及运行方式

    pom.xml <build>        <plugins>            <plugin>                <groupId> ...

  4. MySQL 5.6新特性 -- Index Condition Pushdown

    Index Condition Pushdown(ICP)是针对mysql使用索引从表中检索行数据时的一种优化方法.   在没有ICP特性之前,存储引擎根据索引去基表查找并将数据返回给mysql se ...

  5. jQuery Address全站 AJAX 完整案例详解

    本文详细介绍如何利用 jQuery 框架以及 jQuery Address 插件实现最基本的全站 AJAX 动态加载页面内容的功能的方法. 案例目标 以常见基本结构的网站为案例,实现全站链接 AJAX ...

  6. git笔记-9-29

    //将工作区的a.txt文件更新到最后一次提交到本地仓库的状态,如果需要将文件回滚到某个特定的版本,将HEAD改成那个commit的id即可 git checkout HEAD a.txt //如果将 ...

  7. [Big Data - Kafka] Kafka设计解析(四):Kafka Consumer解析

    High Level Consumer 很多时候,客户程序只是希望从Kafka读取数据,不太关心消息offset的处理.同时也希望提供一些语义,例如同一条消息只被某一个Consumer消费(单播)或被 ...

  8. Unity3d中的属性(Attributes)整理

    Attributes属性属于U3D的RunTimeClass,所以加上以下的命名空间是必须的了.其它倒没什么需要注意的.本文将所有运行属性过一遍罢了. using UnityEngine; using ...

  9. 【转】SAP BW 顾问靠手 — SAP中的例程

    什么是例程(Routine)? 例程就是我们可以自己定义的程序代码.通过程序代码来完成我们的需求,因为业务是千变万化,如果想让产品能跟随上业务的脚步,就必须要有非常灵活的功能来补充.大家都知道软件产品 ...

  10. mysql 5.7 学习

    MySQL5.7 添加用户.删除用户与授权   mysql -uroot -proot MySQL5.7 mysql.user表没有password字段改 authentication_string: ...