ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

cilium config delete 命令详解:在 Kubernetes 集群中删除 Cilium 运行时配置项

cilium config delete 命令详解:在 Kubernetes 集群中删除 Cilium 运行时配置项 cilium config delete 命令详解在 Kubernetes 集群中删除 Cilium 运行时配置项【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium导读cilium config delete是 Cilium CLIcilium-cli提供的配置管理子命令之一用于从运行中的 Cilium 安装里删除cilium-configConfigMap 中的单个配置键将对应配置项恢复为未显式设置的状态并在默认情况下自动重启 Cilium Agent/Operator Pod 使变更生效。本文以该命令的自动生成参考文档cilium_config_delete.md为骨架结合仓库中cilium-cli的命令定义与底层实现源码完整讲解命令语法、全部参数、底层原理JSON Patch 与 Pod 重启机制以及查看—设置—删除完整运维工作流帮助你安全、可控地管理生产环境中的 Cilium 运行配置。一、背景Cilium 的配置存储体系在深入命令本身之前需要先理解它操作的对象。Cilium 安装在 Kubernetes 中的运行配置并非直接散落在各组件命令行参数里而是统一存储在名为cilium-config的共享 ConfigMap 中不带命令行的--前缀例如键auto-direct-node-routes、agent-not-ready-taint-key等。Cilium Agent 等组件在启动时读取该 ConfigMap经 Viper 合并后灌入各自的配置结构体见 pkg/option/config.go 中的MergeConfig、Populate以及 pkg/option/resolver/resolver.go 中基于KindConfigMap的readConfigMap实现。官方配置文档Documentation/configuration/index.rst指出修改运行中安装的配置有三种途径helm upgrade向 Helm 提供新值并应用到现有安装设置rollOutCiliumPodstrue可让 Agent Pod 渐进式重启cilium config set由 Cilium CLI 直接更新cilium-configConfigMap 中的单个键值CiliumNodeConfig对象针对特定节点集合的配置详见 per-node-config 文档。cilium config delete与set、view同属第二种途径共同组成 Cilium CLI 的配置管理命令组cilium config见 cilium-cli/cli/config.go。二、命令概述与基本用法根据自动生成的命令参考文档cilium config delete的用途与用法如下Delete a key in the configurationcilium config delete [flags]与兄弟命令view查看当前配置和set key value设置键值对不同delete的语义是删除配置中的一个键。从命令定义源码cilium-cli/cli/config.go 中newCmdConfigDelete可以看到它使用cobra.ExactArgs(1)严格校验参数个数因此实际调用形式为cilium config delete key其中key即要删除的配置项名称例如cilium config delete multicast-enabled执行成功后multicast-enabled这一键将从cilium-configConfigMap 中被移除对应功能将回落为 Cilium 内置的默认值因为未显式设置的键不再参与配置合并。三、参数详解3.1 本命令专属选项-h, --help help for delete -r, --restart Restart Cilium pods (default true)参数含义默认值-h, --help查看 delete 子命令帮助信息--r, --restart配置变更后是否重启 Cilium Pod 使生效true--restart是整个命令中影响行为最关键的开关默认true时删除键后会自动重启 Cilium Agent 与 Operator Pod设为false时则只改 ConfigMap 不重启由运维人员手动择机滚动重启详细机制见下文第五节。3.2 继承自父命令的全局选项由于delete是cilium config的子命令它还继承了根命令的以下 Kubernetes 访问相关选项--as string Username to impersonate for the operation. User could be a regular user or a service account in a namespace. --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --context string Kubernetes configuration context --helm-release-name string Helm release name (default cilium) --kubeconfig string Path to the kubeconfig file -n, --namespace string Namespace Cilium is running in. Can also be set via CILIUM_NAMESPACE env var (default kube-system)参数含义默认值--as模拟指定用户或 ServiceAccount 执行操作---as-group模拟指定用户组可重复指定多个---contextKubernetes 配置上下文kubeconfig context---helm-release-nameHelm release 名称cilium--kubeconfigkubeconfig 文件路径--n, --namespaceCilium 运行所在的命名空间也支持通过环境变量CILIUM_NAMESPACE设置kube-system其中--namespace与CILIUM_NAMESPACE环境变量对应的是根命令RootParams.Namespace它决定命令操作哪一个命名空间下的cilium-configConfigMap。在非默认命名空间如使用 Helm 自定义安装场景部署 Cilium 时必须显式指定CILIUM_NAMESPACEcustom-ns cilium config delete key # 或 cilium config delete -n custom-ns key四、源码级原理Delete 是如何实现的cilium config delete的底层逻辑位于 cilium-cli/config/config.go 的K8sConfig.Delete方法func (k *K8sConfig) Delete(ctx context.Context, key string, params Parameters) error { patch : []byte([{op: remove, path: /data/ key }]) k.Log(✨ Removing key %s from ConfigMap %s..., key, defaults.ConfigMapName) if _, err : k.client.PatchConfigMap(ctx, k.params.Namespace, defaults.ConfigMapName, types.JSONPatchType, patch, metav1.PatchOptions{}); err ! nil { return fmt.Errorf(unable to patch ConfigMap %s with patch %q: %w, defaults.ConfigMapName, patch, err) } return k.restartPodsUponConfigChange(ctx, params) }关键实现事实删除方式命令通过 Kubernetes API 对 ConfigMap 发起JSON PatchJSONPatchType请求Patch 体为[{op: remove, path: /data/key}]即以remove操作移除/data字段下对应键这与Set方法使用的Strategic Merge Patch{data:{key:value}}形成鲜明对比——一个是删键一个是增改键目标对象操作目标是defaults.ConfigMapName常量即cilium-configConfigMap见 cilium-cli/defaults/defaults.go失败处理若 Patch 请求失败如键不存在、无 RBAC 权限、命名空间错误命令会以unable to patch ConfigMap ...错误信息终止并退出非零状态码后继动作无论 Patch 是否成功Patch 成功才会走到下一步只要配置发生变更都会调用restartPodsUponConfigChange触发重启流程。从更上层看newCmdConfigDeletecilium-cli/cli/config.go负责解析参数、构造config.Parameters包含Namespace、Restart、Writer再调用check.Delete(context.Background(), args[0], params)args[0]即用户传入的待删除键。五、--restart 开关与 Pod 重启机制删除键之后配置变更要真正生效需要 Cilium Agent 重新读取 ConfigMap。这一步骤由K8sConfig.restartPodsUponConfigChange完成同见 cilium-cli/config/config.gofunc (k *K8sConfig) restartPodsUponConfigChange(ctx context.Context, params Parameters) error { if !params.Restart { fmt.Println(⚠️ Restart Cilium pods for configmap changes to take effect) return nil } if err : k.client.DeletePodCollection(ctx, params.Namespace, metav1.DeleteOptions{}, metav1.ListOptions{LabelSelector: defaults.AgentPodSelector}); err ! nil { return fmt.Errorf(⚠️ unable to restart Cilium pods: %w, err) } if err : k.client.DeletePodCollection(ctx, params.Namespace, metav1.DeleteOptions{}, metav1.ListOptions{LabelSelector: defaults.OperatorPodSelector}); err ! nil { return fmt.Errorf(⚠️ unable to restart Cilium pods: %w, err) } fmt.Println(♻️ Restarted Cilium pods) return nil }该机制包含三个要点默认自动重启当--restart为true默认时命令会调用DeletePodCollection删除两批 Pod先是 Cilium Agent Pod标签选择器k8s-appcilium再是 Cilium Operator Pod标签选择器io.cilium/appoperator二者均为defaults包中定义的常量见 cilium-cli/defaults/defaults.go。删除由 Kubernetes Deployment/DaemonSet 控制器重建重建后的 Pod 从更新后的 ConfigMap 读取配置。关闭自动重启当--restartfalse时命令只修改 ConfigMap并打印提示信息提醒你需要手动重启 Cilium Pod配置变更才会生效。这为滚动式渐进式重启留出了空间——官方配置文档明确建议需要渐进重启时用cilium config set --restartfalse ...修改配置再手动分批删除 Agent Pod 让变更逐个节点生效delete命令的--restartfalse行为与此完全一致见 Documentation/configuration/index.rst 的 Making Changes 一节。变更未生效窗口由于多数 Cilium 配置变更需要 Agent 重启才生效更新 ConfigMap 后、Pod 完成重启前存在一段运行配置与期望配置不一致的窗口期。仓库提供了配置漂移检测ConfigMap drift detection能力来暴露这一状态这也解释了为何delete命令默认主动重启 Pod 以尽快收敛。六、完整运维工作流查看 → 删除 → 验证将view、set、delete三个子命令组合可以形成一套完整的配置运维循环6.1 查看当前配置cilium config view该命令读取cilium-configConfigMap 并按字母序以表格形式输出全部键值对实现见K8sConfig.View对cm.Data做slices.Sorted(maps.Keys(...))排序后通过 tabwriter 格式化输出。删除前先view可以确认目标键的准确名称与当前值。6.2 删除指定配置键cilium config delete key示例——删除多播multicast相关配置并立即生效cilium config delete multicast-enabled执行后日志大致为先打印Removing key multicast-enabled from ConfigMap cilium-config...随后在默认--restarttrue下打印Restarted Cilium pods。6.3 不重启、手动滚动生效生产环境推荐cilium config delete --restartfalse key kubectl -n kube-system rollout restart ds/cilium先只移除 ConfigMap 中的键再由你掌控时机分批重启工作负载避免一次性删除所有 Agent Pod 造成控制面抖动。6.4 验证删除结果cilium config view再次执行view确认目标键已不再出现在输出中同时可配合kubectl -n kube-system get configmap cilium-config -o yaml直接检查 ConfigMap 的data字段。七、删除语义与注意事项删除 ≠ 关闭而是恢复默认从配置消费链路看Agent 通过 Viper 将 ConfigMap 数据与内置默认值合并见 pkg/option/config.go 的MergeConfig与DaemonConfig.Populate并从 pkg/option/resolver/resolver.go 的readConfigMap读取。因此从 ConfigMap 中删掉某个键效果是该配置项不再被显式覆盖回落为 Agent 编译期内置默认值而非置为 false/0。别名与废弃字段仓库中存在ReplaceDeprecatedFields机制见 pkg/option/config.go会把monitor-aggregation-level、ct-global-max-entries-tcp、ct-global-max-entries-other等废弃键映射到新键。删除这类废弃键时其对应的新键值不受影响反之若想真正清空对应功能需要确认删除的是当前生效的新键。权限要求命令本质是Patch ConfigMap Delete Pod 集合因此执行账号需要具备目标命名空间下 ConfigMap 的patch权限以及 Pod 的delete权限无权限时命令会以unable to patch ConfigMap或unable to restart Cilium pods报错退出。--helm-release-name的适用前提该继承选项默认值为cilium用于与 Helm 安装元数据关联仅在使用 Helm 方式安装 Cilium 时相关。八、相关参考资源命令参考文档Documentation/cmdref/cilium_config_delete.md、cilium config 父命令、cilium config set、cilium config view命令与参数定义cilium-cli/cli/config.go核心实现JSON Patch 与重启逻辑cilium-cli/config/config.go常量定义ConfigMap 名称与 Pod 选择器cilium-cli/defaults/defaults.go配置体系与变更方式官方文档Documentation/configuration/index.rstAgent 端配置消费与废弃字段映射pkg/option/config.go、pkg/option/resolver/resolver.go【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表