本文发表已超过一年。较旧的文章可能包含过时内容。请检查页面信息自发布以来是否仍然准确。

Kubernetes 1.6:大规模多用户、多工作负载

本文由 Aparna Sinha 代表 Kubernetes 1.6 发布团队撰写。

今天,我们宣布发布 Kubernetes 1.6。

在此版本中,社区的重点是规模化和自动化,以帮助你在一个集群上为多个用户部署多个工作负载。我们宣布支持 5,000 节点规模的集群。我们将动态存储 Provisioning 提升到 stable 阶段。基于角色的访问控制 (RBAC)、kubefedkubeadm 以及多项调度特性正进入 beta 阶段。我们还在各处添加了智能默认设置,以便开箱即用地实现更高的自动化程度。

新特性

规模和 Federation:寻求大规模性能证明的大型企业用户将很高兴得知,Kubernetes 严格的可伸缩性 SLO 现在支持 5,000 节点(150,000 Pod)集群。总集群规模增加了 150%,得益于 CoreOS 的新版本 etcd v3,这对于部署搜索或游戏等可能增长并消耗更大集群的应用来说是个好消息。

对于希望扩展到 5,000 节点以上或跨多个区域或云部署的用户,Federation 允许你组合多个 Kubernetes 集群并通过单一 API 端点访问它们。在此版本中,kubefed 命令行工具升级到 beta 阶段 - 并改进了对本地集群的支持。kubefed 现在可以自动配置加入集群上的 kube-dns,并可以向 Federation 组件传递参数。

安全和设置:关注安全性的用户会发现,现已进入 beta 阶段的 RBAC 通过为系统组件提供更严格范围的默认角色,显著提高了安全性。1.6 版本中的默认 RBAC 策略授予控制平面组件、节点和控制器范围限定的权限。RBAC 允许集群管理员基于每个命名空间,选择性地授予特定用户或服务账户对特定资源的细粒度访问权限。从 1.5 升级到 1.6 的 RBAC 用户应查看此处的指南。

寻求在物理或云服务器上轻松 Provision 安全集群的用户可以使用现已进入 beta 阶段的 kubeadm。kubeadm 已通过一组命令行 Flag 和基础特性集得到增强,其中包括 RBAC 设置、Bootstrap Token 系统的使用以及增强的证书 API

高级调度:此版本添加了一系列强大且通用的调度结构,使你能够更好地控制 Pod 的调度方式,包括在异构集群中将 Pod 限制到特定节点上的规则,以及在节点、机架和区域等故障域上分散或打包 Pod 的规则。

节点亲和性/反亲和性,现已进入 beta 阶段,允许你根据节点标签将 Pod 限制到只调度在某些节点上。使用内置或自定义节点标签来选择特定的区域、主机名、硬件架构、操作系统版本、专用硬件等。调度规则可以是强制或优先的,具体取决于你希望调度器执行的严格程度。

一个相关特性称为污点和容忍度,它使得紧凑地表示将 Pod 从特定节点中排除的规则成为可能。此特性现也处于 beta 阶段,它使得例如将一组节点专用于特定用户群变得容易,或者通过排除不需要特殊硬件的 Pod 来保留具有特殊硬件的节点以供需要特殊硬件的 Pod 使用。

有时你希望将服务或服务中的 Pod 在拓扑上安排得靠近彼此,例如优化南北向或东西向通信。或者你希望分散一个服务的 Pod 以容忍故障,或者将相互冲突的 Pod 分开,或者确保节点的独占性。Pod 亲和性与反亲和性,现已进入 beta 阶段,通过允许你在任意拓扑(节点、区域等)内设置分散和打包 Pod 的硬性或软性要求来实现这些用例。

最后,为了获得极致的调度灵活性,你可以运行自己的自定义调度器来与默认的 Kubernetes 调度器一起工作,或者替代它。每个调度器负责不同的 Pod 集。多调度器在此版本中处于 beta 阶段。

动态存储 Provisioning:部署有状态应用的用户将受益于此版本 Kubernetes 中广泛的存储自动化能力。

自早期以来,Kubernetes 就能够根据 Pod Spec 自动挂载和卸载存储、格式化磁盘、挂载和卸载卷,并在 Pod 在节点之间移动时无缝进行。此外,PersistentVolumeClaim (PVC) 和 PersistentVolume (PV) 对象将存储请求与具体的存储实现解耦,使得 Pod Spec 可以在各种云和本地环境中移植。在此版本中,StorageClass动态卷 Provisioning 被提升到 stable 阶段,通过按需创建和删除存储来完善自动化,消除了预 Provision 的需要。

该设计允许集群管理员在一个集群中定义和公开多种类型的存储,每种类型都有一套自定义参数。最终用户不再需要担心存储 Provision 的复杂性和细节,同时仍可以从多种存储选项中进行选择。

在 1.6 版本中,Kubernetes 提供了一套内置的默认设置,以完全自动化存储 Provisioning 生命周期,让你专注于应用开发。具体来说,Kubernetes 现在默认预安装了适用于 AWS、Azure、GCP、OpenStack 和 VMware vSphere 的系统定义 StorageClass 对象。这使得这些云提供商上的 Kubernetes 用户无需手动设置 StorageClass 对象即可获得动态存储 Provisioning 的好处。这是这些云上 PVC 对象默认行为的变化。请注意,默认行为是动态 Provisioning 的卷将使用“delete”回收策略创建。这意味着一旦 PVC 被删除,动态 Provisioning 的卷也会自动删除,因此用户无需执行额外的“清理”步骤。

此外,我们还扩展了整体支持的存储范围,包括

  • ScaleIO Kubernetes 卷插件,使 Pod 能够无缝访问和使用存储在 ScaleIO 卷上的数据。
  • Portworx Kubernetes 卷插件,增加了使用 Portworx 作为 Kubernetes 集群存储提供商的能力。Portworx 汇聚你的服务器容量,并将你的服务器或云实例转变为融合的、高可用的计算和存储节点。
  • 支持使用COS 节点镜像的集群上的 NFSv3、NFSv4 和 GlusterFS。
  • 支持用户编写/运行动态 PV Provisioner。Golang 库和示例可在此处找到。
  • 持久卷中挂载选项Beta 支持。

容器运行时接口、etcd v3 和 DaemonSet 更新:虽然用户可能不会直接与容器运行时或 API Server 数据存储交互,但它们是 Kubernetes 用户可见功能的基础组件。因此,社区投入精力扩展这些及其他系统组件的能力。

  • Docker-CRI 实现已进入 beta 阶段,并在 Kubelet 中默认启用。对其他运行时(cri-ofraktirkt)的 Alpha 支持也已实现。
  • 对于新集群,API Server 的默认后端存储已升级为默认使用etcd v3。如果你从 1.5 集群升级,应谨慎操作,规划数据迁移窗口以确保连续性。
  • 节点可靠性得到了提高,因为 Kubelet 暴露了一个管理员可配置的节点可分配特性,用于为系统守护进程保留计算资源。
  • DaemonSet 更新允许你对 DaemonSet 执行滚动更新。

Alpha 特性:此版本主要专注于功能的成熟,但为了支持路线图,也添加了一些 Alpha 特性。

  • 树外云提供商支持添加了一个新的 cloud-controller-manager 二进制文件,可用于测试新的非核心云提供商流程。
  • 结合 tolerationSeconds 的节点问题时按 Pod 驱逐,允许用户调整 Pod 在出现问题的节点上停留的时长。
  • Pod 注入策略添加了一个新的 API 资源 PodPreset,以便在创建 Pod 时注入诸如 Secret、卷、卷挂载和环境变量等信息。
  • 水平 Pod 自动扩缩器中的自定义指标支持已更改为使用
  • 仅针对 Docker 运行时引入了对多个 Nvidia GPU 的支持

以上只是我们今年第一个版本的一些亮点。完整列表请访问发行说明

社区
此版本的发布得益于我们庞大而开放的社区。总共有约 275 位作者提交了近 5,000 次 Commit。为了将众多支持者聚集在一起,社区启动了一个名为 K8sPort 的新计划,这是一个在线中心,社区成员可以参与游戏化挑战并为其贡献获得认可。在此处阅读更多关于该计划的信息:此处

发布流程

非常感谢 1.6 版本的发布团队(由 CoreOS 的 Dan Gillespie 领导),感谢他们为发布 1.6 版本所做的工作。这个发布团队是 Kubernetes 社区致力于社区治理的典范。Dan 是第一位非 Google 的发布经理,他和团队其他成员在整个发布过程中(基于 1.5 发布经理 Saad Ali 的出色工作)努力发掘和记录“部落知识”(隐藏在少数人中的知识),阐明那些仍需要特殊权限的工具和流程,并优先处理改进 Kubernetes 发布流程的工作。非常感谢这个团队。

用户采用情况

我们持续看到 Kubernetes 在所有行业和各种规模的企业中快速采用。此外,采用遍及全球,从美国田纳西州的初创公司到中国的财富 500 强企业。

  • 京东(JD.com),中国最大的互联网公司之一,结合其 OpenStack 部署使用了 Kubernetes。他们迄今为止已将其 20% 的应用迁移到 Kubernetes 上,并且每天已运行 20,000 个 Pod。在此处阅读更多关于其设置的信息:此处
  • Spire,一家位于田纳西州的初创公司,亲眼见证了其公共云提供商经历一次中断,但由于 Kubernetes 能够将其工作负载迁移到不同的区域,他们没有遭受任何停机。在此处阅读他们的完整经历:此处

“有了 Kubernetes,我们从未有过恐慌时刻,只有在看到自动缓解发生时产生的敬畏之情。”

  • 在此分享你的 Kubernetes 使用案例故事与社区交流。

可用性
Kubernetes 1.6 可在此处通过 GitHub 和 get.k8s.io 下载。要开始使用 Kubernetes,请尝试这些交互式教程之一。 

参与其中
CloudNativeCon + KubeCon 柏林大会将于本周,即 2017 年 3 月 29 日至 30 日举行。我们希望在那里与社区成员欢聚一堂,分享更多信息!

在我们的每周社区会议上发表你的看法: 

非常感谢您的贡献和宣传!

PS: 阅读这系列深入文章,了解 Kubernetes 1.6 的新特性