Kubernetes(K8s)介绍

一、Kubernetes简介

Kubernetes(K8s)是Google开源的容器集群管理系统。它构建在Docker技术之上,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等一整套功能。
Kubernetes的发展历史为:

  • 2014年6月:谷歌宣布Kubernetes开源。
  • 2014年7月:Microsoft、Red Hat、IBM、Docker、CoreOS、Mesosphere和Saltstack加入Kubernetes。
  • 2014年8月: Mesosphere宣布将Kubernetes作为框架整合到Mesosphere生态系统中,用于Docker容器集群的调度、部署和管理。 2015年1月:Google和Mirantis及伙伴将Kubernetes引入Openstack,开发者可以在Openstack上部署运行Kubernetes应用。
  • 2015年7月:Kubernetes v1.0正式发布。
  • 2020年2月:目前,Kubernetes最新的正式版本为V1.17.3。

二、Kubernetes的优秀特性

Kubernetes具有许多优秀特性,包括:

  • 强大的容器编排能力:深度集成了Docker,天然适应容器的特点,设计出强大的容器编排能力,比如容器组合、标签选择和服务发现等,可以满足企业级需求。
  • 轻量级:遵循微服务架构理论,整个系统划分出各个功能独立的组件,组件之间边界清晰,部署简单,可以轻易地运行在各种系统和环境中。同时,Kubernetes中的许多功能都实现了插件化,可以非常方便地进行扩展和替换。
  • 开放开源:吸引了大批开发者和公司参与其中,协同工作共同构建生态圈。同时,Kubernetes同OpenStack、Docker等开源社区积极合作、共同发展。

三、Kubernetes架构

Kubernetes的重要操作对象、功能组件、功能特征及其关系如下图所示。
Kubernetes(K8s)介绍

1、操作对象

Kubernetes的主要操作对象包括Pod、Service、Replication Controller,它们之间可以通过Label进行关联,如下图所示。
Kubernetes(K8s)介绍

(1)Pod

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

(2)Service

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

(3)Replication Controller

Replication Controller用来控制管理Pod副本(Replica,或者称为实例),确保任何时候Kubernetes集群中有指定数量的Pod副本在运行。它是弹性伸缩、滚动升级的实现核心。

(4)Label

Label是用于区分Pod、Service、Replication Controller的Key/Value对,实际上,Kubernetes中的任意API对象都可以通过Label进行标识。每个API对象可以有多个Label,但是每个Label的Key只能对应一个Value。
Label是Service和Replication Controller运行的基础,它们都通过Label来关联Pod。如上图所示,有3个Pod都有Label为"app=backend",创建Service和Replication Controller时可以指定同样的Label:“app=backend”,再通过label selector机制,就将它们与这3个Pod关联起来了。当有其他frontend pod访问该Service时,自动会转发到其中的一个backend pod。

2、功能组件

Kubernetes的主要功能组件包括Master和Node(即Slave)这两类。

(1)Kubernetes Master

Kubernetes Master为控制节点,调度管理整个系统,主要包含组件为API Server、Scheduler、Controller Manager。

  • API Server:作为Kubernetes系统的入口,其封装了核心对象的增删改查操作,以REST API接口方式提供给外部客户和内部组件调用。它维护的REST对象将持久化到Etcd中。
  • Scheduler:负责集群的资源调度,为新建的Pod分配机器。这部分工作分出来变成一个组件,意味着可以很方便地替换成其他的调度器。
  • Controller Manager:负责执行各种控制器,比较重要的如下。
    Kubernetes(K8s)介绍

(2)Kubernetes Node

Kubernetes Node为运行节点,用于运行管理业务的容器,主要包含组件为Kubelet、Kubernetes Proxy。

  • Kubelet:负责管控Docker容器,如启动/停止、监控运行状态等。它会定期从Etcd获取分配到本机的Pod,并根据Pod信息启动或停止相应的容器。同时,它也会接收API Server的HTTP请求,汇报Pod的运行状态。
  • Kubernetes Proxy:负责为Pod提供代理。它会定期从Etcd获取所有的Service,并根据Service信息创建代理,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。当某个客户Pod要访问其他Pod时,访问请求会经过本机Proxy做转发。

3、功能特性

Kubernetes通过各个功能组件,实现了强大的容器集群管理功能,包括:

  • 资源调度:通过Scheduler组件实现;
  • 部署启动:通过Kubelet组件实现;
  • 运行监控:通过Kubelet组件实现;
  • 服务发现:通过Proxy组件实现;
  • 错误处理:通过Controller Manager组件执行Replication Controller、Node Controller等控制器实现;
  • 扩容缩容:通过Controller Manager组件执行Pod Autoscaler Controller控制器实现。