原文发表于Flux的博客,作者Daniel Holbach
tl;dr: 服务器端调和将使Flux的性能更强,提高整体的可观察性,并在未来允许我们增加新的功能,如能够预览清单的本地更改,而无需推送到上游。
⚠需要修改。由于Kubernetes的问题,我们至少需要一定的Kubernetes版本(从1.16.11
开始--下面会详细介绍)。报告Kubernetes namespaced对象变化的日志、事件和警报现在使用Kind/Namespace/Name
格式,而不是Kind/Name
。
我们很少这样做,但这次我们想提前通知你一个即将到来的大功能,你会很高兴。自从Kubernetes将服务器端应用转移到GA后,我们为你提供了一个基于它的新的调节器,并将API毕业到v1beta2
。
发生了什么
- 这是什么时候发生的?
随着Flux 0.18的发布,我们将转移到新的调节器。它将在未来几周内发布。更多信息请参考此PR。 - 我必须使用这个新东西吗?
是的。Flux将更有性能,更不容易出错,从维护的角度来看,对我们来说也会更容易。我们理解这个新功能需要在你的终端进行改变,但我们确信你会喜欢这个新的体验 - 我的集群会停止工作吗?
不会,但你需要做一些准备工作,以确保Flux仍然能够应用你的配置。见下文。
注意:飞行前的检查应该能够捕捉到诸如满足最低要求的Kubernetes版本的问题。
以下是你得到的东西
- 新的调节器提高了性能(CPU、内存、网络、FD使用),并通过用Go编写的专门应用程序取代
kubectl exec
调用来减少对Kubernetes API的调用。 - 我们能够验证和核对包含CRD和CR的源。
- 可靠地检测和报告所需状态(git、s3等)和集群状态之间的漂移。
- 在未来。预览清单的本地更改,而不推送到上游
(flux diff -k
命令待定)。 - 能够等待所有应用的资源准备就绪,而不需要用户填写健康检查列表。
- 通过实时报告垃圾收集和健康评估行动,提高调和过程的整体可观察性。
这是你需要做的准备工作
检查你在集群中运行的Kubernetes版本。下面所有的版本都修复了管理字段和字段类型的退步。
Kubernetes版本 | 最低要求 |
---|---|
v1.16 | >= 1.16.11 |
v1.17 | >= 1.17.7 |
v1.18 | >= 1.18.4 |
v1.19 及以后版本 | >= 1.19.0 |
命名的对象必须包含metadata.namespace,默认的默认命名空间不再被支持。这意味着你需要在你的配置文件中找到任何默认的namespaced资源,并给它们一个命名空间。请记住,kustomizations经常被用来分配一个命名空间,所以即使一个特定的文件中没有命名空间,也可能不代表一个问题。
报告Kubernetes命名空间对象变化的日志、事件和警报现在使用Kind/Namespace/Name
格式,而不是Kind/Name
,例如。
服务/flux-demo/podinfo没有变化
部署/flux-demo/podinfo已配置
删除HorizontalPodAutoscaler/flux-demo/podinfo
任何依赖于日志中特定格式的自动化或监控都需要进行调整。理想情况下,你应该尝试同时处理新旧两种格式。
在API变化方面,kustomize.toolkit.fluxcd.io/v1beta2
API是向后兼容v1beta1
的。这是由Kubernetes API服务器自动完成的,不需要准备。不过,你可能希望根据下表中的内容翻译你的FluxKustomization
资源。
增加、废弃和删除的内容。
新版本中的变化 | 你应该做什么 |
---|---|
现在的版本是v1beta2 | 更改版本:apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 |
.spec.validation删除 | 现在已经假定服务器端验证了。从.spec 中删除此字段。 |
.spec.patchesStrategicMerge 已被弃用,改用.spec.patches 。 | 将.spec.patchesStrategicMerge 中的每个条目转换为内联战略合并补丁,就像Kustomize 文档中给出的这个例子,并追加到.spec.patches 中。注意,补丁字段中的值是带引号的;也就是说,它是补丁的YAML或JSON,经过串联。 |
.spec.patchesJson6902 被弃用,改用.spec.patches | 将.spec.patchesJson6902 中的每个条目转换为内联JSON6902补丁,并追加到.spec.patches 中。请注意,补丁字段中的值是带引号的;也就是说,它是补丁的YAML或JSON,经过了串联。 |
.status.snapshot 被.status. inventation 替换。 | . status不保存在文件中,所以你不需要考虑这个问题。 |
.spec.wait 新增 | 如果为真,控制器将等待所有调和的资源准备就绪,并忽略.spec.healthChecks 。这一点不需要准备,因为这是一个新功能。 |
为什么我们要这样做
当我们开始Flux v2时,我们设定了一个目标,即不再依赖第三方的二进制文件来实现核心功能。虽然我们已经成功地用Go库(go-git、git2go)和C库(libgit2、libssh2)替换了Git CLI shell execs,用Go库(kustomize/api、kustomize/kyaml)替换了kustomize CLI,但我们仍然依赖于kubectl CLI的三方合并应用功能。随着Kubernetes "服务器端应用 "被推广到GA,我们终于可以摆脱kubectl,完全使用控制器-运行时Go客户端来驱动调和了。
请看一下介绍这一变化的PR,因为它详细地谈到了这一变化所解决的问题。
预先预览和留下反馈
如果你想在该功能发布前先预览一下,并在你自己的测试集群上试用v1beta2的API,请按照以下步骤进行。
- 安装最新的Flux控制器sflux
install
- 应用这个分支的CRDkubectl
apply -k https://github.com/fluxcd/kustomize-controller/config/crd?ref=v1beta2
- 部署本分支的kustomize-controller构建kubectl
-n flux-system set image deployment/kustomize-controller / manager=ghcr.io/fluxcd/kustomize-controller:v1beta2-8426b396
请在此PR上发表评论,让我们知道你的想法。
下一步是什么?
最大的部分工作已经完成,以下是我们在发布前的TODO列表中的内容。
- 将 SSA 资源管理器移到
fluxcd/pkg/ssa
中。 - 在Flux CLI中使用SSA管理器来替代
kubectl shell
execs来进行flux bootstrap
和flux install
。 - 使用Flux CLI中的SSA管理器来实现
flux build
和flux diff
命令 - 在
flux check --pre
中更新最小的Kubernetes版本
这很好--我想参与其中
请加入我们在CNCF Slack上的#flux频道(在这里获得邀请)来讨论这个问题。
或者在我们的社区页面上找到其他的联系方式(包括我们的每周会议)。
我们期待着你加入我们的社区!