Kubernetes入门简介

Kubernetes是谷歌开源的一款大规模容器管理平台,在介绍这一平台之前,先跟大家讨论一下这个单词的读法!实际上,这个单词你在英文词典上根本查不着,因为它不是一个“英文单词”,Kubernetes,古希腊语是舵手的意思,是Cyber的词源。根据其拼写,我习惯称呼它为“k8s”

国内哪些公司在大规模的使用Kubernetes

  • 滴滴

  • 网宿

Kubernetes是什么

Kubernetes是Google开源的容器集群管理系统。它构建在Docker之上,为容器话的应用提供资源调度、部署运行、服务发现、扩容缩容等一整套功能,本质上可以看做是基于容器技术的Micro-PaaS平台,是第三代PaaS技术的代表之作。

Google从2004年开始就已经开始在使用容器技术了,于2006年发布了Cgroup,而且内部开发的强大的集群资源管理平台Borg和Omega,这些都已经广泛用在Google的各个基础设施中,而Kubernetes得灵感来源于Google内部的Borg系统,更是吸收了包括Omega在内的容器管理器的经验和教训。

Kubernetes有着以下优秀的特性:

  • 强大的容器编排能力

    Kubernetes可以说是同Docker一起发展起来的,深度集成了Docker,天然适应容器的特点,设计出强大的容器编排能力,比如容器组合、标签选择和服务发现等,可以满足企业级的需求

  • 轻量级

    Kubernetes遵循微服务架构理论,整个系统划分出各个功能独立的组件,组件之间边界清晰,部署简单,可以轻易地运行在各种系统和环境中。同时Kubernetes中的许多功能都实现了插件化,可以非常方便地进行扩展和替换。

  • 开放 开源

    Kubernetes顺应了开放开源的趋势,吸引了大批开发者和公司参与其中,协同工作,共同构建生态圈。同时,Kubernetes同Openstack、Docker等开源社区积极合作、共同发展

Kubernetes的发展史

Kubernetes自推出之后就迅速获得极高的关注与参与,2015年7月经过400多位贡献者一年的努力,多达14000次代码的提交,Google正式对外发布了Kubernetes v1.0,意味着这个开源容器编排系统可以正式在生产环境中使用。

  • 2014年6月:谷歌宣布Kubernetes开源

  • 2014年7月:MicroSoft、RedHat、IBM、Docker、CoreOS、Mesosphere、Saltstack加入到Kubernetes社区

  • 2014年8月:Mesosphere宣布将Kubernetes作为框架整合到Mesosphere生态系统中,用于Docker容器集群的调度、部署和管理

  • 2014年8月:VMware加入Kubernetes社区

  • 2014年11月:HP加入Kubernetes社区

  • 2014年11月:Google容器引擎Alpha启动

  • 2015年1月:Kubernetes被引入到Openstack

  • 2015年4月:Google和CoreOS联合发布Tectonic,它将Kubernetes和CoreOS软件栈整合到了一起

  • 2015年5月:Intel加入到Kubernetes社区

  • 2015年6月:Google容器进入到beta版

  • 2015年7月:Kubernetes v1.0版本正式发布

Kubernetes的核心概念

Pod

Pod是若干相关容器的组合,Pod包含的容器运行在同一台宿主机上,这些容器使用相同的网络命名空间、IP地址和端口,相互之间能通过localhost来发现和通信。这些容器还可以共享一块存储卷空间。在Kubernetes中创建、调度和管理的最小单元就是Pod,而不是容器,Pod通过更高层次的抽象,提供了更加灵活的部署和管理模式。

Replication Controller

Replication Controller用来控制管理Pod副本,它确保任何时候Kubernetes集群中有指定数量的Pod副本在运行。如果少于指定数量的Pod副本,它会启动新的Pod副本,反之它会杀死多余的副本以保证数量不变。而且,Replication Controller是弹性伸缩、滚动升级的实现核心

Service

Service是真实应用服务的抽象,定义了Pod的逻辑集合和访问这个Pod集合的策略。Service将代理Pod对外表现为一个单一的访问接口,外部不需要了解后端Pod是如何运行的,这给扩展和维护带来很多好处,提供了一套简化的服务代理和发现机制

Label

Label是用于区分Pod、Service、Replication Controller和Key/Value对,实际上,Kubernetes中的任意API对象都可以通过Label进行标识。每个API对象可以有多个Label,但是每个Label的Key只能对应一个Value。Label是Service和Replication Controller运行的基础,他们都通过Label来关联Pod,相比于强绑定模型,这是一种非常好的松耦合关系。

Node

Kubernetes属于主从分布式集群架构,Kubernetes Node运行并管理容器。Node作为Kubernetes的操作单元,用来分配给Pod进行绑定,Pod最终运行在Node上,Node可以认为是Pod的宿主机


在接下来的章节中,我将以《Kubernetes的官方文档》以及《Kubernetes实战》为依据,跟大家分享Kubernetes的架构、部署和应用

Kubernetes官方网站:http://kubernetes.io