ECK 3.5 新特性

ECK 3.5 新特性

💡 原文英文,约1900词,阅读约需7分钟。
📝

内容提要

ECK 3.5 更新包括:动态命名空间管理(通过标签选择器实时增删,无需重启)、暂停编排(维护窗口期暂停规格变更)、全组件双向 TLS、StackConfigPolicy 改进(声明式角色和动态变量)、简化资源设置、降低内存占用等。这些功能提升 Kubernetes 上 Elasticsearch 运维的灵活性和安全性。

🔎

延伸解读

动态命名空间:运维模式的转变

ECK 3.5 用标签选择器取代了静态命名空间列表,使平台团队能够通过简单的 kubectl label 操作实时接入或移出命名空间,无需重启 operator。这一变化特别适合 PaaS 场景,其中团队和命名空间频繁变动。但需注意,该功能是 Enterprise 特性,且 operator 需要集群级权限。此外,移出命名空间不会删除资源,但会停止证书轮换等后台维护,因此需谨慎规划。

暂停编排:更精细的维护窗口控制

新增的 pause-orchestration 注解允许在维护窗口期间暂停规格驱动的变更(如扩缩容、滚动升级),同时保留证书轮换和健康监控等关键后台任务。相比旧的 managed: false 注解,它提供了更细粒度的控制,且状态通过 OrchestrationPaused 条件可见。该注解支持所有 ECK 管理的资源类型,并已取代旧注解,但需注意移除注解后待处理的规格变更会立即应用。

全组件双向 TLS:安全默认化

ECK 3.5 为所有连接 Elasticsearch 的组件(如 APM Server、Logstash、Fleet Server 等)自动提供客户端证书,实现双向 TLS。这增强了安全性,但需要 Enterprise 许可证。对于 Fleet 管理的代理,Fleet Server 会自动传播证书信息,无需额外配置。此外,Fleet Server 也可要求代理提供客户端证书,进一步扩展了 mTLS 覆盖范围。

资源设置简化与内存优化

ECK 3.5 引入了顶层 resources 字段,简化了 CPU 和内存设置,避免了深层嵌套的 podTemplate 配置。该字段仅影响主容器,且与现有 podTemplate 配置兼容,若两者冲突,顶层字段优先。同时,operator 通过自动限定缓存范围(仅缓存带 ECK 标签的工作负载)和可选的 --restrict-watched-resources 标志,降低了内存占用,适合大规模集群。

Q&A

ECK 3.5 的动态命名空间管理是如何工作的?

ECK 3.5 允许通过标签选择器动态管理命名空间,而不是静态列表。你只需给命名空间打上匹配的标签,操作员就会立即开始管理该命名空间中的 Elastic 资源;移除标签则停止管理,无需重启操作员或更改配置。

如何在 ECK 3.5 中暂停编排?

在 Elasticsearch 资源上添加注解 eck.k8s.elastic.co/pause-orchestration=true 即可暂停规格驱动的编排,但会继续执行证书轮换、服务协调等后台任务。移除注解后,待处理的规格变更会立即应用。

ECK 3.5 中哪些组件支持双向 TLS?

ECK 3.5 中所有连接到 Elasticsearch 的组件都支持双向 TLS,包括 APM Server、Beats、Enterprise Search、Elastic Maps Server、Logstash、Standalone Elastic Agent、Fleet Server、Stack monitoring sidecars 和 AutoOps agent。这些组件会自动获得 ECK 管理的客户端证书。

StackConfigPolicy 在 ECK 3.5 中有哪些改进?

StackConfigPolicy 新增了两个功能:一是 securityRoles 字段,允许在策略中声明式定义 Elasticsearch 角色,并自动应用到目标集群;二是 variablesFrom 字段,可以从 ConfigMap 和 Secret 加载键值对,并在策略中使用 ${VAR} 或 ${VAR:-default} 表达式,实现策略的复用和动态配置。

ECK 3.5 如何简化资源设置?

ECK 3.5 为所有 pod 拥有的 CRD 增加了顶层 resources 字段,可以直接在 spec 下设置 CPU 和内存,无需再使用嵌套的 podTemplate 路径。例如,对于 Elasticsearch,可以在 spec.nodeSets[].resources 下设置;对于 Kibana 等其他工作负载,直接在 spec.resources 下设置。

ECK 3.5 如何降低操作员的内存占用?

ECK 3.5 通过两种方式降低内存占用:一是自动将 controller-runtime 缓存范围限定为带有 ECK 类型标签的核心工作负载资源(如 Pod、StatefulSet 等),避免缓存无关资源;二是新增 --restrict-watched-resources 标志,可进一步将 secrets、services 和 configmaps 的缓存限制为带有 eck.k8s.elastic.co/watched=true 标签的资源。

ECK 3.5 中如何实现 Elasticsearch 角色的声明式定义?

在 StackConfigPolicy 中使用 securityRoles 字段定义自定义角色,例如 click_admins,并指定索引权限。ECK 会将角色定义合并到 Elasticsearch 的 roles.yml 文件中,并热加载,无需重启 pod。

ECK 3.5 中动态命名空间管理有哪些设计决策?

动态命名空间管理有三个关键设计:过滤在深度上强制执行,非匹配命名空间的事件在到达控制器前被丢弃;移除命名空间不会删除或修改其中的 Elastic 资源,只是停止管理;操作员自身的命名空间始终在管理范围内,无论其标签如何,以确保许可证管理等集群级功能不会意外中断。

🏷️

标签

➡️

继续阅读