Kubernetes(一):简介

一、容器

为了降低虚拟机造成的物理主机资源浪费,提高物理主机的资源利用率,并能够提供像虚拟机一样良好的应用程序隔离运行环境,人们把这种轻量级的虚拟机,称为“容器”。

1.1 容器管理工具

容器管理工具类似于虚拟机管理工具,主要用于容器的创建、启动、关闭、删除等。

容器管理工具有:

  • docker公司的docker
  • 国内阿里公司的Pouch
  • LXCLXDRKT等等

1.2 容器编排部署工具

容器管理工具可以完成容器的基础管理,但是容器的应用并不是只能进行简单应用部署的,可以使用容器完成企业中更加复杂的应用部署,当需要对多应用的系统进行部署时,就需要更加复杂的工具来完成对容器运行应用的编排,这就是我们所说的容器编排部署工具。

容器编排部署工具有:

  • docker三剑客:docker machinedocker composedocker swarm
  • mesos + marathon
  • kubernetes

二、Kubernetes

2.1 Kubernetes简介

Kubernetes(通常写成k8s),KubernetesGoogle开源的容器集群管理系统。其设计目标是在主机集群之间提供一个能够自动化部署、可拓展、应用容器可运营的平台。Kubernetes通常结合docker容器工具工作,并且整合多个运行着docker容器的主机集群,Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。

功能特性:

  • 自动装箱:基于容器对应用运行环境的资源配置要求自动部署应用容器
  • 自我修复:当容器失败时,会对容器进行重启;当所部署的Node节点有问题时,会对容器进行重新部署和重新调度;当容器未通过监控检查时,会关闭此容器;直到容器正常运行时,才会对外提供服务
  • 水平扩展:通过简单的命令、用户UI界面或基于CPU等资源使用情况,对应用容器进行规模扩大或规模剪裁
  • 服务发现:用户不需要使用额外的服务发现机制,就能够基于Kubernetes自身能力实现服务发现和负载均衡
  • 滚动更新:可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
  • 版本回退:可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
  • **和配置管理:在不需要重新构建镜像的情况下,可以部署和更新**和应用配置,类似热部署
  • 存储编排:自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要;存储系统可以来自于本地目录、网络存储(NFSGlusterCephCinder等)、公共云存储服务等

2.2 Kubernetes架构图

Kubernetes(一):简介

2.3 Kubernetes组件

2.3.1 Master

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

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

schedulerscheduler的职责很明确,就是负责调度pod到合适的Node上。如果把scheduler看成一个黑匣子,那么它的输入是pod和由多个Node组成的列表,输出是pod和一个Node的绑定,即将这个pod部署到这个Node上。Kubernetes目前提供了调度算法,但是同样也保留了接口,用户可以根据自己的需求定义自己的调度算法。

controller manager:如果说APIServer做的是“前台”的工作的话,那controller manager就是负责“后台”的。每个资源一般都对应有一个控制器,而controller manager就是负责管理这些控制器的。比如我们通过APIServer创建一个pod,当这个pod创建成功后,APIServer的任务就算完成了。而后面保证pod的状态始终和我们预期的一样的重任就由controller manager去保证了。

etcdetcd是一个高可用的键值存储系统,Kubernetes使用它来存储各个资源的状态,从而实现了RestfulAPI

2.3.2 Node

每个Node节点主要由三个模块组成:kubeletkube-proxyruntime

runtime:指的是容器运行环境,目前Kubernetes支持dockerrkt两种容器。

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

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

2.3.3 Pod

podk8s进行资源调度的最小单位,每个pod中运行着一个或多个密切相关的业务容器,这些业务容器共享这个Pause容器的IPVolume,我们以这个不易死亡的Pause容器作为pod的根容器,以它的状态表示整个容器组的状态。一个pod一旦被创建就会放到etcd中存储,然后由Master调度到一个Node绑定,由这个Node上的Kubelet进行实例化。

每个pod会被分配一个单独的pod IPpod IP + ContainerPort组成了一个Endpoint

2.3.4 Service

Service其功能使应用暴露,Pods是有生命周期的,也有独立的IP地址,随着Pods的创建与销毁,一个必不可少的工作就是保证各个应用能够感知这种变化。这就要提到Service了,ServiceYAMLJSON定义的由Pods通过某种策略的逻辑组合。更重要的是,Pods的独立IP需要通过Service暴露到网络中。