kubernetes简介

来源:互联网 发布:休眠状态关闭网络 编辑:程序博客网 时间:2024/05/18 18:18

一 背景介绍

云计算可谓是现在行业里边的一个新兴的领域,云计算给企业带来的创新能力和发展空间引发了新一轮的IT变革。所谓的云计算,在我看来就是将服务器等资源抽象化,使之能够通过网络以按需、易扩展的方式被获取,他的计算能力是由分布式的大规模集群和虚拟化技术实现的。

云计算提供资源服务的类型大概分为3类:IAAS,PAAS,SAAS。

1.IAAS

IAAS是Infrastructure as a Service的简称,就是基础设施即服务的概念,就是将服务器,存储设备,网络设备等进行抽象,形成了一个可以扩展,可以按资源分配的资源池。在用户看来,这和真实的物理机没有任何区别。只是各种基础设置的配置有IAAS提供的服务进行配置。

2.PAAS

PAAS是Platform as a Service的简称,就是平台及服务的概念。PAAS提供了应用的开发环境和运行环境,并能够自动化部署和运维。开发人员只需要将开发好的应用放到PAAS,即可快速的完成资源的申请,环境搭建,网络配置等一系列繁琐的事情,能够是开发人员更加专注的进行业务代码的开发。

3.SAAS

SAAS是Software as a Service的简称,就是软件及服务的概念,就是将软件以接口的形式提供给终端用户,使用户可以使用浏览器就可以访问,像邮箱就属于saas的范畴。


二 kubernetes

kubernetes是PAAS领域很好的一套开源系统,属于GOOGLE的开源项目。她是构建在docker技术之上的,为容器化的应用提供自愿申请调度,部署运行,服务发现,扩容伸缩等一整套的功能,意思就是应用封装到docker容器,那么kubernetes就可以对容器进行部署,运维等一系列操作,实现自动化。

kubernetes以轻量、开源、强大的容器编排能力等特性广受好评。下面介绍一下kubernetes的核心概念和架构。

1.核心概念

pod

pod是kubernetes中创建,调度,管理的最小单元。每个pod相当于一个集装箱,这个集装箱中包含了一个跟容器和若干个相互关联紧密的业务容器,如下图


pod中的容器之间是部署在一个宿主机上,它们使用相同的网络命名空间、IP、端口,相互之间是可以通过localhost进行通信。


replication controller

简称RC,是用来控制pod副本的,他能够确保集群中pod副本的数量,当有一个或者多个pod挂掉之后,他会自动进行补充知道满足需要pod的个数。RC是kubernetes实现弹性伸缩,滚动升级的核心

service

是一套简单的服务代理和发现机制,他定义了一系列的pod的逻辑集合和访问策略。service将暴露出一个统一的外部访问接口,相当于一个代理服务。

Lable

用来区分pod,service,rc。其实每个API对象都能用lable来标识,service和rc就是通过lable来关联pod的。


2.架构

Master

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

    APIServer。APIServer负责对外提供RESTful的Kubernetes API服务,它是系统管理指令的统一入口,任何对资源进行增删改查的操作都要交给APIServer处理后再提交给etcd。如架构图中所示,kubectl(Kubernetes提供的客户端工具,该工具内部就是对Kubernetes API的调用)是直接和APIServer交互的。

    schedule。scheduler的职责很明确,就是负责调度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。etcd是一个高可用的键值存储系统,Kubernetes使用它来存储各个资源的状态,从而实现了Restful的API。

Node

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

    runtime。runtime指的是容器运行环境,目前Kubernetes支持docker和rkt两种容器。

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

    kubelet。Kubelet是Master在每个Node节点上面的agent,是Node节点上面最重要的模块,它负责维护和管理该Node上面的所有容器,但是如果容器不是通过Kubernetes创建的,它并不会管理。本质上,它负责使Pod得运行状态与期望的状态一致。

至此,Kubernetes的Master和Node就简单介绍完了。下面我们来看Kubernetes中的各种资源/对象。



到这相信对kubernetes主要的核心概念和架构有了一定的概念,具体的眼界会在之后逐渐写出来的。