库贝姆 v1.15中的自动高可用性:包含电池但可交换

s:

  • 卢卡斯·卡尔德斯特伦(LucasKäldström), @luxasSIG集群生命周期联合主席和kubeadm子项目所有者,Weaveworks
  • Fabrizio Pandini, @fabriziopandini,kubeadm子项目所有者,独立

库贝姆 是使捕鱼大亨网络版管理员能够使用的工具 快速轻松地引导完全兼容的最小可行集群 认证的捕鱼大亨网络版 准则。 它正在由 SIG集群生命周期 自2016年以来,并将其从beta升级为 于2018年底正式上市(GA).

在这个重要的里程碑之后,kubeadm团队现在专注于核心功能集的稳定性并致力于 成熟的现有功能。

在这篇文章中,我们将介绍kubeadm v1.15版本中所做的改进。

库贝姆的范围

库贝姆专注于执行必要的操作,以使最小可行,安全的集群启动并在集群中运行。 人性化的方式。 库贝姆的范围仅限于本地计算机的文件系统和捕鱼大亨网络版 API, intended to be a 用于高级工具的可组合构建块.

库贝姆界面的核心非常简单:您通过运行来创建新的控制平面节点 库贝姆 init,您可以通过运行将工作程序节点加入控制平面 库贝姆 join。还包括用于管理已自举的通用实用程序 集群,例如控制平面升级,令牌和证书更新。

为了使kubeadm保持精简,专注并与供应商/基础架构不可知,以下任务不在范围内:

  • 基础架构配置
  • 第三方网络
  • 非关键的附加组件,例如监视,记录和可视化
  • 特定的云提供商集成

这些任务由其他SIG集群生命周期项目解决,例如 集群API 用于基础架构的供应和管理。

相反,kubeadm仅覆盖每个捕鱼大亨网络版集群中的公分母: 控制平面.

集群生命周期层

库贝姆 v1.15有哪些新功能?

贝塔 的高可用性

我们很高兴地宣布,对高可用性集群的自动支持即将向 贝塔 在kubeadm v1.15中。让我们向所有为此做出贡献的贡献者和早期采用者致以巨大的呐喊!

但是,自动化的高可用性在kubeadm中如何工作?

The great news is that you can use the familiar 库贝姆 init or 库贝姆 join workflow for creating high availability cluster as well, with the only difference that you have to pass the --control-plane flag to 库贝姆 join when adding more 控制平面 nodes.

这里是此功能的3分钟截屏视频:

asciicast

简而言之:

  1. 设置负载均衡器。 你需要一个 外部负载均衡器;但是,提供此功能超出了kubeadm的范围。

    • 社区将为此任务提供一组参考实现。
    • 来自云提供商的HAproxy,Envoy或类似的负载均衡器效果很好
  2. 运行kubeadm init 在第一个控制平面节点上进行少量修改:

    • 创建一个 库贝姆配置文件
    • In the config file, set the controlPlaneEndpoint field to where your Load Balancer can be reached at.
    • Run init, with the --upload-certs flag like this: sudo 库贝姆 init --config=kubeadm-config.yaml --upload-certs
  3. 运行kubeadm join --control-plane 您随时可以扩展控制平面节点集

    • 控制平面节点和普通节点均可在任何时间以任何顺序连接
    • The command to run will be given by 库贝姆 init above, and is of the form:
    库贝姆 join [LB endpoint] \
       --token ... \                                                                                               
       --discovery-token-ca-cert-hash sha256:... \                                                             
       --control-plane --certificate-key ...  
    

对于那些对细节感兴趣的人,有很多事情可以使此功能成为可能。最为显着地:

  • 自动证书转移. 库贝姆 implements an automatic certificate copy feature to automate the distribution of all the certificate authorities/keys that must be shared across all the control-planes nodes in order to get your cluster to work. This feature can be activated by passing --upload-certs to 库贝姆 init; see 配置和部署HA控制平面 更多细节。这是一项明确的选择加入功能,您也可以按照首选方式手动分发证书。 \

  • 动态增长的etcd集群。当您不提供外部etcd集群时,kubeadm会自动添加一个新的etcd成员,该成员作为静态pod运行。所有etcd成员都加入了一个“堆叠的” etcd集群,该集群与您的高可用性控制平面一起增长\

  • 并发加入。与已经为工作程序节点实现的类似,您可以随时随地,以任何顺序甚至并行地加入控制平面节点。 \

  • 可升级. The 库贝姆 upgrade workflow was improved in order to properly handle the HA scenario, and, after starting the upgrade with 库贝姆 upgrade apply as usual, users can now complete the upgrade process by using 库贝姆 upgrade node both on the remaining control-plane nodes and worker nodes

最后,还值得注意的是,已经创建了一个全新的测试套件,专门用于确保kubeadm中的高可用性将随着时间的推移保持稳定。

证书管理

在kubeadm v1.15中,证书管理变得更加简单和强大。

如果您定期执行捕鱼大亨网络版版本升级,则kubeadm现在将确保您的集群保持最新状态并通过以下方式合理地确保安全性: 自动旋转所有证书 at 库贝姆 upgrade time.

If instead, you prefer to renew your certificates manually, you can opt out from the automatic certificate renewal by passing --certificate-renewal=false to 库贝姆 upgrade commands. Then you can perform 手动证书续订 with the 库贝姆 alpha certs renew command.

但是还有更多。

A new command 库贝姆 alpha certs check-expiration was introduced to allow users to 检查证书过期。输出类似于以下内容:

CERTIFICATE                EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
admin.conf                 May 15, 2020 13:03 UTC   364d            false
apiserver                  May 15, 2020 13:00 UTC   364d            false
apiserver-etcd-client      May 15, 2020 13:00 UTC   364d            false
apiserver-kubelet-client   May 15, 2020 13:00 UTC   364d            false
controller-manager.conf    May 15, 2020 13:03 UTC   364d            false
etcd-healthcheck-client    May 15, 2020 13:00 UTC   364d            false
etcd-peer                  May 15, 2020 13:00 UTC   364d            false
etcd-server                May 15, 2020 13:00 UTC   364d            false
front-proxy-client         May 15, 2020 13:00 UTC   364d            false
scheduler.conf             May 15, 2020 13:03 UTC   364d            false

You should expect also more work around certificate management in 库贝姆 in the next releases, with the introduction of ECDSA keys and with improved support for CA key rotation. Additionally, the commands staged under 库贝姆 alpha are expected to move top-level soon.

改进的配置文件格式

您可以争辩说,几乎没有两个捕鱼大亨网络版集群配置相同,因此有必要根据环境自定义集群的设置方式。配置组件的一种方法是通过标志。但是,这具有一些可伸缩性限制:

  • 难以维护。 当组件的标志集超过30多个标志时,对其进行配置确实非常麻烦。
  • 复杂升级。删除,弃用或更改标志后,您需要与参数同时升级二进制文件。
  • 键值限制. There are simply many types of configuration you can’t express with the --key=value syntax.
  • 势在必行。与以声明方式指定的捕鱼大亨网络版 API对象本身相反,标志参数在设计上是必需的。

一般来说,这是捕鱼大亨网络版组件的关键问题,因为某些组件具有150多个标志。借助kubeadm,我们正在率先进行ComponentConfig的工作,并为用户提供一小部分标志,但最重要的是, 声明性和版本化的配置文件 用于高级用例。我们称之为 组件配置。具有以下特点:

  • 可升级:您可以升级二进制文件,但仍使用现有的旧模式。自动迁移。
  • 可编程的。以JSON / YAML表示的配置允许一致且可编程的操作
  • 可表达的。可以使用和应用高级配置模式。
  • 陈述式。 OpenAPI信息可以很容易地公开/用于文档生成

在kubeadm v1.15中,我们改进了结构并发布了新的 v1beta2 格式。重要的是要注意现有的 v1beta1 format released in v1.13 will still continue to work for several releases. This means you can upgrade 库贝姆 to v1.15, and still use your existing v1beta1 configuration files. When you’re ready to take advantage of the improvements made in v1beta2, you can perform an automatic schema migration using the 库贝姆 config migrate command.

During the course of the year, we’re looking forward to graduate the schema to General Availability v1.` If you’re interested in this effort, you can also join WG组件标准.

下一步是什么?

2019年计划

We are focusing our efforts around graduating the configuration file format to GA (库贝姆.k8s.io/v1)`, graduating this super-easy High Availability flow to stable, and providing better tools around rotating certificates needed for running the cluster automatically.

除了我们章程的这三个关键里程碑,我们还希望改进以下方面:

  • 支持将Windows节点加入到kubeadm集群(具有端到端测试)
  • 改善上游CI信号,主要用于HA和升级
  • 巩固如何构建和安装捕鱼大亨网络版工件
  • 利用Kustomize进行高级,分层和声明性配置

但是,我们无法保证这些可交付成果将在今年发货,因为这是社区的努力。如果您希望这些事情发生,请加入我们的SIG并开始贡献力量!特别是ComponentConfig问题需要更多注意。

丹·科恩 在此周期中,CNCF提供了有关为kubeadm创建徽标的帮助。 亚历克斯·康蒂 创建了19个(!)不同的徽标选项供社区投票。公众投票 活跃了大约一周,我们得到了386个答案。获胜方案获得了17.4%的选票。换句话说,现在我们有一个 official logo!

库贝姆的徽标

贡献

如果这一切听起来令人兴奋, 加入我们!

SIG集群生命周期 有很多不同 子项目,其中kubeadm是其中之一。在下图中,您可以看到 困惑,我们还有很多工作要做。

SIG集群生命周期项目

一些方便的链接,如果你想开始贡献:

谢谢

没有为SIG集群生命周期做出贡献的伟大人物的帮助,该版本将无法实现 和kubeadm。我们要感谢所有kubeadm贡献者和公司,使其开发人员能够工作 on 捕鱼大亨网络版!

特别是,我们要感谢 库贝姆子项目业主 这使得这成为可能:

  • 蒂姆·圣克莱尔 @timothysc,SIG集群生命周期联合主席,VMware
  • 卢卡斯·卡尔德斯特伦(LucasKäldström), @luxas,SIG集群生命周期联合主席,Weaveworks
  • Fabrizio Pandini, @fabriziopandini, 独立
  • 卢博米尔·伊万诺夫(Lubomir I. Ivanov), @ neolit123,VMware
  • Rostislav M.Georgiev, @rosti,VMware