如何覆盖 aggregate-vector 配置

log-storage-operator 会协调承载 aggregate-vector 以及每个 LogForward 的 Vector 配置的 ConfigMap。每当 ConfigMap 偏离 operator 根据 PlatformLogForward(或 LogForward)推导出的配置时,operator 都会将其修补回去。

对于短期调查或临时变通方案,您可以固定 ConfigMap,使 operator 停止修补它,并保留您的编辑。请在 ConfigMap 上设置 log.alauda.io/user-managed=true annotation。完成后请移除该 annotation;随后 operator 会在下一次协调时根据 CR 重新构建 ConfigMap,您的编辑也将消失。

WARNING

这是一条应急通道,而不是受支持的配置入口。仅在有明确的短期理由时使用,并在该理由消失后立即移除。

如果您的更改是长期性的,请在 CR spec 上请求一个正式字段(或使用 如何调整 aggregate-vector Sink 中现有的配置项),而不要让该 annotation 在整个版本周期内持续存在。

哪些 ConfigMap 接受该 annotation

只有两类 ConfigMap 会使用此 annotation:

ConfigMap派生自
aggregate-vector-config(位于 cpaas-system 中)PlatformLogForward/platform-default
logforward-<name>-config(位于 cpaas-system 中)每个 LogForward CR

operator 管理的其他所有资源(Razor Deployment、Kafka 资源、ServiceAccount、Ingress 以及辅助资源)都会忽略该 annotation,并继续正常进行协调。

常见使用场景

  • 添加 CR spec 未提供的 Vector data_dir 或 transform。
  • 在调查 Vector bug 时,添加 console sink 或 #!DEBUG 块。
  • 在复现窗口期间,冻结确切的 Vector 配置。

如果上述任何情况在您的集群中变成常规操作,请请求相应的 CR 字段,并停止使用这条应急通道。

启用应急通道

为要固定的 ConfigMap 添加 annotation:

# For aggregate-vector
kubectl annotate cm/aggregate-vector-config -n cpaas-system \
  log.alauda.io/user-managed=true

# For a LogForward
kubectl annotate cm/logforward-<name>-config -n cpaas-system \
  log.alauda.io/user-managed=true

然后像平常一样编辑 ConfigMap:

kubectl edit cm/aggregate-vector-config -n cpaas-system

log-storage-operator 会跳过下一次协调时的 patch,并记录日志:

skip reconcile: ConfigMap is user-managed (log.alauda.io/user-managed=true)

滚动 pod 使编辑生效

用户管理的 ConfigMap 发生更改时,Vector pod 不会自动重启,因为 operator 只根据其管理的资源计算 rollout hash。请自行重启 Deployment:

# For aggregate-vector
kubectl rollout restart deploy/aggregate-vector -n cpaas-system

# For a LogForward
kubectl rollout restart deploy/logforward-<name> -n cpaas-system

停用应急通道

移除 annotation:

kubectl annotate cm/aggregate-vector-config -n cpaas-system \
  log.alauda.io/user-managed-

在下一次协调时,operator 会根据 CR spec 重新构建 ConfigMap,并丢弃您的编辑。

平台如何解释 annotation

ConfigMap 状态Operator 操作
ConfigMap 不存在(全新安装)使用 CR 派生的基线创建 ConfigMap。该 annotation 不会阻止创建。
ConfigMap 存在,但没有 annotation将其 patch 为与 CR 派生的基线一致(正常行为)。
ConfigMap 存在,annotation 恰好为 "true"跳过 patch。保留您的编辑。
ConfigMap 存在,annotation 设置为任何其他值("false"、"True"、"1"、"yes")对其执行 patch(annotation 必须等于确切字符串 "true")。

值比较是有意严格执行的,以避免因意外的拼写错误而静默固定 ConfigMap。

与其他 annotation 的交互

平台使用少量资源级 annotation 来实现不同目的。它们互不冲突,可以共存:

Annotation阻止的操作作用范围
log.alauda.io/user-managed=trueoperator 对 Vector ConfigMap 的 patch仅限 aggregate-vector-config、logforward-<name>-config
skip-sync=trueSentry / cluster-transformer 回写漂移配置一组广泛的平台管理资源
helm.sh/resource-policy=keepHelm 在卸载时执行删除任意 Helm 管理的资源

升级前

升级 storage operator 前,请检查是否仍有集群设置了该 annotation。新版 operator 可能会修复行为或提供新的 sink 默认值;固定的 ConfigMap 会使您继续使用旧配置,并可能掩盖该修复。

# List all ConfigMaps managed by log-storage-operator that carry the annotation
kubectl get cm -A -l log.alauda.io/managed-by=log-storage-operator -o yaml \
  | grep -B 2 'user-managed'

移除任何不再需要该 annotation 的 ConfigMap 上的 annotation,确认 CR spec 已记录您需要固定的配置,然后再进行升级。

相关主题