阅读更多

1顶
0踩

操作系统
摘要:作者认为一个良好的分布式服务框架需要实现服务的配置管理,包括服务发现、负载均衡及服务依赖管理,以及服务之间的调度及生命周期管理。而Kubernetes包含了上述部分特性,作者对Kubernetes进行了一些尝试与体验。

Kubernetes是Google开源的容器集群管理系统。前几天写的 分布式服务框架的4项特性 中提到一个良好的分布式服务框架需要实现
引用
服务的配置管理。包括服务发现、负载均衡及服务依赖管理。
服务之间的调度及生命周期管理。

由于Kubernetes包含了上述部分特性,加上最近Google新推出的Container Engine也是基于Kubernetes基础上实现,因此最近对Kubernetes进行了一些尝试与体验。

运行环境

Kubernetes目前处于一个快速迭代的阶段,同时它的相关生态圈(比如docker,etcd)也在快速发展,这也意味没有适合新手使用非常顺畅的版本,网上的各种文档(也包括官方文档)和当前最新的发布版会有不同程度滞后或不适用的情况,因此在使用时可能会碰到各种细节的障碍,而且这些新版本碰到的问题,很有可能在网上也搜索不到解决方案。

Kubernetes设计上并未绑定Google Cloud平台,但由于以上原因,为了减少不必要的障碍,初次尝试建议使用GCE作为运行环境(尽管GCE是一个需要收费的环境)。默认的cluster启动脚本会创建5个GCE instance,测试完需要自己及时主动删除。为了避免浪费,可以将minions减少,同时instance类型选择f1-micro。费用方面一个f1-micro instance运行1个月大约50元人民币,因此用GCE来测试Kubernetes,如果仅是测试时候开启的话,并不会产生太多费用。

Pods及Replication Controller

Kubernetes的基本单元是pods,用来定义一组相关的container。Kubernetes的优点是可以通过定义一个replicationController来将同一个模块部署到任意多个容器中,并且由Kubernetes自动管理。比如定义了一个apache pod,通过replicationController设置启动100个replicas,系统就会在pod创建后自动在所有可用的minions中启动100个apache container。并且轻松的是,当container或者是所在的服务器不可用时,Kubernetes会自动通过启动新的container来保持100个总数不变,这样管理一个大型系统变得轻松和简单。



Service 微服务

在解决部署问题之后,分布式服务中存在的一大难题是服务发现(或者叫寻址),用户访问的前端模块需要访问系统内部的后端资源或者其他各种内部的服务,当一个内部服务通过replicationController动态部署到不同的节点后,而且还存在前文提到的动态切换的功能,前端应用如何来发现并访问这些服务?Kubernetes的另外一个亮点功能就是service,service是一个pod服务池的代理抽象,目前的实现方法是通过一个固定的虚拟IP及端口来定义,并且通过分布在所有节点上的proxy来实现内部服务对service的访问。

Kubernetes自身的配置是保存在一个etcd(类似ZooKeeper)的分布式配置服务中。服务发现为什么不通过etcd来实现?Tim的判断更多的是为了Kubernetes上的系统和具体的配置服务解耦。由于服务发现属于各个系统内部的业务逻辑,因此如果使用etcd将会出现业务代码的逻辑中耦合了etcd,这样可能会让很多架构师望而却步。

尽管没有耦合etcd,部署在Kubernetes中的服务需要通过container中的环境变量来获得service的地址。环境变量虽然简单,但它也存在很多弊端,如存在不方便动态更改等问题。另外service目前的实现是将虚拟IP通过iptables重定向到最终的pod上,作者也提到iptables定向的局限性,不适合作为大型服务(比如上千个内部service一起运作时)的实现。



由于service定位是系统内部服务,因此默认情况下虚拟IP无法对外提供服务,但Kubernetes当前版本并没直接提供暴露公网IP及端口的能力,需要借助云服务(比如GCE)的load balancer来实现。

小结

总的看来Kubernetes提供的能力非常令人激动,pod、replicationController以及service的设计非常简单实用。但如果立即将服务迁移到Kubernetes,还需要面对易变的环境。另外尽管Kubernetes提供health check的机制,但service生产环境所需的苛刻的可用性还未得到充分的验证。Service发现尽管不跟Kubernetes的内部实现解耦,但利用环境变量来实现复杂系统的服务发现也存在一些不足。

安装说明

Kubernetes cluster简单安装说明如下,需要尝试的朋友可参考。

前提准备

一个64 bit linux环境,最好在墙外的,避免访问google cloud出现超时或reset等问题;另外创建Google Cloud帐号,确保创建instances以及Cloud Storage功能可用;

安装步骤

1.安装go语言环境(可选,如果需要编译代码则需要)

2.安装Google cloud sdk
引用
$ curl https://sdk.cloud.google.com | bash
$ gcloud auth login
按提示完成授权及登录

3. 安装 etcd 二进制版本(V0.4.6), 解压后将其目录加入PATH

4. 安装 kubernetes最新的relase binary版本(V0.5.1)

修改 cluster/gce/config-default.sh,主要是修改以下字段以便节约资源。
引用
MASTER_SIZE=f1-micro
MINION_SIZE=f1-micro
NUM_MINIONS=3

在kubernetes目录运行

$ cluster/kube-up.sh

执行成功后会显示 done

5. 测试pod

以上脚本启动了examples/monitoring 下面定义的service,如果尝试启动其它自己的pods,比如启动一个tomcat集群
引用
{
  "id": "tomcatController",
  "kind": "ReplicationController",
  "apiVersion": "v1beta1",
  "desiredState": {
    "replicas": 2,
    "replicaSelector":{"name": "tomcatCluster"},
    "podTemplate":{
  "desiredState": {
    "manifest": {
      "version": "v1beta1",
      "id": "tomcat",
      "containers": [{
        "name": "tomcat",
        "image": "tutum/tomcat",
     "ports": [
     {"containerPort":8080,"hostPort":80}
     ]
     }]
    }
  },
  "labels": {"name": "tomcatCluster"}}
  },
  "labels": {
    "name": "tomcatCluster",
  }
}

其中pod的tomcat image可以通过Docker Hub Registry https://registry.hub.docker.com/ 搜索及获取

$ cluster/kubectl.sh create -f tomcat-pod.json

创建成功后通过 cluster/kubectl.sh get pods 来查看它所在minion及ip,可以通过curl或浏览器来访问(请开启GCE防火墙端口设置)。

再定义一个 service
引用
{
  "id": "tomcat",
  "kind": "Service",
  "apiVersion": "v1beta1",
  "port": 8080,
  "containerPort": 8080,
  "labels": {
    "name": "tomcatCluster"
  },
  "selector": {
    "name": "tomcatCluster"
  }
}

保存为 tomcat-service.json

$ cluster/kubectl.sh create -f tomcat-service.json

检查service启动后的ip及端口,由于service是内部ip,可以在GCE上通过curl来测试及验证。

$ cluster/kubectl.sh get services

6. 关闭cluster

cluster/kube-down.sh

原文链接:Kubernetes – Google分布式容器技术初体验
  • 大小: 48 KB
  • 大小: 61.3 KB
来自: CSDN
1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 思易ASP木马追捕 v2.0

    检查您的asp源码是否被放了木马,把文件放在您的网站,再用IE浏览器执行就可以了 2.0更新:新增对利用变量创建对象及静态对象建立的搜索功能 增加对自定义关键字的搜索,点击搜索结果相关文件的其它项,有具体的说明 默认检索所有类型文件,包括ZIP及图象格式文件,以期搜索出所有的ASP木马,请在执行此文件时确保站点根目录没有较大文件,首次运行后请更改检查文件类型再对站内文件进行遍历检查,对较大文件的检索可能导致IIS停止响应,甚至可能导致服务器宕机 增加检查文件的大了限制,加快检查速度,请根据需要修改maxfilesize= 512000 项单位为字节

  • 利用FSO做的ASP木马检索工具

    dim timer1,timer2,thetimetimer1=timerServer.ScriptTimeout=1200on error resume next%>body{font-family: 宋体;   font-size: 10pt}table{ font-family: 宋体; font-size: 9pt }a{ font-family: 宋体; font-size: 9pt;

  • ASP木马Webshell安全解决办案(转)

    注意:本文所讲述之设置方法与环境:适用于Microsoft Windows 2000 Server/Win2003 SERVER   IIS5.0/IIS6.0      1、首先我们来看看一般ASP木马、Webshell所利用...

  • 教你利用思易ASP木马追捕入侵站点

    <br />朋友的网站近日多次被黑,而且老是被改页面,让我帮忙看看问题到底出在哪里。于是我找出早就听说可以找木马的思易ASP木马追捕,传到网站上查ASP木马。果然好用,它能列出网站内的所有目录和文件,凡ASP网页中调用FSO,有写(删、建)和上传功能的,它都能给找出来,而且它比其它ASP木马追捕更好的是能查关键字,我用它找出了朋友没有查出的冰狐后门。不过,这个用于网站安全维护的辅助工具,居然没有密码认证。有些粗心的管理员可能在用过后不会想到删除,或者为了以后再用,很可能将它放在网站上——我决定搜搜看。 <b

  • 【PB续命01】Microsoft.XMLHttp的属性和方法的简介及使用

    Microsoft.XMLHttp给PowerBuilder(PB)续命

  • ActiveXObject( "Microsoft.XMLHTTP ")解析

     这样的类首先由Internet Explorer以ActiveX对象引入, 被称为XMLHTTP. 后来Mozilla, Safari 和其他浏览器纷纷仿效, 提供了XMLHttpRequest类,它支持微软的ActiveX对象所提供的方法和属性. 其中 ...

  • ActiveXObject('Microsoft.XMLHTTP')出现“没有权限” 跨域权限问题

    ActiveXObject('Microsoft.XMLHTTP')时出现“没有权限”的错误! 问题可能出现在这行  .open("post",url,false)   你在open另一个域的url   也就是说你开着的网页地址是192.168.0.3,就不能open("get",...

  • Microsoft.XMLHTTP“没有权限”的错误

    Microsoft.XMLHTTP“没有权限”的错误 问题出现在这行  .open 解决方法 IE/Internet 选项/安全/Internet/自定义级别/通过域访问数据源/启用

  • MSXML2.XMLHTTP

    客户端程序编写免不了经常接触...Microsoft.XMLHTTP&quot; 最早的XHR实现。微软官网上说这是MSXML 2.x系列版本的progid。 2.x 系列progid是不带版本号的。看起来简单清楚。 引用: MSXML 2.6 was shipp...

  • JavaScript中解决Microsoft.XMLHTTP乱码的最简单方法

     var oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");  oXmlHttp.Open("POST", "../util/execsql.asp", false);  oXmlHttp.setRequestHeader("Content-Type", "text/xml");  oXmlHttp.setRequestHeader(...

  • Microsoft.XMLHTTP对象

    Microsoft.XMLHTTP对象 MSXML中提供了Microsoft.XMLHTTP对象,能够完成从数据包到Request对象的转换以及发送任务。 创建XMLHTTP对象的语句如下: Set objXML = createObject(Msxml2.XMLHTTP) 或Set objXML = ...

  • 真正实现网络下载,文件不落地.解决XmlHttp对象、winnet.dll、URLDownloadToFile生成的ie缓存(Hook_CreateFileW阻止缓存生成)

    解决XmlHttp对象、winnet.dll生成的ie缓存

  • 转载 Msxml2.ServerXMLHTTP与Msxml2.XMLHTTP区别

    1.ServerXmlHttp ...您可以使用此对象在不同的 Web 服务器之间交换 XML 数据。...被Microsoft XML Parser (MSXML) 版本 3.0 或更高版本提供,并且不支持windows95和windows98环境,支持windows2000,安装ie5的win...

  • Microsoft.XMLHTTP属性和方法,ASPHTTP属性和方法

    MSXML中提供了Microsoft.XMLHTTP对象,能够完成从... 创建XMLHTTP对象的语句如下: Set objXML = createObject(Msxml2.XMLHTTP) 或Set objXML = createObject("Microsoft.XMLHTTP") Or, for version 3.0 of XMLHTTP, u

  • IE8不支持jquery , xmlhttp.open() IE8 拒绝访问

     IE8不支持jquery,甚至于jquery1.4也不支持,所以ajax调用方式,如下面的方法, $(function(){ $.ajax({ type: &quot;GET&quot;, url: &quot;...

  • Microsoft.XMLHTTP对象 和 AspHTTP组件

    Microsoft.XMLHTTP对象 MSXML中提供了Microsoft.XMLHTTP对象,能够完成从数据包到Request对象的转换以及发送任务。 创建XMLHTTP对象的语句如下: Set objXML = createObject(M

  • XMLHttp中文参考手册.rar

    客户端可以通过XmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用微软XML文档对象模型Microsoft XML Document Object Model (DOM)处理回应。 现在的绝对多数浏览器都增加了对XmlHttp的支持,IE中使用...

Global site tag (gtag.js) - Google Analytics