Kubernetes – Google分布式容器技术初体验

Kubernetes – Google分布式容器技术初体验

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个总数不变,这样管理一个大型系统变得轻松和简单。

kubernetes

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定向的局限性,不适合作为大型服务的实现。

services overview

小结

总的看来Kubernetes提供的能力非常令人激动,pod、replicationController以及service的设计非常简单实用。但如果立即将服务迁移到Kubernetes,还需要面对易变的环境。另外一方面尽管Kubernetes提供health check的机制,但service生产环境所需的苛刻的可用性还未得到充分的验证。

安装说明

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

前提准备

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

安装步骤

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

2. 安装Google cloud sdk


  1. $ curl https://sdk.cloud.google.com | bash
  2. $ gcloud auth login

按提示完成授权及登录

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

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

修改 cluster/gce/config-default.sh,主要是修改以下字段以便节约资源。


  1. MASTER_SIZE=f1-micro
  2. MINION_SIZE=f1-micro
  3. NUM_MINIONS=3

在kubernetes目录运行


  1. $ cluster/kube-up.sh

执行成功后会显示 done

5. 测试pod

以上脚本启动了examples/monitoring 下面定义的service,如果尝试启动其它自己的pods,比如启动一个tomcat集群


  1. {
  2. "id": "tomcatController",
  3. "kind": "ReplicationController",
  4. "apiVersion": "v1beta1",
  5. "desiredState": {
  6. "replicas": 2,
  7. "replicaSelector":{"name": "tomcatCluster"},
  8. "podTemplate":{
  9. "desiredState": {
  10. "manifest": {
  11. "version": "v1beta1",
  12. "id": "tomcat",
  13. "containers": [{
  14. "name": "tomcat",
  15. "image": "tutum/tomcat",
  16. "ports": [
  17. {"containerPort":8080,"hostPort":80}
  18. ]
  19. }]
  20. }
  21. },
  22. "labels": {"name": "tomcatCluster"}}
  23. },
  24. "labels": {
  25. "name": "tomcatCluster",
  26. }
  27. }

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


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

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

再定义一个 service


  1. {
  2. "id": "tomcat",
  3. "kind": "Service",
  4. "apiVersion": "v1beta1",
  5. "port": 8080,
  6. "containerPort": 8080,
  7. "labels": {
  8. "name": "tomcatCluster"
  9. },
  10. "selector": {
  11. "name": "tomcatCluster"
  12. }
  13. }

保存为 tomcat-service.json


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

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


  1. $ cluster/kubectl.sh get services

6. 关闭cluster


  1. cluster/kube-down.sh

 原文发布时间:2014-11-20

本文来自云栖合作伙伴“linux中国”

时间: 2024-11-18 03:39:30

Kubernetes – Google分布式容器技术初体验的相关文章

Android Bluetooth蓝牙技术初体验

一:Bluetooth包简介 Android平台提供了一个android.bluetooth的包,里面实现蓝牙设备之间通信的蓝牙API.总共有8个类,常用的四个类如下: BluetoothAdapter类 代表了一个本地的蓝牙适配器.它是所有蓝牙交互的入口点.利用它你可以发现其他蓝牙设备,查询绑定了的设备,使用已知的MAC地址实例化一个蓝牙设备和建立一个BluetoothServerSocket(作为服务器端)来监听来自其他设备的连接. BluetoothDevice类 代表了一个远端的蓝牙设备

Google 加入 OpenStack 基金会,向容器技术迈进

一位最具重量级的新成员加入 OpenStack 基金会,这就是--Google! 双方的合作承将在例如 Murano 应用目录.Magnum 容器流程管理服务等一系列开源项目持续贡献工程资源.这使得OpenStack在同一个 Dashboard中管理虚拟的.非虚拟的.以及容器应用成为可能.这对于所有的希望尝试云的企业来说绝对是个好消息,因为他们还没准备为云环境重写所有 应用,但又希望在投身云计算时有为云优化的.全新的应用. https://yqfile.alicdn.com/57ebdce022

DockOne微信分享(一二〇):基于Kubernetes的私有容器云建设实践

本文讲的是DockOne微信分享(一二〇):基于Kubernetes的私有容器云建设实践[编者的话]本次分享将为大家介绍易宝支付私有容器云从0到1的建设之路.包括技术选型.理论基础.基于Kubernetes的容器云和CI/CD落地过程中的挑战和踩过的坑. 建设背景及目标 在Docker技术流行开来之前,保证软件交付的质量和速度对于大多数企业来说都是困难的.业务的复杂性带来了应用的复杂性,面对成千上万的不同应用,运维部门需要时刻应对来自不同应用.不同环境的挑战.特别是在自动化运维程度不高的企业,"

DockOne微信分享(七十六):容器化ICT融合初体验

本文讲的是DockOne微信分享(七十六):容器化ICT融合初体验[编者的话]本次将分享的容器化ICT融合平台是一种面向未来ICT系统的新型云计算PaaS平台,它基于容器这一轻量级的虚拟化技术以及自动化的"微服务"管理架构,能够有效支撑应用快速上线和自动扩缩容,最大化IT基础设施资源利用率并降低总体拥有成本(TCO).未来的网络正在向IT化.云化方向发展,容器与微服务技术,完美契合"网络即服务".网络切片等发展理念,将有助于实现更加灵活.智能.高效和开放的5G新型网

Docker的Windows容器初体验

系列文章 第一篇 Docker的Windows容器初体验 - 本文 第二篇 阿里云Windows Server 2016环境Docker试用 最近微软发布了Windows Server 2016,其中最让广大开发者和运维同学期待的就是Docker对Windows容器的支持. Windows支持两种不同类型的容器,即 Windows Server 容器和 Hyper V 容器. 这两种类型的容器的使用方式相同,也支持相同的容器映像. 但是它们的实现机制不同,提供了不同的安全隔离级别 Windows

Docker 容器初体验

Docker 容器初体验 在本文中,我们将迈出使用Docker的第一步,学习第一个Docker容器.本章还会介绍如何与Docker进行交互的基本知识. 1 确保Docker已经就绪 首先,我们会查看Docker是否能正常工作,然后学习基本的Docker的工作流:创建并管理容器.我们将浏览容器的典型生命周期:从创建.管理到停止,直到最终删除. 第一步,查看docker程序是否存在,功能是否正常,如代码清单3-1所示. 代码清单3-1 查看docker程序是否正常工作 $ sudo docker i

一起谈.NET技术,ASP.NET MVC 3 Beta初体验之超酷的Chart:3D效果

在前一篇文章:ASP.NET MVC 3 Beta初体验之超酷的Chart中介绍了Chart的使用,但是没有介绍到3D效果.这篇文章将介绍一下Chart的3D效果的展示.声明一点的是:这个Chart控件可能没有一些开源或者不开源,收费或者不收费的组件那般强大,我相信未来这个控件会越来越强大的.废话不多说了,看下如何展示Chart的3D效果. 显示3D的效果,微软给了我们两种解决方案.一种是使用他自带的样式,一种是自己配置一个显示样式的XML. 第一种使用自带的样式:很简单,在上一篇文章中其实有提

一起谈.NET技术,ASP.NET MVC 3 Beta初体验之超酷的Chart

前面一篇文章:ASP.NET MVC 3 Beta初体验之WebGrid介绍了WebGrid控件的使用,ASP.NET MVC 3 Beta中才内置Chart的.这篇文章中将介绍Chart的使用.包括Chart数据源的配置.Chart的显示.Chart保存三个方面.Chart是很多系统中使用,所以在ASP.NET MVC 3 Beta初体验之中介绍它是很有必要的. 1.配置Chart的数据源 给Chart配置数据源大概有三种方式. 第一种:使用数组 示例: Controller代码: publi

云计算:容器技术变革云计算,SaaS带动CaaS市场

报告摘要: 1.容器技术增速惊人,市场认可度提高 虚拟化是云计算的重要基础,Docker定义了一套容器从构建到执行的标准化体系,改变了传统的虚拟化技术,深度影响了云计算领域. 随着谷歌.亚马逊.微软等云计算厂商纷纷加大对Docker开源技术的投入,CaaS(Container-as-a-Service)的市场大门正式被开启.根据统计,到2015年全球已有46万个应用Docker化,两年实现增长3,000%.在发展速度上,已超过当时的虚拟化技术和云计算技术. 2.SaaS产业向移动和垂直领域发展,