使用 ConfigMaps¶
本页提供了有关使用 ConfigMaps 管理集群配置的重要 Knative 特定信息和最佳实践。ConfigMaps 是管理 Knative 控制器配置值的首要手段。
如果您使用 Knative Operator 来安装和管理您的 Knative 集群,则不应直接编辑 ConfigMaps,因为 Operator 会覆盖更改。请参阅使用 Operator 配置 Knative以了解如何使用 Operator 管理 ConfigMaps。
_example 键¶
Knative 安装的 ConfigMap 文件包含一个 _example 键,该键显示了该 ConfigMap 中所有已知配置键的用法和目的。此键不会影响 Knative 的行为,但其中包含一个用作文档注释的值。
如果用户编辑了 _example 键而不是在 ConfigMap 中创建新键,则更改不会影响集群配置,这可能会造成混淆。Knative Webhook 会标记此错误并警告用户其更新无法打补丁。更具体地说,当 _example 键的校验和与 ConfigMap 上的 knative.dev/example-checksum 注解不同时,就会捕获该编辑。如果校验和为空或缺失,Webhook 则不会创建警告。
因此,您不能更改 _example 键的内容,但可以完全删除 _example 键或删除 example-checksum 注解。
例如,以下 YAML 代码显示了 config-defaults ConfigMap 的前 24 行,其中校验和在第 11 行突出显示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
最佳实践¶
验证和测试更改¶
Knative 控制器会在应用后几秒钟内处理新值,包括回滚到先前的值。
- 在应用 ConfigMaps 之前,请使用
kubeval等工具验证其语法和内容,或者使用kubectl apply --dry-run=server。 - 在暂存环境中测试 ConfigMap 更改,以确保与应用程序版本兼容。
存储和版本控制¶
您如何管理存储与集群和 Git 的规范位置相关。如果您的集群是规范的,那么您正在将配置导出或备份到 Git。如果 Git 是规范的,那么您正在实践 GitOps,并且您应该在 Git 中进行更改,然后将文件从 Git 应用到您的集群。
如果您使用 kubectl edit 管理 ConfigMap,请定期使用 kubectl get configmap -o yaml 从集群导出 ConfigMaps,并将其提交到 Git 以便恢复。根据需要,在 app.properties 中包含适用的版本号。
如果您通过将定义保留在 Git 中并自动将其应用于集群(GitOps)来管理 ConfigMap,则可以手动应用更改,或者使用自动化(例如 Flux 或 ArgoCD)在提交后应用更改。
Git 建议¶
除了勤勉使用提交消息外,以下是一些关于 GitHub 中 ConfigMaps 的建议:
- 集中管理 ConfigMaps:在 Git 存储库中将所有 ConfigMaps 存储在专用目录中,例如
k8s/configmaps/。 - 使用版本号标记 Git 中的提交,例如
git tag config-v1.2.3以标记特定的 ConfigMap 版本。 - 实施 GitOps 工作流,使用 ArgoCD 或 Flux 等工具将 ConfigMaps 从 Git 同步到您的 Kubernetes 集群。