Kubernetes 是来自 Google 云平台的开源容器集群管理系统。基于 Docker 构建一个容器的调度服务。该系统可以自动在一个容器集群中选择一个工作容器供使用。其核心概念是 Container Pod。
首先,为什么要用Kubernetes? 使用一个工具先要梳理下使用这个工具的目标,我们不是为了工具而用工具。
 
Kubernetes的目标用一张被很多人引用过的图来说明最好:

Kubernetes 的目标是让你可以像管理牲畜一样管理你的服务,而不是像宠物一样,同时提高资源的利用率,让码农关注在应用开发本身,高可用的事情就交给 Kubernetes吧。这个图本来是openstack提出的,但纯粹IaaS层的解决方案实现不了这个目标,于是有了Kubernetes。
 
Kubernetes和Borg系出同门,基本是Borg的开源改进版本,引用Google Borg论文里的说法:
 
it (1) hides the details of resource management and failure handling so its users can focus on application development instead; (2) operates with very high reliability and availability, and supports applica- tions that do the same; and (3) lets us run workloads across tens of thousands of machines effectively
 
我们如何验证是否达到这个目标了呢?
随机关掉一台机器,看你的服务能否正常
减少的应用实例能否自动迁移并恢复到其他节点
服务能否随着流量进行自动伸缩
 
我们从一个简单的多层应用的架构改进来探讨下:

说明:
mySQL应该是一主多从的架构,这里为了简单进行了省略
service后面也会依赖数据库等资源,这里为了简单进行了省略
箭头表示调用和依赖关系
 
具体分析一下为了达到我们的目标,需要做到改进:
Loadbalancer 要调用后端应用服务节点,后端应用服务节点挂了或者迁移增加节点,都要变更Loadbalancer的配置。这样明显达不到目标,于是计划将 Loadbalancer改造成Smart Loadbalancer,通过服务发现机制,应用实例启动或者销毁时自动注册到一个配置中心 (etcd/zookeeper),Loadbalancer监听应用配置的变化自动修改自己的配置。
 
Web应用对后端资源的依赖,比如Mysql和Memcached,对应资源的ip一般是写到配置文件的。资源节点变更或者增加都要变更应用配置。
Mysql计划该成域名访问方式,而不是ip。为了避免dns变更时的延迟问题,需要在内网架设私有dns。高可用采用MHA方案,然后配合服务发现机制自动修改dns。
 
Memcached计划参照coucHBase的方式,通过服务发现机制,使用SmartClient,客户端应用监听配置中心的节点变化。难点可能在于对Memcached的改造(可以参考couchbase)。另外也可以通过增加一层代理的机制实现。
 
应 用节点迁移时依赖的系统和基础库不一样如何处理?部署方式不一样如何处理?磁盘路径,监听端口等冲突怎么办?这个可以通过Docker这样的容器技术,将 应用部署运行的方式进行标准化,操作系统和基础库的依赖允许应用自定义,对磁盘路径以及端口的依赖通过Docker运行参数动态注入,而不需要变更应用配 置。Docker的自定义变量以及参数,需要提供标准化的配置文件。
 
服务迁移问题 每种服务都需要一个master调度中心,来监控实例状态,确定要不要进行迁移,负责统一调度。并且每个服务器节点上要有个agent来执行具体的操作,监控该节点上的应用。另外还要提供接口以及工具去操作。
网络以及端口冲突的问题比较麻烦 需要引入类似SDN的解决方案。
内存,cpu,以及磁盘等硬件资源,原来的习惯是购买服务器的时候就根据服务器的上的应用类型进行规划,如果应用和硬件解耦,这种方式需要淘汰。但必须有一种调度机制让应用迁移的时候可进行筛选。
 
总结一下,通过分析得出,要达到目标,关键是解耦,应用进程和资源(包括 cpu,内存,磁盘,网络)的解耦,服务依赖关系的解耦。
 
我们上面的改造机制基本是按照个案进行设计,Kubernetes的则是要提供一套全面通用的机制。
 
然后,我们看看Kubernetes对以上问题的解决方案:
 
先上一张Kubernetes官方的架构图

摘自:http://edu.dataguru.cn/article-8492-1.html

kubernetes要实现的目标——随机关掉一台机器,看你的服务能否正常;减少的应用实例能否自动迁移并恢复到其他节点;服务能否随着流量进行自动伸缩的更多相关文章

  1. TD8.0迁移到QC9.2,自动迁移失败,手动迁移

    源机器A:TD8.0+SQLServer2000目标机器B:QC9.2+SQLServer2000 一:自动迁移,1.在A在A上安装QC迁移工具,然后在B中点击TOOLS>>Migrati ...

  2. ElasticStack系列之二十 & 数据均衡、迁移、冷热分离以及节点自动发现原理与机制

    1. 数据均衡 某个shard分配到哪个节点上,一般来说,是由 ELasticSearch 自行决定的.以下几种情况会触发分配动作: 新索引的建立 索引的删除 新增副本分片 节点增减引发的数据均衡 在 ...

  3. EF core (code first) 通过自动迁移实现多租户数据分离 :按Schema分离数据

    前言 本文是多租户系列文章的附加操作文章,如果想查看系列中的其他文章请查看下列文章 主线文章 Asp.net core下利用EF core实现从数据实现多租户(1) Asp.net core下利用EF ...

  4. entity framework自动迁移

    第一步,建立测试项目,普通的WinForm类型,EntityMigration: 第二步,从NuGet为项目添加MySql.Data.Entity,由Oracle提供,我选择人气高的: 第三步,建立实 ...

  5. ASP.NET MVC 4 让数据库自动迁移

    今天实际测试了下这个方法,可以保持数据库与实体类同步,同时不会出现数据库迁移的提示.但是只能更改实体类来改变数据库,而不能改数据库来改变实体类.所以这才是Code frist,如果通过改数据库表来改动 ...

  6. ASP.NET MVC 4 如何避免数据库被自动创建或自动迁移

    保哥说要想避免数据库被自动创建或自动迁移,可以在Global.asax文件里的Application_Start方法中加入: System.Data.Entity.Database.SetInitia ...

  7. Entity Framework Core 2.0 使用代码进行自动迁移

    一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...

  8. Ef 自动迁移,日志

    Ef 迁移 在vs打开程序控制台 2,选择程序集 ,如果是初次,输入 Enable-Migrations,启动迁徙 3  添加迁移,完成修改 4,之后会自动生成迁移配置文件. 然后再上下文类中加入 两 ...

  9. EF的CodeFirst模式自动迁移(适用于开发环境)

    EF的CodeFirst模式自动迁移(适用于开发环境) 1.开启EF数据迁移功能 NuGet包管理器------>程序包管理控制台---------->Enable-Migrations ...

随机推荐

  1. openfire Android学习(三)----会议室创建、加入以及查询会议室中所有成员等

    openfire 中的会议室不像QQ群一样,不能保存那些离线用户,加入会议室后,一旦断开连接,就会离开会议室. 虽然如此,但如果要实现也不是不可能,我们可以自己做后台来保存,有兴趣的可以去试着实现一下 ...

  2. 【java】httpclient的使用之java代码内发送http请求

    场景: 需要本项目发送HTTP请求到另一个项目中,处理完成返回值给本项目. 1.本项目引入架包 <!-- httpclient 后台发送http请求--> <dependency&g ...

  3. C# 通过WebService方式 IIS发布网站 上传文件到服务器[转]

    http://blog.sina.com.cn/s/blog_517cae3c0102v0y7.html 应用场景:要将本地的文件 上传到服务器的虚拟机上 网络环境:公司局域网(如下图中第二种) 开发 ...

  4. OpenGL之路(七)为立方体加入丰富色彩

    在立方体的六个面贴上不同的颜色,假设想达到混合颜色的效果,能够參照立方体的前面代码在每一行前都加上颜色 代码例如以下 #include <gl/glut.h> #pragma commen ...

  5. select中分割多组option

    <optgroup style="color:gray; font-style:normal" label="——雪佛兰(五菱)——"></o ...

  6. Django开发微信公众平台

    处理微信发来的信息,实际上就是处理xml的过程.先写xml工具类 # -*- coding:utf-8 -*- from xml.dom import minidom from Web.model.W ...

  7. String,StringBuilder性能对照

    import java.util.Date; import java.util.UUID; /**  * 測试String,StringBuilder性能,推断什么时候改用String,什么时候该用S ...

  8. Linux基础(3)- 正文处理命令及tar命令、vi编辑器、硬盘分区、格式化及文件系统的管理和软连接、硬连接

    一.正文处理命令及tar命令 1)  将用户信息数据库文件和组信息数据库文件纵向合并为一个文件1.txt(覆盖) 2)  将用户信息数据库文件和用户密码数据库文件纵向合并为一个文件2.txt(追加) ...

  9. PHP几种抓取网络数据的常见方法

    //本小节的名称为 fsockopen,curl与file_get_contents,具体是探讨这三种方式进行网络数据输入输出的一些汇总.关于 fsockopen 前面已经谈了不少,下面开始转入其它. ...

  10. Kubernetes对象之ReplicaSet

    系列目录 说到ReplicaSet对象,得先说说ReplicationController(简称为RC).在旧版本的Kubernetes中,只有ReplicationController对象.它的主要 ...