kubeadm v1.8发布:介绍Kubernetes集群的轻松升级

编者注:这篇文章是 系列深入文章 Kubernetes 1.8的新功能

自首次亮相以来 2016年9月集群生命周期特殊兴趣小组(SIG)已将kubeadm建立为最简单的Kubernetes引导方法。现在,我们将同时发布kubeadm v1.8.0和 Kubernetes v1.8.0。在此博客文章中,我将向您介绍自上次更新以来对kubeadm所做的更改,kubeadm的范围以及如何为这项工作做出贡献。

安全第一:kubeadm v1.6和v1.7

之前,我们讨论了 kubeadm v1.6的计划更新. Our primary focus for v1.6 was security. We started enforcing role based access control (RBAC) as it graduated to beta, gave unique identities and locked-down privileges for different system components in the cluster, disabled the insecure localhost:8080 API server port, started authorizing all API calls to the kubelets, and 改进了令牌发现 v1.5中以前使用的方法。令牌发现(又名Bootstrap令牌)已在v1.8中升级为Beta。

在功能方面,与v1.6.0和v1.8.0相比,kubeadm v1.7.0的发行版要小得多。主要的补充是执行 节点授权者,这大大减少了Kubernetes群集的攻击面,并从v1.6群集开始提供了有限的初始升级支持。

在v1.8中更容易升级,扩展和稳定

从Kubernetes v1.7.0到稳定期(代码冻结),我们有8周的时间来实施新功能并稳定即将发布的v1.8.0。我们针对kubeadm v1.8.0的目标是使其更具扩展性。我们希望在此周期中添加许多新功能和改进,但我们成功了。升级以及更好的自省能力。 kubeadm v1.8.0(和我最喜欢的新功能)中最重要的更新是 一键升级 控制平面。尽管v1.7.0具有升级群集的能力,但用户体验远非最佳,而且过程存在风险。

现在,您可以通过输入以下内容轻松检查系统是否可以处理升级:

$ kubeadm upgrade plan

这样可以为您提供有关可以升级到哪个版本以及群集的运行状况的信息。

您可以通过指定--dry-run标志来检查升级对系统的影响。在早期版本的kubeadm中,升级本质上是盲目的,因为您只能假设升级将如何影响您的集群。借助新的空运行功能,不再有任何神秘之处。在应用升级之前,您可以确切地看到应用升级将执行的操作。

在检查了升级对集群的影响之后,您可以通过输入以下内容应用升级:

$ kubeadm upgrade apply v1.8.0

与以前的版本相比,这是一种更干净,更安全的升级方式。与任何类型的升级或降级一样,最好使用首选解决方案备份群集。

自托管

在这种情况下,自托管是指设置控制平面的特定方式。自托管概念最初是由CoreOS在其 Bootkube 项目。长期目标是将此功能(当前处于Alpha阶段)移至通用kubeadm工具箱。自托管意味着控制平面组件,API服务器,控制器管理器和调度程序本身就是工作集群中的工作负载。这意味着可以使用Kubernetes原语来管理控制平面组件,这具有许多优点。例如,如果在DaemonSet中运行HA,则在实现所有主服务器时,将自动在所有主服务器上运行诸如计划程序和控制器管理器之类的由首长选择的组件。 Kubernetes中的滚动升级可用于控制平面组件的升级,并且几乎不需要编写额外的代码即可工作。它是Kubernetes的内置基元之一!

自托管到v1.9.0才是默认值,但用户可以在实验集群中轻松测试该功能。如果您测试此功能,我们希望您提供反馈!

您可以通过启用其功能门来测试自我托管:

$ kubeadm init --feature-gates=SelfHosting=true

可扩展性

我们添加了一些新的扩展功能。您可以委派一些任务,例如生成证书或将控制平面参数写入kubeadm,但仍然可以自己驱动控制平面引导过程。基本上,您可以让kubeadm做一些事情,并在需要定制的地方填写自己。以前,您只能使用kubeadm init来执行“全餐交易”。包含kubeadm alpha phase命令可支持我们的目标,即使kubeadm更具模块化,从而使您能够调用引导过程的原子子步骤。

在v1.8.0中,kubeadm Alpha阶段就是这样:Alpha预览。我们希望我们可以将命令逐步升级为v1.9.0中的kubeadm阶段的beta。我们迫不及待地希望社区提供有关如何更好地改进此功能的反馈!

改进措施

Along with our new kubeadm features, we’ve also made improvements to existing ones. 的 Bootstrap Token feature that makes kubeadm join so short and sweet has graduated from alpha to beta and gained even more security features.

如果在v1.6或v1.7中对系统进行了自定义,则必须记住升级集群时这些自定义是什么。不再:从v1.8.0开始,kubeadm将您的配置上载到集群内部的ConfigMap,然后在升级时读取该配置以获得无缝的用户体验。

第一个证书轮换功能已在v1.8中逐步升级为beta版,这很高兴看到。感谢 Auth特别兴趣小组,Kubernetes节点组件kubelet现在可以 轮换客户证书 自动。我们希望这一领域会不断改善,并将继续作为跨SIG努力的一部分,以轻松轮换任何群集中的所有证书。

最后但并非最不重要的一点是,kubeadm现在更具弹性。 kubeadm init将更早地检测到更多故障环境,并超时而不是永远等待预期的情况。

kubeadm的范围

由于Kubernetes有许多不同的端到端安装程序,因此生态系统中存在一些碎片。随着Kubernetes的每个新发行版,这些安装程序自然会变得更加分歧。如果用户依赖于特定于安装程序的变体和挂钩(无论如何都没有标准化),这可能会带来一系列问题。从一开始我们的目标就是使kubeadm成为部署Kubernetes集群的基础,并为新的Kubernetes用户提供kubeadm init和kubeadm联接作为最佳实践“快速路径”。理想情况下,将kubeadm用作所有部署的基础将使创建一致性集群更加容易。

kubeadm执行必要的操作,以使最小可行的群集启动并运行。它只关心引导程序,而不关心设计的机器。同样,默认情况下安装各种功能强大的插件,例如 Kubernetes仪表板,某些监控解决方案,特定于云提供商的插件等不在范围内。相反,我们希望在kubeadm的基础上构建更高级别,更量身定制的工具,从而安装最终用户所需的软件。

v1.9.0及更高版本

kubeadm的未来将存储什么?

计划功能

我们计划将高可用性(复制的etcd以及多个冗余API服务器和其他控制平面组件)作为v1.9.0中的Alpha功能来解决。这是我们用户群的常规要求。

另外,我们希望使自托管成为部署控制平面的默认方式:如果我们可以依靠Kubernetes自己的工具来管理集群组件,则Kubernetes变得更容易管理。

促进kubeadm的采用并参与其中

kubeadm收养工作组 是SIG集群生命周期与Kubernetes生态系统中其他各方之间的不懈努力。该工作组致力于使kubeadm更具可扩展性,以促进其在社区中的其他端到端安装程序中的采用。欢迎大家加入。到目前为止,我们很高兴宣布 kubespray 开始在引擎盖下使用kubeadm,并同时获得了新功能!我们很高兴看到其他人效仿并增强生态系统。

kubeadm是了解Kubernetes的好方法:它将Kubernetes的所有组件捆绑在一个包中。要了解更多关于kubeadm真正的内幕, 这个文件 在v1.8.0中描述了kubeadm函数。

如果您想参与这些工作,请加入SIG集群生命周期。我们 变焦相遇 世界标准时间每周星期二16:00进行一次。有关我们在每周会议上谈论的内容的更多信息, 查看我们的会议记录。会议是很好的教育机会,即使您不想立即加入并提出自己的想法。您也可以注册我们的 邮件列表,加入我们 频道松弛, or看看 视频档案 我们过去的时光tings。即使您只希望最初观看视频通话,我们也很高兴欢迎您成为SIG集群生命周期的新成员!

如果您想知道kubeadm开发人员在Kubernetes发行周期的给定时间做什么,请查看 这个文件。最后,如果您对我们即将进行的任何项目感兴趣,请立即加入!

谢谢,
卢卡斯·卡尔斯特伦
Kubernetes维护者和SIG集群生命周期联合负责人
织造厂 承包商