Kubernetes—生产级容器集群平台简介

一、kubernetes简介

kubernetes是谷歌公司开源的一个容器管理平台,底层基于Docker、rkt等容器技术,提供强大的应用管理和资源调度能力。Kubernetes已经成为目前容器云领域影响力最大的开源平台,使用kubernetes,用户可以轻松搭建和管理一个可扩展的生产级别容器云。

kubernetes是基于go语言实现,遵守Apache v2许可,试图为基于容器的应用部署和生产管理打造一套强大并且易用的操作平台。

二、kubernetes核心功能

自我修复

服务发现和负载均衡

自动部署和回滚

弹性伸缩

三、Kubernetes最佳的应用场景——微服务架构

四、kubernetes核心组件

1. Master节点上的组件

Master节点上面主要由四个模块组成:APIServer、scheduler、controller manager、etcd

-> API-Server: 负责对外提供RESTful的Kubernetes API服务,它提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制,任何对资源进行增删改查的操作都要交给APIServer处理后再提交给etcd。kubectl(k8s提供的客户端工具,该工具内部就是对Kubernetes API的调用)是直接和APIServer交互的。

-> schedule: 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上,即就是负责调度pod到合适的Node上。如果把scheduler看成一个黑匣子,那么它的输入是pod和由多个Node组成的列表,输出是Pod和一个Node的绑定,即将这个pod部署到这个Node上。Kubernetes目前提供了调度算法,但是同样也保留了接口,用户可以根据自己的需求定义自己的调度算法。

-> controller manager: 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等。如果说APIServer做的是“前台”的工作的话,那controller manager就是负责“后台”的。每个资源一般都对应有一个控制器,而controller manager就是负责管理这些控制器的。比如我们通过APIServer创建一个pod,当这个pod创建成功后,APIServer的任务就算完成了。而后面保证Pod的状态始终和我们预期的一样的重任就由controller manager去保证了。

-> etcd: 它是一个高可用的键值存储系统,Kubernetes使用它来存储各个资源的状态,从而实现了Restful的API。即保存了整个集群的状态

2. Node节点上的组件

每个Node节点主要由三个模块组成:kubelet、kube-proxy、Container runtime。

-> Container runtime 指的是容器运行环境,目前Kubernetes支持docker和rkt两种容器。负责镜像管理以及Pod和容器的真正运行(CRI)

-> kubelet:Kubelet是Master在每个Node节点上面的agent,是Node节点上面最重要的模块,它负责维护和管理该Node上面的所有容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理,但是如果容器不是通过Kubernetes创建的,它并不会管理。本质上,它负责使Pod得运行状态与期望的状态一致。

-> kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡。该模块实现了Kubernetes中的服务发现和反向代理功能。反向代理方面:kube-proxy支持TCP和UDP连接转发,默认基于Round Robin算法将客户端流量转发到与service对应的一组后端pod。服务发现方面,kube-proxy使用etcd的watch机制,监控集群中service和endpoint对象数据的动态变化,并且维护一个service到endpoint的映射关系,从而保证了后端pod的IP变化不会对访问者造成影响。另外kube-proxy还支持session affinity。

3. Pod
Pod是k8s进行资源调度的最小的资源单位,每个Pod中运行着一个或多个密切相关的业务容器,这些业务容器共享这个Pause容器的IP和Volume,我们以这个不易死亡的Pause容器作为Pod的根容器,以它的状态表示整个容器组的状态。一个Pod一旦被创建就会放到Etcd中存储,然后由Master调度到一个Node绑定,由这个Node上的Kubelet进行实例化。每个Pod会被分配一个单独的Pod IP,Pod IP + ContainerPort 组成了一个Endpoint。

4. Service
对外提供某个特定功能的一组POD(可通过标签来选择)和所关联的访问配置。Service其功能使应用暴露,Pods 是有生命周期的,也有独立的 IP 地址,随着 Pods 的创建与销毁,一个必不可少的工作就是保证各个应用能够感知这种变化。这就要提到 Service 了,Service 是 YAML 或 JSON 定义的由 Pods 通过某种策略的逻辑组合。更重要的是,Pods 的独立 IP 需要通过 Service 暴露到网络中。

5. volume

存储卷提供数据的持久化存储,并支持更高级的生命周期管理和参数指定功能,支持多种本地和云存储类型。

6.Namespace

Kubernetes通过命名空间来实现虚拟化,将同一组物理资源虚拟为不同的抽象集群,避免不同租户的资源发生命名冲突,另外可以进行资源限额。

7. 扩展组件

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

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

Heapster:提供资源监控

Dashboard:提供GUI

Federation:提供跨可用区的集群

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

Kubernetes集群可以帮助培育出一个组件及工具的生态,帮助减轻在公有云及私有云上运行应用的负担。

五、Kubernetes架构图

六、kubernetes核心概念

Kubernetes中每种对象都拥有一个对应的声明式API。对象包括三大属性:元数据(metadata)、规范(spec)和状态(status)。通过这三个属性,用户可以定义让某个对象处于给定的状态(如多少个pod运行在哪些节点上)以及表现策略(如如何升级、容错),而无须关心具体的实现细节。

当使用kubernetes管理这些对象时,每个对象可以使用一个外部的json或者yaml模板文件定义,通过参数传递给命令或API。每个模板文件中定义apiVersion(如v3)、kind(如Deployment、service)、metadata(包括名称、标签信息等)、spec(具体定义)等信息。

posted @ 2020-09-20 16:55  出水芙蓉·薇薇  阅读(366)  评论(0编辑  收藏  举报