跳到内容

使用 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
piVersion: v1
kind: ConfigMap
metadata:
  name: config-defaults
  namespace: knative-serving
  labels:
    app.kubernetes.io/name: knative-serving
    app.kubernetes.io/component: controller
    app.kubernetes.io/version: devel
  annotations:
    knative.dev/example-checksum: "5b64ff5c"
data:
  _example: |
    ################################
    #                              #
    #    EXAMPLE CONFIGURATION     #
    #                              #
    ################################

    # This block is not actually functional configuration,
    # but serves to illustrate the available configuration
    # options and document them in a way that is accessible
    # to users that `kubectl edit` this config map.
    #

最佳实践

验证和测试更改

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 集群。

我们使用分析和 cookie 来了解网站流量。有关您使用我们网站的信息会与 Google 共享以达到此目的。了解更多。