本文发布时间已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。
Kubernetes 1.6:大规模多用户、多工作负载
本文由 Aparna Sinha 代表 Kubernetes 1.6 发布团队撰写。
今天,我们宣布发布 Kubernetes 1.6。
在此版本中,社区的重点是扩展和自动化,以帮助您在集群上为多个用户部署多个工作负载。我们宣布支持 5,000 个节点的集群。我们将动态存储供应移至稳定状态。基于角色的访问控制 (RBAC)、kubefed、kubeadm 和几个调度功能正在移至beta状态。我们还在整个过程中添加了智能默认设置,以实现开箱即用的更大自动化。
新增功能
扩展和联邦:寻求大规模性能证明的大型企业用户会很高兴地知道 Kubernetes 严格的扩展性 SLO 现在支持 5,000 个节点(150,000 个 pod)的集群。由 CoreOS 的新版本 etcd v3 提供支持的集群总大小增加 150% 对部署搜索或游戏等可以增长以消耗更大集群的应用程序来说是个好消息。
对于希望扩展到 5,000 个节点以上或跨多个区域或云的用户,联邦允许您组合多个 Kubernetes 集群并通过单个 API 端点寻址它们。在此版本中,kubefed 命令行实用程序已升级为 beta - 改进了对本地集群的支持。kubefed 现在在加入集群时自动配置 kube-dns,并且可以将参数传递给联合组件。
安全和设置:关注安全性的用户会发现 RBAC 现在为 beta,通过为系统组件提供更严格的作用域默认角色增加了显著的安全性优势。1.6 中的默认 RBAC 策略授予控制平面组件、节点和控制器的作用域权限。RBAC 允许集群管理员选择性地授予特定用户或服务帐户对每个命名空间的特定资源的细粒度访问权限。从 1.5 升级到 1.6 的 RBAC 用户应查看此处的指导。
希望在物理服务器或云服务器上轻松配置安全集群的用户可以使用 kubeadm,它现在处于 beta 状态。kubeadm 已通过一组命令行标志和基本功能集进行了增强,其中包括 RBAC 设置、使用 引导令牌系统和增强的 证书 API。
高级调度:此版本添加了一组强大而通用的调度结构,使您可以更好地控制如何调度 pod,包括将 pod 限制为异构集群中的特定节点的规则,以及在节点、机架和区域等故障域中分散或打包 pod 的规则。
节点亲和性/反亲和性现在处于 beta 状态,允许您根据节点标签将 pod 限制为仅在某些节点上调度。使用内置或自定义节点标签来选择特定区域、主机名、硬件架构、操作系统版本、专用硬件等。调度规则可以是必需的或首选的,具体取决于您希望调度程序强制执行它们的严格程度。
一个相关功能,称为污点和容忍度,使紧凑地表示将 pod 从特定节点排除的规则成为可能。该功能现在也处于 beta 状态,例如,它可以轻松地将一组节点专用于特定的一组用户,或者将具有特殊硬件的节点保留给需要特殊硬件的 pod,方法是排除不需要它的 pod。
有时您希望在拓扑结构上彼此靠近地共同调度服务或服务内的 pod,例如,为了优化南北或东西向通信。或者您希望分散服务的 pod 以实现容错,或者保持对抗性 pod 分离,或者确保节点的唯一租户。Pod 亲和性和反亲和性现在处于 beta 状态,它允许您设置关于在任意拓扑结构(节点、区域等)中相互分散和打包 pod 的硬性或软性要求,从而实现此类用例。
最后,为了实现最终的调度灵活性,您可以在默认 Kubernetes 调度程序旁边或代替默认 Kubernetes 调度程序运行自己的自定义调度程序。每个调度程序负责不同的 pod 集。在此版本中,多个调度程序处于 beta 状态。
动态存储供应:部署有状态应用程序的用户将从此版本 Kubernetes 中的广泛存储自动化功能中获益。
自早期以来,Kubernetes 已经能够自动连接和断开存储,格式化磁盘,根据 pod 规范安装和卸载卷,并在 pod 在节点之间移动时无缝地执行此操作。此外,PersistentVolumeClaim (PVC) 和 PersistentVolume (PV) 对象将存储请求与特定存储实现分离,使 pod 规范可以在各种云和本地环境中移植。在此版本中,StorageClass 和 动态卷供应 已升级为 stable 状态,通过按需创建和删除存储来完成自动化故事,从而无需预先供应。
该设计允许集群管理员在集群中定义和公开多种存储风格,每种风格都具有一组自定义参数。最终用户可以停止担心存储如何供应的复杂性和细微差别,同时仍然可以从多个存储选项中进行选择。
在 1.6 中,Kubernetes 附带了一组内置默认值,可完全自动化存储供应生命周期,从而使您可以专注于应用程序的开发。具体来说,Kubernetes 现在默认为 AWS、Azure、GCP、OpenStack 和 VMware vSphere 预安装系统定义的 StorageClass 对象。这使这些提供商上的 Kubernetes 用户可以享受动态存储供应的好处,而无需手动设置 StorageClass 对象。这是这些云上 PVC 对象的默认行为变更。请注意,默认行为是使用“删除”回收策略创建动态供应的卷。这意味着一旦删除 PVC,动态供应的卷会自动删除,因此用户无需进行“清理”的额外步骤。
此外,我们扩大了整体支持的存储范围,包括
- ScaleIO Kubernetes 卷插件,使 pod 可以无缝访问和使用存储在 ScaleIO 卷上的数据。
- Portworx Kubernetes 卷插件,增加了使用 Portworx 作为 Kubernetes 集群存储提供商的功能。Portworx 会将您的服务器容量池化,并将您的服务器或云实例转变为融合的、高可用的计算和存储节点。
- 在使用 COS 节点镜像 的集群上支持 NFSv3、NFSv4 和 GlusterFS。
- 支持用户编写/运行的动态 PV 供应器。可以在这里找到 Go 语言库和示例。
- Beta 支持持久卷中的挂载选项。
容器运行时接口、etcd v3 和 Daemon set 更新:虽然用户可能不会直接与容器运行时或 API 服务器数据存储交互,但它们是 Kubernetes 中面向用户的功能的基础组件。因此,社区致力于扩展这些以及其他系统组件的功能。
- Docker-CRI 实现是Beta 版,并且在 kubelet 中默认启用。也已实现对其他运行时的 Alpha 支持,如 cri-o、frakti 和 rkt。
- 对于新集群,API 服务器的默认后端存储已升级为默认使用 etcd v3。如果您是从 1.5 集群升级,应谨慎计划数据迁移窗口以确保连续性。
- 由于 Kubelet 公开了一个管理员可配置的 节点可分配资源 功能来为系统守护进程预留计算资源,因此提高了节点可靠性。
- Daemon set 更新 允许您在 Daemon set 上执行滚动更新。
Alpha 功能:此版本主要侧重于成熟的功能,但添加了一些 alpha 功能以支持路线图。
- 树外云提供商 支持添加了一个新的 cloud-controller-manager 二进制文件,该文件可用于测试新的树外云提供商流程。
- 在发生节点问题时,每个 Pod 的驱逐 与 tolerationSeconds 结合使用,允许用户调整 Pod 绑定到出现问题的节点上的持续时间。
- Pod 注入策略 添加了一个新的 API 资源 PodPreset,用于在创建时将诸如密钥、卷、卷挂载和环境变量之类的信息注入到 Pod 中。
- 水平 Pod 自动伸缩器中的自定义指标支持已更改为使用
- 仅在使用 Docker 运行时时,才引入了对多个 Nvidia GPU 的支持。
这些只是我们今年首次发布版本中的一些亮点。有关完整列表,请访问发行说明。
社区
此版本的发布归功于我们庞大而开放的社区。我们共同推动了近 5,000 次提交,由大约 275 位作者完成。为了将我们的许多倡导者聚集在一起,社区启动了一个名为 K8sPort 的新计划,这是一个在线中心,社区可以在这里参与游戏化的挑战并获得贡献积分。 在此处阅读有关该计划的更多信息。
发布流程
非常感谢 1.6 的发布团队(由 CoreOS 的 Dan Gillespie 领导)为 1.6 版本发布所做的工作。此发布团队是 Kubernetes 社区致力于社区治理的典范。Dan 是第一位非 Google 发布经理,他和团队的其他成员在整个发布过程中(在 1.5 版本经理 Saad Ali 的出色工作基础上)努力揭示和记录部落知识,阐明仍需要特殊权限的工具和流程,并优先改进 Kubernetes 发布流程的工作。非常感谢团队。
用户采用
我们看到 Kubernetes 在各个行业和各种规模的企业中都在继续被快速采用。此外,来自全球各地都在采用,从美国田纳西州的初创公司到中国的财富 500 强公司。
- 中国最大的互联网公司之一京东,将其 Kubernetes 与其 OpenStack 部署结合使用。到目前为止,他们已将 20% 的应用程序迁移到 Kubernetes 上,并且每天运行 20,000 个 Pod。在此处阅读有关他们设置的更多信息。
- 位于田纳西州的初创公司 Spire,他们的公共云提供商遭遇停机,但由于 Kubernetes 能够将其工作负载移动到不同的区域,因此实现了零停机。在此处阅读他们的完整体验。
“使用 Kubernetes,从来没有出现恐慌的时刻,只是在观看自动缓解发生时产生敬畏感。”
- 在此处与社区分享您的 Kubernetes 用例故事。
可用性
Kubernetes 1.6 可在 GitHub 上的 此处和通过 get.k8s.io 下载。要开始使用 Kubernetes,请尝试以下互动教程之一。
参与进来
柏林的CloudNativeCon + KubeCon 将于 2017 年 3 月 29 日至 30 日举行。我们希望与社区的许多成员聚在一起,并在那里分享更多信息!
在我们的每周社区会议上分享您的意见:
- 在 Stack Overflow 上发布问题(或回答问题)
- 在 Twitter 上关注我们 @Kubernetesio 以获取最新更新
- 在 Slack 上与社区联系
非常感谢您的贡献和支持!
PS:阅读有关 Kubernetes 1.6 中新增内容的一系列深入文章