阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

219次阅读
没有评论

共计 3312 个字符,预计需要花费 9 分钟才能阅读完成。

Kubernetes 是 Google 开源的容器集群管理系统。前几天写的 分布式服务框架的 4 项特性 中提到一个良好的分布式服务框架需要实现

服务的配置管理。包括服务发现、负载均衡及服务依赖管理。
服务之间的调度及生命周期管理。

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

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

运行环境

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 – Google 分布式容器技术初体验

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

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

小结

总的看来 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=f1micro
  2. MINION_SIZE=f1micro
  3. NUM_MINIONS=3

在 kubernetes 目录运行

  1. $ cluster/kubeup.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 tomcatpod.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 tomcatservice.json

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

  1. $ cluster/kubectl.sh get services

6. 关闭 cluster

  1. cluster/kubedown.sh

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2014-11/10965.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计3312字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中