Linux里面k8sopenstack和dockerr的关系是什么?

  1. 单机使用,无法有效集群
  2. 随着容器数量的上升,管理成本攀升
  3. 没有有效的容灾、自愈机制
  4. 没有预设编排模板,无法实现快速、大规模容器调度
    1. 若要启动一些“软件”,只能一个个去启动(docker run ..)。
  5. 没有统一的配置管理中心工具
  6. 没有容器生命周期的管理工具
  7. 没有图形化运维管理工具

应用有如下几种部署方式:

    1. 手动安装MySQL、Nginx,运行应用等
    1. 安装过程只需要拉取镜像,启动即可,而不用关心软件的配置,版本等信息。
      1. 如果容器很多,工作量依然很大;
      2. 真实的业务场景下,容器应用间的依赖关系,网络通信,数据持久化,状态等非常复杂,用这种方式处理起来非常棘手。
    1. 只能单机编排容器,不能实现多机编排。可以认为是一个单机版“操作系统”
    1. 支持分布式下环境下的容器编排
      1. 只有分布式编排这一个功能,没有动态伸缩、可视化等功能
    1. 支持分布式下环境下的容器编排

        仅仅部署几个应用,你就能觉得它的复杂,配置的繁琐。可以想象,如果是几十上百个应用,自动化的过程不可避免。

方式2:独立的Docker容器

        可以看到,安装过程只需要拉取镜像,启动即可,而不用关心软件的配置,版本等信息。简化了不少,但是还是手动去启动,拉取镜像等,如果容器很多,工作量依然很大,这只是个博客系统比较简单,真实的业务场景下,容器应用间的依赖关系,网络通信,数据持久化,状态等等我们关心的问题非常复杂,用这种方式处理起来非常棘手。

        这里的配置文件虽然看着很多,其实它的层次很清楚。services我们可以认为是一组应用,是一种抽象,具体到这里可以认为是博客服务。

然后我们只需要执行如下命令,即可启动对应的容器,并且相互关联:

此时查看容器运行情况:

或者直接用docker命令查看:

  1. 根据yaml定义去拉取相关镜像文件(如果本地没有)
  2. 建立容器关联关系:这里就是连接mysql

        从上边这个例子,我们可以看到,面对复杂的容器运维工作,你只需要告诉编排工具你需要什么(定义yaml)其他的工作就交给等编排工具去做就行。当然部署一个wordpress这样一个轻量级的应用,用docker或者docker-compose就完全够用,如果用k8s去做,又是怎样一番场景,我们继续往下看。

前面我们说Docker容器就好比云计算操作系统中的应用,K8S相当于操作系统,那Pod就是进程组:即Pod是对一组容器(一个或多个)的抽象。之所以做这样一层抽象,是因为在 Borg 项目的开发和实践过程中,Google 公司的工程师们发现,他们部署的应用,往往都存在着类似于“进程和进程组”的关系。在同一个Pod中,可以直接通过localhost通信,并且可以共享网络栈和Volume。

如果用Pod描述上面的博客应用,yaml如下:

args: # 新版本镜像有更新,需要使用下面的认证插件环境变量配置才会生效

Pod 属性里的一个普通的字段。

里找到这个对象的主要依据。这其中最主要使用到的字段是 Labels。

        一个 Kubernetes 的 API 对象的定义,大多可以分为 Metadata 和 Spec 两个部分。前者存放的是这个对象的元数据,对所有 API 对象来说,这一部分的字段和格式基本上是一样的;而后者存放的,则是属于这个对象独有的定义,用来描述它所要表达的功能。

杭州2016年12月30日电 /美通社/ --Kubernetes上游计划在其1.6 发行版本中加入GPU功能,提升应用程序运行效率。因为很多应用使用GPU可以提升效率,比如大数据平台应用TensorFlow通过使用GPU效率可以提升几十甚至几百倍。

那么,GPU是如何应用在Docker/K8S/TensorFlow这些平台上起到提升效率的作用的呢?近日,才云新晋大神赵慧智用本篇文章给出了答案。在文中,赵慧智主要描写了GPU在Docker、Kubernetes、TensorFlow以及Kubernetes+TensorFlow领域中的应用,并介绍了在开发领域的实践经验,希望给大家带来借鉴和指导意义,原文如下:

为什么离开惠普,加入才云?

2016年下旬,前惠普Kubernetes技术领域的GPU专家赵慧智加盟才云。赵慧智从国内Kubernetes现状、未来发展趋势几个方面大致说了一下加入才云的原因:“当时自己对Kubernetes有很多想法,觉得在云平台里面其实有很多有意思的事情。比方说,如何提供稳定的中间层来让企业的业务更加的稳定和安全;如何降低硬件的成本;如何应对业务的突飞猛进和弹性支持,诸如此类。一开始喜欢Kubernetes,觉得在这两个技术以后将在技术领域大有作为。在技术领域,了解到才云研发实力很强,并且在Kubernetes里面有影响力,来到公司体验之后感觉工作氛围很好,于是就过来了。”

赵慧智说:“关于Kubernetes1.6,我是希望把GPU的功能加进去,因为目前很多应用都能在GPU上跑出比CPU高很多的性能,而在云里面一个很好的地方是通用化,例如一个应用迁移到另外一个VM 或者Server上可以继续运行,但是通用化也导致了一些硬件特性被屏蔽了,GPU就是其中之一,所以在Kubernetes这样一种container编排的环境中如果能支持GPU,那么将会对一些应用的性能产生质的影响,例如深度学习、AI 等。”

以下是赵慧智GPU分享具体内容:

图形处理器(英语:graphics processing unit,缩写:GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上运行绘图运算工作的微处理器。

GPU最大的好处就在于可以通过远远多于CPU的core数量来达到并行计算。

8以后的GPU和较新的QuadroGPU进行计算。亦是首次可以利用GPU作为C-编译器的开发环境。NVIDIA营销的时候,往往将编译器与架构混合推广,造成混乱。实际上,CUDA可以兼容OpenCL或者NVIDIA的C- 编译器。

上图为CUDA编程基本逻辑

CUDA提供了对于一般性通用需求的大规模并发编程模型,使用户可以对NVIDIA GPU方便的对于 GPU进行并发性编程。

CUDA编程模型与传统编程模型比较:

样例:将数组a与数组b相加,并将结果赋值给c

如果进行编译优化会在特定操作系统里面把这个数组的相加分配到不同的core里面执行,这样所有的计算就会按照core的数量进行并发,那么我们可以看到在数组操作中,效率的高低取决于core的多少。而通常个人的计算机一般会有2-8个core不等,而大部分服务器也很少会超过100个core。然而,一个GPU很容易就可以达到上千个core,这样在进行并行计算的时候可以实现十几甚至上百上千倍的效率提升。而GPU的价格远远低于相同个数core的CPU(多个)的价格。既然CUDA可以提供一般性的并发编程模型,那么我们来看看在CUDA平台上上面的代码该怎么写。

申请一块GPU的内存,然后就可以把所有的并发操作都交给GPU。

然后我们在container的内部就可以看到相应的设备并且可以使用了。

在设备已经可以绑定了之后,我们就可以提供driver和CUDA的支持了,而Nvidia给了一个关于如何在 container层面支持GPU的原型,是基于Docker的,叫做Nvidia Docker。

目前我们已经支持了如何在container的层面支持GPU,但是这还远远不够在container编排环境里面支持GPU,譬如我们在Kubernetes里面支持GPU。

在Kubernetes里面我们做一些关于GPU的工作才能让GPU能够被调度起来,功能如下:

kube-scheduler和kubelet之间需要一个关于GPU资源的协议支持,譬如目前有CPU,memory等,为了让GPU能够被调度,我们需要引入GPU作为一个资源可以被调度。

在分布式TensorFlow环境里面,各个worker不互相通信,只会跟parameter server通信。所以即使将各个worker部署到不同的机器上也不会造成性能损耗。目前TensorFlow支持GPU进行training的运算,但需要进行编译时设置。

由于在部署分布式TensorFlow时极其繁琐,并且在每次扩容都需要进行很多设置和操作。所以提供基于容器化的TensorFlow并运行在Kubernetes上就使其变得相当容易,而我们需要做的,就是在上面提到的如何让Kubernetes支持GPU的情况下,将TensorFlow容器化。

我要回帖

更多关于 openstack和docker 的文章

 

随机推荐