一、简介

    Kubernetes是容器集群管理系统,用于管理云平台中多个主机上的容器化的应用,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。可以在物理或虚拟机的 Kubernetes 集群上运行容器化应用,Kubernetes 能提供一个以“容器为中心的基础架构”。

主要功能包括:

    基于容器的应用部署、维护和滚动升级

    负载均衡和服务发现

    跨机器和跨地区的集群调度

    自动伸缩

    无状态服务和有状态服务

    广泛的 Volume 支持

    插件机制保证扩展性

特点:

    可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)

    可扩展: 模块化, 插件化, 可挂载, 可组合

    自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展

    Kubernetes 是 Google 2014 年创建管理的,是 Google 10 多年大规模容器管理技术 Borg的开源版本。

二、核心组件

Kubernetes 主要由以下几个核心组件组成

    etcd 保存了整个集群的状态;

    apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;

    controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;

    scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;

    kubelet 负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理;

    Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI);

    kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡。

除了核心组件,还有一些推荐的Add-ons:

    kube-dns负责为整个集群提供DNS服务;

    Ingress Controller为服务提供外网入口;

    Heapster提供资源监控;

    Dashboard提供GUI;

    Federation提供跨可用区的集群;

    Fluentd-elasticsearch提供集群日志采集、存储与查询。

三、核心概念

1、Container

    Container(容器)是一种便携式、轻量级的操作系统级虚拟化技术。它使用namespace 隔离不同的软件运行环境,并通过镜像自包含软件的运行环境,从而使得容器可以很方便的在任何地方运行。

    由于容器体积小且启动快,因此可以在每个容器镜像中打包一个应用程序。这种一对一的应用镜像关系拥有很多好处。使用容器,不需要与外部的基础架构环境绑定, 因为每一个应用程序都不需要外部依赖,更不需要与外部的基础架构环境依赖。完美解决了从开发到生产环境的一致性问题。

    容器同样比虚拟机更加透明,这有助于监测和管理。尤其是容器进程的生命周期由基础设施管理,而不是被进程管理器隐藏在容器内部。最后,每个应用程序用容器封装,管理容器部署就等同于管理应用程序部署。

    每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。

2、Pod

    Kubernetes 使用 Pod 来管理容器,Pod 就像是豌豆荚一样,它由一个或者多个容器组成。Pod 是 Kubernetes 调度的基本单位。Pod 内的多个容器共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。

3、Replication Controller

    Kubernetes复制控制器RC是K8s集群中最早的保证Pod高可用的API对象,适用于长期伺服型的业务类型。

4、Replica Set

    Kubernetes副本集RS是新一代RC,提供同样的高可用能力,区别主要在于RS后来居上,能支持更多种类的匹配模式。副本集对象一般不单独使用,而是作为Deployment的理想状态参数使用。

5、Deployment

    部署是一个比RS应用模式更广的API对象,可以是创建一个新的服务,更新一个新的服务,也可以是滚动升级一个服务。以K8s的发展方向,未来对所有长期伺服型的的业务的管理,都会通过Deployment来管理。

6、Service

    RC、RS和Deployment只是保证了支撑服务的微服务Pod的数量,这些服务集群的统一入口是通过Service提供,每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问一个服务。

7、Namespace

    Namespace 是对一组资源和对象的抽象集合,可以用来将系统内部的对象划分为不同的项目组或用户组,为集群提供虚拟隔离。

8、Node

    Node是Pod真正运行的主机,可以物理机,也可以是虚拟机。为了管理Pod,每个Node节点上至少要运行container runtime(比如docker或者rkt)、kubelet和kube-proxy服务。

9、Job

    Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。

10、CronJob

    CronJob即定时任务,就类似于Linux系统的crontab,在指定的时间周期运行指定的任务。’

11、StatefulSet

    StatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计)。

12、DaemonSet

    DaemonSet保证在每个Node上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐