谷歌云平台自身如何使用Kubernetes?

来源:互联网 发布:excel数据套打 编辑:程序博客网 时间:2024/04/29 04:14

谷歌云平台自身如何使用Kubernetes?

2017-3-5 

关注世界领先 DevOps 平台 JFrog


关于Kubernetes



Kubernetes是谷歌内部容器管理平台 Borg 的升级版。Kubernetes解决了很多 Docker 自身固有的问题。可以通过 Kubernetes 挂载数据盘来持久化数据,使用flannel创建容器间的网络,同时集成了负载均衡,使用etcd 进行服务发现。它的特性包括:


1.     容器的基础架构

2.     轮询,管理容器,支持虚拟机和物理机

3.     平台自动化部署,扩容和运维

4.     根据 google 内部系统的经验研发

5.     100%开源,使用 Go 语言


1

谷歌云平台和 Kubernetes



最开始,谷歌云平台采用虚机镜像的方式,维护一个又一个的镜像,镜像里包含了所有的可执行文件,配置,共享包已经流程生命周期管理软件。


虽然是不可变虚机镜像,也能支持可预测的回滚,但是镜像太重,复制成本太高而无法实现秒级动态扩容,以及自动故障恢复。



现在,谷歌里所有的东西都跑在容器里,每周会启动20亿个容器。



从程序猿的视角来看,如果你需要发布一个服务,你只需要声明服务的依赖,运行时环境,二进制文件地址,以及发布服务的数量,你就可以快速上线多个服务的实例,运行在负载均衡之后。



2

达到今天的容器管理能力,

谷歌云也经历了一系列的技术演进。



看看Borg(Kubernetes 的前身) 时代的谷歌云平台架构


1.     从某个仓库拉取依赖和需要部署的包。

2.     将配置文件传给 BorgMaster。

3.     Scheduler 定期轮询 BorgMaster 里的任务,典型的生产者/消费者模式。

4.     找到空闲的 Borglet,执行配置文件指定的任务。这样就产生,并运行了无数个微服务。


从Borg 到 Kubernetes ,谷歌云发生了一系列技术演进。



1.     把镜像存储换成了Artifactory,通过 Artifactory拉取容器镜像

2.     将配置文件发送到 Kubernetes Master

3.     Scheduler 进行轮询调度

找到空闲的 Kubelet 执行指定任务


程序猿的视角



程序猿可以通过 Kubernetes按需扩容,实现失败节点自动重启。


3

实战Kubernetes构建云原生应用



这是初始状态的节点:



执行 kubectl run,可以运行指定的镜像,并且app 的参数可以加上 visualize=true 等来过滤你的目标 app。在谷歌云平台多产品流水线上,这个功能尤其有用,能够让你通过脚本找到你需要自动上线的包,实现动态扩容。



Kubernetes 会实时监控实例的状态,当某一个实例挂掉时,Kubernetes 会为你重启这个实例。


如果你需要水平扩展多个实例,可以执行 Kubectl scale deployment app –replicas=2, 这表明你需要将实例个数扩展到2个,Kubernetes 会实时扩展两个实例。



你也可以加上负载均衡来绑定固定 IP 和端口。Kubernetes 自身支持了负载均衡的服务。



当然,作为一个云原生应用,你的应用需要依赖其他的服务,比如 Redis,Mysql 等等。这些服务是按需获取,不应该绑定某个连接信息,而是应该动态获取。


那么这些服务的镜像从哪里下载呢?


4

使用 Artifactory 作为 

Kubernetes 的私有镜像仓库


HELM是 Kubernetes 项目的子模块。Github地址:https://github.com/kubernetes/helm,可以用来管理Kubernetes Charts。Charts 是预先配置Kubernetes 资源包。


使用 Helm 可以:

·       找到并使用 最流行的Kubernetes Charts软件包

·       将自己的软件包以 Charts 的形式分享出去

·       为 Kubernetes 应用创建可复用的构建

·       智能的管理 Kubernetes 的manifest 文件

·       管理 Helm包的发布


HELM CHARTS长什么样?



可以看到它提供了镜像的名称,版本,依赖声明,以及源文件地址。有了这些信息,Kubernetes 知道从哪里获取这个镜像的依赖,并完成镜像的创建。



如何存储这些 charts 呢?Kubernetes 提供 Helm 的仓库,来支持私有的镜像仓库。


谷歌云平台使用 Artifactory 作为 Helm 仓库,Artifactory 提供了 Helm 仓库的支持,同时,也将所有的 Docker 镜像存储在 Artifactory,作为本地私有的镜像中心。


总结


谷歌云平台基于 Kubernetes 搭建,目前能够支持每周启动20亿次服务,动态扩容,故障自动恢复,利用本地镜像私服(Artifactory)快速构建镜像,一旦云平台需要扩容,或者实现故障恢复,Artifactory 作为镜像中心始终提供可靠的服务,从而使得谷歌云平台上的应用时刻具备响应大规模并发请求的能力。


关于JFrog

公司成立于2008年,在美国、以色列、法国和西班牙,中国北京市拥有超过200名员工。JFrog 拥有3000多个付费客户,其中知名公司包括如Netflix、思科、谷歌、亚马逊。最近,JFrog 连续第二年被德勤评选为50家增长最快的技术公司之一,还被评为硅谷增长最快的私营企业之一。

0 0