文章目录

1. 简介

Kubernetes是什么?

  • 首先,它是一个全新的基于容器技术的分布式架构领先方案。
  • Kubernetes是谷歌严格保密十几年的秘密武器—Borg的一个开源版本。
  • Kubernetes是一个完备的分布式系统支撑平台。

如何解释?
Kubernetes具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应
用支撑能力、透明的服务注册和服务发现机制、内建的智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。同时,Kubernetes提供了完善的管理工具,这些工具涵盖了包括开发、部署测试、运维监控在内的各个环节。

2. borg背景:

Borg是谷歌的一个久负盛名的内部使用的大规模集群管理系统,它基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化。十几年以来,谷歌一直通过Borg系统管理着数量庞大的应用程序集群。由于谷歌员工都签署了保密协议,即便离职也不能泄露Borg的内部设计,所以外界一直无法了解关于它的更多信息。直到2015年4月,传闻许久的Borg论文伴随Kubernetes的高调宣传被谷歌首次公开,大家才得以了解它的更多内幕。正是由于站在Borg这个前辈的肩膀上,汲取了Borg过去十年间的经验与教训,所以Kubernetes一经开源就一鸣惊人,并迅速称霸容器领
域。

3. 对kubernetes必备基础知识

3.1 service

​Service​​​是分布式集群架构的核心。
一个Service对象拥有如下关键特征。

  • ◎ 拥有唯一指定的名称(比如mysql-server)。
  • ◎ 拥有一个虚拟IP(Cluster IP、Service IP或VIP)和端口号。
  • ◎ 能够提供某种远程服务能力。
  • ◎ 被映射到提供这种服务能力的一组容器应用上。

Service的服务进程目前都基于Socket通信方式对外提供服务。比如:Redis、Memcache、MySQL、Web Server,或者是实现了某个具体业务的特定TCP Server进程。虽然一个Service通常由多个相关的服务进程提供服务,每个服务进程都有一个独立的Endpoint(​​IP+Port​​​)访问点,但Kubernetes能够让我们通过Service(​​虚拟Cluster IP +Service Port​​)连接到指定的Service。有了Kubernetes内建的透明负载均衡和故障恢复机制,不管后端有多少服务进程,也不管某个服务进程是否由于发生故障而被重新部署到其他机器,都不会影响对服务的正常调用。更重要的是,这个Service本身一旦创建就不再变化,这意味着我们再也不用为Kubernetes集群中服务的IP地址变来变去的问题而头疼了。

3.2 pod

容器提供了强大的隔离功能,所以有必要把为Service提供服务的这组进程放入容器中进行隔离。为此,Kubernetes设计了​​Pod​​​对象,将每个服务进程都包装到相应的Pod中,使其成为在Pod中运行的一个容器(Container)。为了建立Service和Pod间的关联关系,Kubernetes首先给每个Pod都贴上一个标签(Label),给运行MySQL的Pod贴​​name=mysql​​​标签,给运行PHP的Pod贴上​​name=php​​​标签,然后给相应的Service定义标签选择器(​​Label Selector​​​),比如MySQL Service的标签选择器的选择条件为​​name=mysql​​​,意为该Service要作用于所有包含name=mysql Label的Pod。这样一来,就巧妙解决了Service与Pod的关联问题。
pod特点:

  • 首先,Pod运行在一个被称为节点(Node)的环境中,这个节点既可以是物理机,也可以是私有云或者公有云中的一个虚拟机,通常在一个节点上运行几百个Pod;
  • 其次,在每个Pod中都运行着一个特殊的被称为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此它们之间的通信和数据交换更为高效,在设计时我们可以充分利用这一特性将一组密切相关的服务进程放入同一个Pod中;
  • 最后,需要注意的是,并不是每个Pod和它里面运行的容器都能被映射到一个Service上,只有提供服务(无论是对内还是对外)的那组Pod才会被映射为一个服务。

3.3 replica controller(RC)

服务的扩容涉及资源分配(选择哪个节点进行扩容)、实例部署和启动等环节,在一个复杂的业务系统中,这两个难题基本上靠人工一步步操作才得以解决,费时费力又难以
保证实施质量。在Kubernetes集群中,只需为需要扩容的Service关联的Pod创建一个
RC(Replication Controller),服务扩容以至服务升级等令人头疼的问题都迎刃而解。在一个RC定义文件中包括以下3个关键信息。

  • ◎ 目标Pod的定义。
  • ◎ 目标Pod需要运行的副本数量(Replicas)。
  • ◎ 要监控的目标Pod的标签。

在创建好RC(系统将自动创建好Pod)后,Kubernetes会通过在RC中定义的Label筛选出对应的Pod实例并实时监控其状态和数量,如果实例数量少于定义的副本数量,则会根据在RC中定义的Pod模板创建一个新的Pod,然后将此Pod调度到合适的Node上启动运行,直到Pod实例的数量达到预定目标。这个过程完全是自动化的,无须人工干预。有了
RC,服务扩容就变成一个纯粹的简单数字游戏了,只需修改RC中的副本数量即可。后续的服务升级也将通过修改RC来自动完成。

4. kubernets集群架构

Kubernetes将集群中的机器划分为一个​​Master​​​和一些​​Node​​​。在Master上运行着集群管理相关的一组进程​​kube-apiserver、kube-controller-manager和kubescheduler​​,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理功
能,并且都是自动完成的。Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。在Node上运行着Kubernetes的​​​kubelet、kube-proxy​​服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁,以及实现软件模式的负载均衡器