本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
Kubernetes:Kubernetes 1.10 的第一个 Beta 版本来了
Kubernetes社区发布了Kubernetes 1.10的第一个beta版本,这意味着您现在可以试用一些新功能,并在正式发布前向发布团队提供反馈。该版本目前计划于2018年3月21日发布,目标是包含十几个全新的alpha功能和二十多个更成熟的版本。
具体来说,Kubernetes 1.10将包含生产就绪的Kubelet TLS引导、API聚合和更详细的存储指标版本。
其中一些功能看起来很熟悉,因为它们在之前的版本中处于早期阶段。每个阶段都有特定的含义:
- 稳定:与“普遍可用”相同,此阶段的功能已经过彻底测试,可以在生产环境中使用。
- 测试版(beta):该功能已经存在足够长的时间,团队相信该功能本身有望被纳入稳定功能,并且任何API调用都不会改变。您可以使用和测试这些功能,但不建议将其包含在任务关键型生产环境中,因为它们尚未完全强化。
- Alpha版(alpha):新功能通常在此阶段引入。这些功能仍在探索中。API和选项可能会在未来版本中更改,或者功能本身可能会消失。绝不适用于生产环境。您可以从以下位置下载Kubernetes 1.10的最新版本。要向开发社区提供反馈,请在3月9日之前在Kubernetes 1.10里程碑中创建一个问题并标记相应的SIG。
以下是需要关注的内容,但您应该记住,虽然这是撰写本文时的当前计划,但总有可能有一个或多个功能可能会推迟到未来版本发布。我们将从身份验证开始。
身份验证 (SIG-Auth)
- Kubelet TLS 引导(稳定版):Kubelet TLS 引导可能是 Kubernetes 1.10 版本中的“头条”功能,因为它已可用于生产环境。它使新的 kubelet 能够创建证书签名请求,从而让您无需手动添加安全证书或使用自签名证书(这会消除许多证书的优势)即可向集群添加新节点。
- Pod 安全策略移至其自己的 API 组(测试版):Pod 安全策略的测试版允许管理员决定 Pod 可以在哪些上下文中运行。换句话说,您有能力阻止非特权用户在特定命名空间中创建特权 Pod(即可以执行写入文件或访问 Secret 等操作的 Pod)。
- 限制节点对 API 的访问(测试版):同样是测试版功能,您现在可以将对节点上 API 的调用限制为仅限于该特定节点,并确保节点仅调用自己的 API,而不是其他节点上的 API。
- 外部 client-go 凭据提供商(Alpha版):client-go 是用于访问 Kubernetes API 的 Go 语言客户端。此功能增加了添加外部凭据提供商的能力。例如,亚马逊可能希望创建自己的身份验证器来验证与 EKS 集群的交互;此功能使他们无需在 Kubernetes 代码库中包含其身份验证器即可实现这一点。
- TokenRequest API(Alpha版):TokenRequest API 为服务账户令牌的急需改进奠定了基础;此功能支持创建不持久化在 Secrets API 中、面向特定受众(例如外部 Secret 存储)、具有可配置有效期并可绑定到特定 Pod 的令牌。
网络 (SIG-Network)
- 支持可配置的 Pod resolv.conf(测试版):您现在可以专门控制单个 Pod 的 DNS,而不是依赖于整个集群 DNS。
- 尽管该功能名为将默认 DNS 插件切换到 CoreDNS(测试版),但实际上在本周期中不会发生这种情况。社区已经努力将包含 dnsmasq 的 kube-dns 切换到 CoreDNS(另一个组件更少的 CNCF 项目)好几个版本了。在 Kubernetes 1.10 中,默认仍然是 kube-dns,但当 CoreDNS 达到与 kube-dns 功能对等时,团队将考虑将其设为默认。
- 服务拓扑感知路由(Alpha版):分发工作负载是 Kubernetes 的优势之一,但直到现在,一直缺少的是为了延迟目的而将工作负载和服务在地理位置上保持紧密的能力。拓扑感知路由将有助于解决这个问题。(此功能可能会推迟到 Kubernetes 1.11。)
- 使 NodePort IP 地址可配置(Alpha版):不必在 Kubernetes 集群中指定 IP 地址是很棒的——直到您确实需要提前知道其中一个地址是什么,例如为了设置数据库复制或其他任务。您现在将能够专门配置 NodePort IP 地址以解决此问题。(此功能可能会推迟到 Kubernetes 1.11。)
Kubernetes API (SIG-API-machinery)
- API 聚合(稳定版):Kubernetes 允许您通过创建自己的功能并注册它们来扩展其 API,以便它们可以与核心 K8s 功能一起提供服务。此功能将在 Kubernetes 1.10 中升级为“稳定版”,因此您可以在生产环境中使用它。此外,SIG-CLI 正在添加一项名为kubectl get 和 describe 应该很好地与扩展配合使用(Alpha版)的功能,以便由服务器而不是客户端返回此信息,从而提供更流畅的用户体验。
- 支持自托管授权 webhook(Alpha版):早期版本的 Kubernetes 为我们带来了授权 webhook,它使得在执行命令之前定制权限强制成为可能。然而,这些 webhook 必须存在于某个地方,这项新功能使得在集群本身中托管它们成为可能。
存储 (SIG-Storage)
- 内部状态的详细存储指标(稳定版):对于 Kubernetes 这样的分布式系统,随时了解系统内部发生了什么是特别重要的,无论是为了故障排除还是仅仅为了自动化。此版本提供了存储系统内部发生情况的详细指标的普遍可用性,包括挂载和卸载时间、处于特定状态的卷数量以及孤立 pod 目录的数量等指标。您可以在这份设计文档中找到完整列表。
- 挂载命名空间传播(测试版):此功能允许容器将卷挂载为 rslave,以便在容器内部看到主机挂载,或者挂载为 rshared,以便容器内部的任何挂载都反映在主机的挂载命名空间中。此功能的默认值为 rslave。
- 本地临时存储容量隔离(测试版):如果没有此功能,节点上每个使用临时存储的 Pod 都将从同一个池中获取,并且存储分配是“尽力而为”的;换句话说,Pod 永远无法确定自己有多少可用空间。此功能使 Pod 能够预留自己的存储。
- 树外 CSI 卷插件(测试版):Kubernetes 1.9 发布了容器存储接口(CSI),它为供应商向 Kubernetes 提供存储提供了一种标准方式。此功能使他们能够创建“树外”或不在常规 Kubernetes 核心中的驱动程序。这意味着供应商可以控制自己的插件,而不必依赖社区进行代码审查和批准。
- 本地持久存储(测试版):此功能允许使用本地连接的磁盘创建 PersistentVolume,而不仅仅是网络卷。
- 防止删除 Pod 使用的持久卷声明(测试版)和 7. 防止删除绑定到持久卷声明的持久卷(测试版):在早期版本的 Kubernetes 中,可以删除 Pod 正在使用的存储,从而给 Pod 带来巨大的问题。这些功能提供了验证,可以防止这种情况发生。
- 您的持久卷存储空间不足了吗?如果是,您可以使用添加对 PV 在线调整大小的支持(Alpha版)来扩大底层卷,而不会中断现有数据。这还与新的添加对 FlexVolume 调整大小的支持(Alpha版)结合使用;FlexVolume 是通过 FlexVolume 插件实现的供应商支持的卷。
- 拓扑感知卷调度(测试版):此功能允许您在 PersistentVolume 上指定拓扑约束,并由调度器评估这些约束。它还会延迟初始 PersistentVolumeClaim 绑定,直到 Pod 调度完毕,从而使卷绑定决策更智能,并考虑所有 Pod 调度约束。目前,此功能最适用于本地持久卷,但动态配置的支持正在开发中。
节点管理 (SIG-Node)
- 动态 Kubelet 配置(测试版):Kubernetes 可以轻松地对现有集群进行更改,例如增加副本数量或通过网络提供服务。此功能可以在不关闭运行 Kubelet 的节点的情况下更改 Kubernetes 本身(或者更确切地说,是在后台运行 Kubernetes 的 Kubelet)。
- CRI 验证测试套件(测试版):容器运行时接口 (CRI) 使得在 Kubernetes 上运行 Docker 以外的容器(例如 Rkt 容器甚至使用 Virtlet 的虚拟机)成为可能。此功能提供了一套验证测试,以确保这些 CRI 实现合规,从而使开发人员更容易发现问题。
- 可配置的 Pod 进程命名空间共享(Alpha版):尽管 Pod 可以轻松共享 Kubernetes 命名空间,但由于 Docker 中缺乏支持,进程或 PID 命名空间一直是一个更困难的问题。此功能允许您在 Pod 上设置一个参数,以确定容器是拥有自己的操作系统进程还是共享单个进程。
- 在 CRI 中添加对 Windows 容器配置的支持(Alpha版):容器运行时接口最初是为基于 Linux 的容器设计的,因此无法使用 CRI 实现对基于 Windows 的容器的支持。此功能解决了这个问题,使得可以指定 WindowsContainerConfig。
- 调试容器(Alpha版):如果您拥有适当的实用程序,调试容器很容易。但如果您没有呢?此功能允许您在容器上运行调试工具,即使这些工具未包含在原始容器镜像中。
其他更改
- 部署 (SIG-Cluster Lifecycle):支持进程外和树外云提供商(测试版):随着 Kubernetes 被越来越多的接受,越来越多的云提供商希望将其提供。为了更轻松地实现这一点,社区正在努力提取特定于提供商的二进制文件,以便它们可以更容易地替换。
- Azure 上的 Kubernetes (SIG-Azure):Kubernetes 有一个集群自动扩缩器,如果您的工作负载过多,它会自动向集群添加节点,但直到现在它在 Azure 上尚不可用。为集群自动扩缩器添加 Azure 支持(Alpha版)功能旨在解决此问题。与此密切相关的是,添加对 Azure 虚拟机规模集的支持(Alpha版)功能利用 Azure 自己的自动扩缩功能来提供资源。您可以从以下位置下载 Kubernetes 1.10 Beta 版。再次,如果您有反馈(社区希望您有),请在 3 月 9 日之前向1.10 里程碑添加问题并标记相关 SIG。
_
(衷心感谢社区成员 Michelle Au、Jan Šafránek、Eric Chiang、Michał Nasiadka、Radosław Pieczonka、Xing Yang、Daniel Smith、sylvain boily、Leo Sunmo、Michal Masłowski、Fernando Ripoll、ayodele abejide、Brett Kochendorfer、Andrew Randall、Casey Davenport、Duffie Cooley、Bryan Venteicher、Mark Ayers、Christopher Luciano 和 Sandor Szuecs 对本文准确性审查的宝贵帮助。)_