返回 登录
19

Kubernetes 1.6 官方发布:支持多用户、多工作负载

今天,我们宣布 Kubernetes1.6正式发布。在这次版本中,社区的重点落在集群运行规模和集群运行自动化上,可以在帮助实现集群上给多个用户部署多项工作的目标。

图片描述

Kubernetes 1.6版本目前集群上支持5000个节点。在我们的努力下,Dynamic Storage Provisioning 处于稳定版本。

Role-based access control(RBAC)、kubefed、kubeadm 以及一些调度功能已经开启公测。我们在1.6版本中添加了智能默认值,以启用自动化功能即时可用。

新亮点:

Scale 和 Federation:大企业用户目前正在寻找规模性能证明,而 Kubernetes 支持5000个节点(150000个 pod)的 SLO 功能是企业喜闻乐见的。在 CoreOS 发布的 etcd v3版本的驱动下,集群支持数量总体上有了150%的增长。这对于搜索、游戏类的公司部署应用程序来说绝对是如虎添翼——他们可以使用的集群规模将更大。

对于用户来说,他们想要进行5000个节点以上的扩容,或者是在多区域/云之间进行扩展延伸。这时,Federation 功能就起到了将多个 Kubernetes 集群通过单个 API 端点进行定位的作用。在1.6版本中,kubefed 命令行实用程序已经升级到公测版本,更加支持本地集群。 kubefed 现在可以在加入集群时自动配置 kube-dns,并可以将参数传递给联合组件。

Security 和 Setup:关注 Security 的用户会发现,处于公测版的 RBAC 通过对系统组件更紧耦合的默认角色来增加系统的安全性。1.6 版本中默认的 RBAC 策略会授予一定范围的权限给控制组件、node 和 controller。RBAC 允许集群管理员选择性授权用户,或者选择服务账户在每个 namespace 基础上细致访问特定资源。RBAC 用户将 Kubernetes 从1.5升级到1.6的时候,要注意查看用户指导:
https://kubernetes.io//docs/admin/authorization/rbac.md#upgrading-from-15

希望寻找一种简单的在物理机或者云服务器上部署一个安全的 k8s 集群方法的用户,可以尝试使用 kubeadm,它目前在公测阶段。kubeadm 在命令行参数和基本功能上都已经进行了增强,包括 RBAC 设置,Bootstrap Token system 的使用,以及 API 证书。

Advanced Scheduling:这次发布的1.6版本添加了一整套强大的调度结构,令用户可以更好地控制 pod 的调度,包括一些规则(能够在异构集群中限制pods到特定节点的规则,以及在诸如节点、racks 和区域的故障域上扩展或打包 pod 的规则)。

节点亲和性/反亲和性,目前还在公测阶段,它可以限制 pod 根据节点标签在特定节点上进行调度。使用内置或自定义节点标签来选择特定区域,主机名,硬件体系结构,操作系统版本,专用硬件等。调度规则可以是必需的或优先的,这取决于您希望调度程序如何来强制执行它们。

有个相关的特征,叫做 taints 和 tolerations,可以紧凑地展示从特定节点排除 pod 的规则。 该功能目前也处于公测阶段,可以轻松实现。例如,将一套节点集专用于特定的用户组,或者通过排除不需要硬件的pod保留拥有特殊硬件的节点。

有时,你希望协同调度 services 或者 同一个 service 内的 pods,在拓扑上彼此相邻,比如优化南北或东西方的交流方式。 或者你想分散一个 service 的 pods 来达到容错,或者保持对立的 pod 分离,或者确保节点的唯一租用。 Pod 亲和性和反亲和性现在处于公测状态,设定硬性或者软性要求来分散或者打包任意拓扑(node,zone 等等)相关的 pods。

最后,为了最终的调度灵活性,您可以运行自己的自定义调度程序,而不是默认的 Kubernetes 调度程序。 每个调度程序负责不同的 pod 组。 1.6版本中,Multiple scheduler 特性目前处于公测版。

Dynamic Storage Provisioning:部署有状态应用程序的用户将受益于1.6版本中广泛的存储自动化功能。

早期以来,Kubernetes 已经能够根据 pod 规格自动附加和分离存储、格式化磁盘
安装和卸载数据卷,并且 pod 在节点间迁移也能无缝的执行。 此外,PersistentVolumeClaim(PVC)和 PersistentVolume(PV)对象将存储请求从特定的存储实现中解耦出来,使得 pod 规范可以在一系列的云和内部环境中移植。 1.6版本中,StorageClass 和 dynamic volume provision 被提升到稳定阶段,通过根据需要创建和删除存储来完成自动化,从而无需预先配置。

该设计允许集群管理员在集群中定义和公开多种存储空间,每个集群具有一组自定义参数。 终端用户可以不必担心如何配置存储的复杂性和细微差别,同时仍然从多个存储选项中进行选择。

1.6 Kubernetes 附带一套内置的默认设置,可以完全自动化存储配置生命周期,将您解放出来,能够在应用程序上工作。 具体来说,Kubernetes 默认为 AWS,Azure,GCP,OpenStack 和 VMware vSphere 预安装系统定义的 StorageClass 对象。 这样Kubernetes 用户就可以在这些提供商上获得动态存储配置,同时无需手动设置 StorageClass 对象。 这是云上 PVC 对象的默认行为发生了变化。请注意,默认行为是通过“删除”(回收策略)来创建动态配置卷的。 这意味着一旦删除了PVC,动态配置的卷会被自动删除,所以用户没有额外的“清理”步骤。

此外,我们扩大了支持的存储范围,包括:

  • ScaleIO Kubernetes Volume Plugin 使 pod 能够无缝访问和使用存储在 ScaleIO 卷上的数据。
  • Portworx Kubernetes Volume 插件添加了使用 Portworx 作为 Kubernetes 集群的存储提供商的功能。 Portworx 会将您的服务器容量集中在一起,并将您的服务器或云实例转换为融合的、高度可用的计算和存储节点。
  • 使用 COS 节点镜像支持集群上的 NFSv3,NFSv4和 GlusterFS
  • 支持用户编写/运行的动态 PV provisioners。 查看 Golang library 和例子可访问这里:http://github.com/kubernetes-incubator/external-storage
  • PV 中,公测支持 mount options

容器 Runtime Interface,etcd v3和 Daemon set 更新:尽管用户不能直接与容器 runtime 或 API 服务器数据存储区进行交互,但是它们是 Kubernetes 中面向用户的功能的基础组件。 因此,社区投资扩大这些和其他系统组件的能力。

Docker-CRI 实现的是公测版,默认情况下在 kubelet 中启用。 runtime,cri-o,frakti,rkt 的内测版本也已经开启。

API 服务器的默认后端存储已经升级为默认情况下使用etcd v3进行新群集。 如果要从1.5集群升级,则应注意通过规划数据迁移窗口来确保连续性。

节点的可靠性得到改善,随着 Kubelet 公开了一个管理可配置的节点分配特征来为系统 Daemon Set 预留计算资源。

Daemon set 更新可让您在它上执行滚动更新。

Alpha Features:此版本主要集中在成熟的功能,但是,添加了几个内测版功能也在 RoadMap 中。

  • Out-of-tree cloud provider支持添加了一个新的 cloud-controller-manager 二进制文件,可用于测试新的核心云提供商流程
  • 节点问题与 tolerationSeconds 相结合的情况下,每播放一次,让用户调整一个pod保持绑定到遇到问题的节点的持续时间
  • Pod Injection Policy添加了一个新的 API 资源 PodPreset,用于在创建时将诸如 secrets、数据卷、卷挂载和环境变量等信息注入到 pod 中。
  • Horizontal Pod Autoscaler 中的自定义参数支持已更改为使用多个 Nvidia GPU 支持,并且只有在 Docker 运行时才引入。

这些只是我们今年第一次发布的一些亮点。 有关完整列表,请访问发行说明:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#v160

社区

此次1.6的发布,要感谢我们的开源社区。 以及,我们已经推出了大约275位贡献者的近5000项提交。 为了使我们的众多倡导者聚集在一起,社区已经推出了一个名为 K8sPort(http://k8sport.org/)的新计划,它是一个在线中心,社区可以参与游戏化挑战并获得信誉。

原文链接:Kubernetes 1.6: Multi-user, Multi-workloads at Scale

备注:感谢才云科技翻译供稿

评论