Kubernetes -Mesos 0.7.0:Kubernetes向生产环境迈出的一大步

jopen 8年前
 

Kubernetes是一套开源容器编排系统,负责管理各类利用Docker容器构建而成且跨越多台主机的应用程序。尽管最初该项目由谷歌公司 所建立,不过其目前已经转由云原生计算基金会负责推动。Mesosphere自其诞生以来一直提供面向Mesosphere的支持能力,而我们也一直在致 力于将自己的数据中心操作系统(即Datacenter Operating System,简称DCOS)打造成一套能够对其加以承载的卓越平台。

尽管我们的Marathon框架已经在为众多知名企业管理大型生产型容器环境,但我们很清楚仍有不少开发人员希望能够使用 Kubernetes,我们也希望能够为他们提供最理想的方式以构建基于微服务架构的应用程序。而Kubernetes-Mesos正是我们基于这一理念 所开发出的技术成果,其能够将Kubernetes作为原生Mesos框架处理并运行在DCOS之上。Kubernetes-Mesos能够通过DCOS 命令行软件包管理器轻松完成安装,且可以同任意数量的其它Mesos框架——包括Marathon、Spark、Kafka以及Jenkins等等——实 现同地协作,从而共享来自同一套集群中的各类资源。

就在本周,我们高兴地宣布Kubernetes-Mesos v0.7.0-v1.1.10-alpha版本的发布,其也成为两大项目以及我们用户最重要的发展里程碑。

重要发展里程碑

尽管目前Kubernetes-Mesos仍然处于alpha测试阶段,但我们已经在全面投入生产环境以及100%兼容Kubernetes平台方面实现了显著进展。这一版本之所以如此特别,是因为我们成功实现了以下两大目标:

  1. 其基于刚刚于三周前在KubeCon大会上发布的最新且最强大的Kubernetes v1.1。
  2. 其已经在与基于Docker组件的开发/测试集群的配合之下通过了Kubernetes兼容性测试套件的考核。

第一项目标的重要意义在于,这意味着我们能够在其主要版本推出后的极短时间之内发布新的DCOS Kubernetes软件包。之所以能够实现这一点,是因为我们一直在上游GitHub库当中开发并维护Kubernetes-Mesos,并以透明化方 式将其整合至Kubernetes社区e2e测试基础设施当中。来自Kubernetes开发者社区的每一项新功能与bug修复成果都会触发对应条件,并 以实时方式对Mesos的集成效果加以测试。一旦出现编译错误及测试失败状况,开发人员会立即得到报告并对问题加以修改,而不至于把对应代码添加到库当 中。

尽管Kubernetes用户无法直观感受到这些,但这种严密的开发集成机制允许我们以既定步调发布高质量的开发成果。

而第二项目标的重要意义在于,我们能够借此证明在我们基于Docker组件的开发集群的支持下,Kubernetes-Mesos如今已经能够100%地同开发社区在定义“Kubernetes体验”时所设计的功能及特性实现兼容性保障。

对于最终用户而言,这种兼容性非常重要——因为这意味着他们的Kubernetes工作负载或者其它来自第三方的负载(例如Helm以及其它与 Kubernetes紧密相关的方案)将能够同时顺畅运行在内部Mesos集群与谷歌云环境当中。Kubernetes-Mesos是目前第一套拥有兼容 性保障的第三方平台(或者用Kubernetes的说法,‘云供应方案’)。目前能够实现这种兼容性表现的其它云供应方案全部由谷歌公司负责提 供:Google Container Engine、Google Compute Engine以及Vagrant开发环境。感兴趣的朋友可以点击此处查看官方提供的Kubernetes解决方案清单。

我们接下来的重要举措在于让DCOS Kubernetes软件包获得同样的生产兼容性水平。另外两项需要解决的难题则是为每套容器提供SSL以及IP支持能力。大家可以点击此处与此处分别了解项目的当前已知问题以及下一步重要发展规划。

前瞻方向

随着一步步推进Kubernetes-Mesos的发展,我们最终将实现以下几项目标:

  • 利用Mesosphere的DCOS将Kubernetes部署流程难度控制在最低水平。
  • 与部署在谷歌基础设施或者其它平台上的Kubernetes实现全面兼容。
  • 利用动态分区以共享同一套底层服务器,从而提升集群资源利用率并同其它DCOS服务实现同地协作。

以下命令解释了在DCOS集群之上运行Kubernetes在易用性方面的突出优势:

$ dcos package install kubernetes

一旦Kubernetes-Mesos框架启动完成并开始运行,用户就能够通过下列命令部署工作负载(例如Nginx Web服务器):

$ dcos kubectl create -f nginx-pod.yml    pods/nginx    $ dcos kubectl get pods    NAME       READY       STATUS       RESTARTS       AGE    nginx 1/1 Running  1m 

就是这么简单!每个pod、复制控制器乃至服务都能够立即对当前可用资源加以利用,并以无缝化方式同Marathon任务、Spark任务、Cassandra数据库或者其它任何DCOS服务进行资源共享。

需要注意的是,由于目前Kubernetes-Mesos在Multiverse库当中仍然处于alpha测试阶段,因此大家必须要在安装之前将repo以打包源文件的形式通过DCOS命令行进行添加:

$ dcos config prepend package.sources \    https://github.com/mesosphere/multiverse/archive/version-1.x.zip $ dcos package update

0.7.0版本中的新鲜内容

下面再来看最新发布版本中的具体细节。与上一次发布的v1.0.6-v0.6.7版本相比,此次新版本在代码库方面做出了大量变更。单看 Kubernetes当中的Mesos组件(这里暂不考虑从v1.0到v1.1的上游变化),面向Kubernetes库的Mesos相关提交条目就超过 50项。

简而言之,Kubernetes-Mesos已经获得了显著进展——而我们对此深感自豪!

面向DCOS的KUBECTL子命令

在早期版本当中,Kubernetes-Mesos要求用户以手动方式从GitHub的发布页面下载并安装kubectl二进制文件。除此之外,~/.kube/config文件还必须以手动方式创建并指向对应的DCOS集群。

而自从v0.6.7以来,我们就对此做出了改进,这一成效自然也在v0.7.0-v1.1.1-alpha中得到了继承:

$ dcos kubectl get pods

以上代码所示为DCOS命令行中的kubectl子命令。在首次运行这一命令时,其会自动从已经安装的Kubernetes中下载合适的kubectl二进制文件并在用户的操作系统上进行安装。在此之后,其会立即执行指定的命令。

就是这么简单!

ETCD-MESOS

今年十月,我们曾经公布过etcd-mesos的首个版本。易于安装的特性外加可用性出色的正确源使得Kubernetes在DCOS或者 Mesos成为了一款引人注目的明星产品。而目前它已经能够在不造成任何信息丢失的前提下实现核心组件重启(无论是有意为之还是意外造成)。这一特性再加 上Marathon对于Kubernetes核心组件生命周期的管理能力,意味着Kubernetes在DCOS之上已经具备极为突出的可用性水平(能够 在预期或者意外的服务停机情况下继续运作)。

如果运行有Kubernetes核心组件的节点发生故障,Marathon会注意到这一状况并在其它位置对其进行重启。与此同时,如果核心组件 报告任何非正常或者无法实现等反馈,Marathon也会在新容器内对其进行重启。由于etcd集群拥有如此出色的可用性,重启之后的 Kubernetes组件将能够轻松对自身数据加以恢复,也就是在几秒钟之内完成下线到重新上线这一过程。

因此,为了实现持久性与可用性,我们强烈建议大家安装etcd-mesos并将Kubernetes DCOS服务与etcd-mesos集群相对接:

$ dcos install etcd

这时,etcd-mesos集群可能会需要一小段时间进行部署。一旦开始运行,etcd的运行状态即可通过检查<hostname>/service/etcd端点或者DCOS Marathon界面的方式为大家所掌握。

接下来,Kubernetes必须通过配置以使用该etcd-mesos集群:

$ cat >/tmp/options.json <<EOF    {    "kubernetes": {        "etcd-mesos-framework-name": "etcd"    }    } EOF $ dcos package install --options=/tmp/options.json kubernetes 

为了真正实现高可用性保障,etcd-mesos还包含有自动处理更多极端状况的能力,例如通过当etcd节点大规模丢失时通过重播方式进行自我修复。

V0.7.0-V1.1.1-ALPHA版本发布重点说明

  • 说明文档
    • 增加了DCOS上手指南( 17198
    • 增加了调度标签说明文档 ( 17368
  • 执行器/kubelet
    • 增加了--mesos-launch-grace-period参数以保证长期运行中的docker pull不致出错( 14432
    • 进行大规模重构以降低未来的维护难度( 1441513036
    • 通过--mesos-sandbox-overlay=...支持沙箱覆盖tar.gz,同时向从节点分发socat与nsenter以实现kubectl端口指向( 16111
  • 调度程序
    • 添加基于标签的调度机制( 13857
    • 利用k8s.mesosphere.com/label-<attribute>标签定义从节点属性 ( 13857
    • 修复了一项终止bug( 15518
    • 修复了拥有多个通配符端口的pod中的bug( 16992
    • 大规模重构以降低未来维护难度( 16316
    • 支持pod.spec.resources.requests ( 17054
    • 修复了静态pos重复调度的bug ( 13943
    • 添加--proxy-mode以设定kube-proxy模式(‘用户模式’与‘iptables’) ( 17455
    • 修复了当非兼容结果并行输入时,此类结果不予处理且被泄漏的问题( 17654
  • 控制器-管理器
    • 为未运行kubelet的节点更新节点状态( 16034

在Kubernetes-Mesos GitHub库当中查看完整的版本说明内容。

下一步升级目标

虽然v0.7.0-v1.1.1-alpha已经成为重要的里程碑,但我们仍然在酝酿着数个同样令人兴奋的后续版本。我们之所以将当前版本的质量定义为 alpha水平,是因为在真正推荐大家在Kubernetes DCOS服务之上运行生产性工作负载之前,我们仍然还有其它一些开放性挑战需要解决(详见 Kubernetes-Mesos issues.md )。因此,我们的工作还没有彻底完成。

接下来是v1.0的发展路线图概述:

  • v0.7.0-v1.1.1-alpha
    • 基于Kubernetes 1.1的首个版本。
    • 与基于Docker组件的Mesos集群实现100%兼容。
    • 在调度程序当中添加对节点标签及Mesos agent属性的支持能力。
    • 添加kubectl DCOS子命令。
  • v0.7.1-v1.1.x-alpha
    • 添加对Mesos资源角色的支持能力,这一点对于公有及私有资源隔离非常重要。
  • v0.8.0-v1.x.y-beta—MVP版本:
    • 在kubectl与apiserver之间添加TLS支持能力。这将使得以下目前尚不受支持的kubectl命令得以起效:exec、logs、port-forward、proxy。
    • 添加服务账户支持机制。
    • 初步实现对DCOS软件包的兼容能力。
    • 添加真正的Kubernetes滚动升级支持能力,而无需立即对全部pod或者服务进行关闭。
  • v1.0.0-v1.x.y:
    • 做好面向生产环境的准备。
    • 改进可扩展能力局限。

正如大家所见,我们正在努力让Kubernetes-Mesos成为一套能够用于实际生产的框架,同时尽可能简化Kubernetes在 DCOS上的使用体验并提升其实际能力。希望大家在有机会的情况下进行尝试并提供反馈意见,我们将汇总各类信息以确保自己的方案能够与既定目标及用户的实 际要求保持一致!

原文链接: KUBERNETES-MESOS 0.7.0: A BIG STEP TOWARD PRODUCTION-READY KUBERNETES