本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
Kubernetes 1.6:大规模多用户、多工作负载
本文由 Aparna Sinha 代表 Kubernetes 1.6 发布团队撰写。
今天我们宣布发布 Kubernetes 1.6。
在此版本中,社区的重点是规模和自动化,以帮助您在集群上为多个用户部署多个工作负载。我们宣布支持 5,000 节点集群。我们将动态存储配置提升到**稳定**版本。基于角色的访问控制 (RBAC)、kubefed、kubeadm 和一些调度功能正在转向**测试版**。我们还在整个过程中添加了智能默认值,以实现开箱即用的更大自动化。
新增功能
规模和联邦:寻求大规模性能证明的大型企业用户会很高兴地知道,Kubernetes 严格的可伸缩性 SLO 现在支持 5,000 节点(150,000 个 Pod)的集群。这个集群总大小增加了 150%,由 CoreOS 的新版 etcd v3 提供支持,如果您正在部署搜索或游戏等可能增长到占用更大集群的应用程序,这是一个好消息。
对于希望扩展到 5,000 个节点以上或跨多个区域或云部署的用户,联邦允许您组合多个 Kubernetes 集群并通过单个 API 端点访问它们。在此版本中,kubefed 命令行实用程序升级到**测试版** - 改进了对本地集群的支持。kubefed 现在自动配置加入集群上的 kube-dns,并且可以向联邦组件传递参数。
安全和设置:关注安全的用户会发现,现在处于**测试版**的 RBAC 通过为系统组件提供更严格的默认角色,显著提高了安全性。1.6 版本中的默认 RBAC 策略向控制平面组件、节点和控制器授予范围权限。RBAC 允许集群管理员根据每个命名空间,选择性地向特定用户或服务帐户授予对特定资源的细粒度访问权限。从 1.5 升级到 1.6 的 RBAC 用户应查看此处的指南。
寻求在物理或云服务器上轻松配置安全集群的用户可以使用现在处于**测试版**的 kubeadm。kubeadm 已通过一组命令行标志和基本功能集得到增强,其中包括 RBAC 设置、引导令牌系统的使用以及增强的证书 API。
高级调度:此版本添加了一组强大而通用的调度构造,让您对 Pod 的调度方式有更大的控制权,包括将 Pod 限制在异构集群中的特定节点上的规则,以及将 Pod 分散或打包到故障域(如节点、机架和区域)中的规则。
节点亲和性/反亲和性,现在处于**测试版**,允许您根据节点标签将 Pod 限制为仅调度到某些节点上。使用内置或自定义节点标签来选择特定区域、主机名、硬件架构、操作系统版本、专用硬件等。调度规则可以是必需的或首选的,具体取决于您希望调度程序执行它们的严格程度。
一个相关的功能,称为污点和容忍,使得紧凑地表示将 Pod 从特定节点中排除的规则成为可能。该功能也已进入**测试版**,例如,它使得将一组节点专用于特定用户集,或者通过排除不需要特殊硬件的 Pod,使具有特殊硬件的节点可用于需要特殊硬件的 Pod 变得容易。
有时您希望将服务或服务中的 Pod 在拓扑上共同调度到彼此附近,例如为了优化南北或东西向通信。或者您希望将服务的 Pod 分散以实现容错,或者使对立的 Pod 分离,或者确保节点的独占租用。Pod 亲和性与反亲和性,现在处于**测试版**,通过允许您设置在任意拓扑(节点、区域等)中相互分散和打包 Pod 的硬性或软性要求,从而实现了此类用例。
最后,为了获得最大的调度灵活性,您可以与默认的 Kubernetes 调度程序并行运行一个或多个自定义调度程序,甚至替代它。每个调度程序负责不同的 Pod 集。此版本中,多个调度程序处于**测试版**。
动态存储配置:部署有状态应用程序的用户将受益于此 Kubernetes 版本中广泛的存储自动化功能。
自早期以来,Kubernetes 就能够根据 Pod 规范自动连接和分离存储、格式化磁盘、挂载和卸载卷,并在 Pod 在节点之间移动时无缝地完成这些操作。此外,PersistentVolumeClaim (PVC) 和 PersistentVolume (PV) 对象将存储请求与具体的存储实现分离,使 Pod 规范在各种云和本地环境中都具有可移植性。在此版本中,StorageClass 和动态卷配置被提升为**稳定**版本,通过按需创建和删除存储,消除了预先配置的需要,从而完善了自动化方案。
该设计允许集群管理员在集群中定义和公开多种类型的存储,每种存储都具有一组自定义参数。最终用户可以不再担心存储配置的复杂性和细微差别,同时仍然可以从多种存储选项中进行选择。
在 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 供应程序。一个 golang 库和示例可以在这里找到。
- 持久卷中挂载选项的**测试版**支持
容器运行时接口、etcd v3 和 DaemonSet 更新:尽管用户可能不直接与容器运行时或 API 服务器数据存储交互,但它们是 Kubernetes 中面向用户功能的基础组件。因此,社区致力于扩展这些和其他系统组件的功能。
- Docker-CRI 实现是**测试版**,默认在 kubelet 中启用。对其他运行时,cri-o、frakti、rkt,也已实现了**阿尔法版**支持。
- 对于新集群,API 服务器的默认后端存储已升级为默认使用 etcd v3。如果您从 1.5 集群升级,应注意通过规划数据迁移窗口来确保连续性。
- Kubelet 通过公开管理员可配置的 节点可分配 功能来保留系统守护进程的计算资源,从而提高了节点可靠性。
- DaemonSet 更新允许您对 DaemonSet 执行滚动更新
Alpha 功能:此版本主要侧重于功能的成熟,但是,为了支持路线图,添加了一些 Alpha 功能。
- 树外云提供商支持增加了一个新的 `cloud-controller-manager` 二进制文件,可用于测试新的树外云提供商流程
- 在节点出现问题时,结合 tolerationSeconds 实现每个 Pod 的驱逐,允许用户调整 Pod 绑定到出现问题的节点的时间长度
- Pod 注入策略 添加了一个新的 API 资源 PodPreset,用于在创建 Pod 时注入信息,例如 secrets、卷、卷挂载和环境变量。
- Horizontal Pod Autoscaler 中自定义指标支持已更改为使用
- 引入了对仅 Docker 运行时的多 Nvidia GPU 支持
这些只是我们今年首次发布的一些亮点。如需完整列表,请访问发行说明。
社区
此次发布得益于我们庞大而开放的社区。我们共同完成了近 5,000 次提交,作者约 275 人。为了将众多支持者聚集在一起,社区发起了一项名为 K8sPort 的新计划,这是一个在线中心,社区可以在其中参与游戏化挑战并为其贡献获得积分。有关该计划的更多信息,请参阅此处。
发布过程
衷心感谢 1.6 版本的发布团队(由 CoreOS 的 Dan Gillespie 领导),感谢他们为 1.6 版本的发布所做的工作。该发布团队是 Kubernetes 社区致力于社区治理的典范。Dan 是第一位非谷歌的发布经理,他与团队的其他成员一起在整个发布过程中(基于 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,请尝试其中一个交互式教程。
参与其中
2017 年 3 月 29-30 日,CloudNativeCon + KubeCon 在柏林举行。我们希望与社区的许多成员齐聚一堂,并在那里分享更多内容!
在我们的每周社区会议上发表您的看法:
- 在 Stack Overflow 上提问(或回答问题)
- 在 Twitter 上关注我们 @Kubernetesio 获取最新更新
- 在 Slack 上与社区联系
非常感谢您的贡献和支持!
附言:阅读此深度文章系列,了解 Kubernetes 1.6 中的新功能