写点什么

Client-Go 中的特性开关:增强控制并简化 Kubernetes 中的特性采用

作者:Aditya Kulkarni

  • 2024-10-23
    北京
  • 本文字数:1413 字

    阅读完需:约 5 分钟

大小:626.00K时长:03:33
Client-Go中的特性开关:增强控制并简化Kubernetes中的特性采用

Kubernetes 已经将特性开关(Gates)集成到了 client-go 库中,为开发人员和管理员提供了在 Kubernetes 环境中对特性采用的更细粒度的控制。Kubernetes 组件利用 client-go 库进行 API 交互。该库在 Kubernetes 生态系统中也被广泛采用,用于构建控制器、工具和 Webhook 等扩展。

 

红帽公司(Red Hat)的首席软件工程师Ben LuddyLukasz Szaszkiewicz一篇博客文章中详细阐述了这一声明

 

如果没有 client-go 的特性开关,在 Kubernetes 中管理新特性是有问题的,会存在不一致。特性可用性和启用的处理方式不同,会导致方法的零散。有些特性依赖于client-go的版本更新,有些特性需要手动配置,还有一些则需要使用环境变量。

 

此外,与旧服务器端的兼容性通常需要客户端的回退,这会引入潜在的问题,需要更新或回滚。缺乏集中机制使得为特定组件选择性地启用某些特性变得更具挑战性,从而增加了风险的影响范围。

 

对于很多 Kubernetes 程序来说,默认的基于环境变量的特性开关重写覆盖就已经足够了,不需要额外的集成。然而,需要不同行为的程序可以用自己的自定义特性开关提供程序来替换它。

 

Kubernetes 组件本身利用这一能力,通过将默认程序替换为现有 Kubernetes 的特性开关提供程序的楔子。这样,client-go 的特性开关与其他 Kubernetes 的特性开关就对齐了,可以将它们连接到 --feature-gates 标识、度量指标和启动日志中。

 

Replacing the default provider involves implementing the Gates interface and calling ReplaceFeatureGates during package initialization.

 

替换默认提供程序涉及到实现 Gates 接口,并在包初始化期间调用 ReplaceFeatureGates

 

import ( “k8s.io/client-go/features”)

type AlwaysEnabledGates struct{}

func (AlwaysEnabledGates) Enabled(features.Feature) bool { return true}

func init() { features.ReplaceFeatureGates(AlwaysEnabledGates{})}
复制代码

 

在 2024 年第三季度,Kubernetes 发布了Kubernetes v1.31,AWS 发布了Karpenter v1.0,一个开源的Kubernetes集群自动扩展工具。此外,Figma 将其计算平台从 AWS ECS 迁移到 Kubernetes(EKS)。

 

对于 client-go 的早期采用者来说,特性开关的好处包括能够在每个进程的基础上启用默认的关闭的 client-go 特性。这有助于禁用行为异常的特性,而无需构建新的二进制文件。所有已知的 client-go 的特性开关状态都会被记录下来,从而允许用户进行检查。

 

对于使用 client-go 开发软件的人来说,在默认情况下,client-go 的特性开关重写覆盖是从环境变量中读取的。如果在 client-go 的特性中发现了错误,用户能够禁用它,而无需等待新的版本。

 

开发人员可以在程序中替换默认的基于环境变量的重写覆盖来更改默认值,从另一个源读取重写覆盖,或者完全禁用运行时的重写覆盖。Kubernetes 组件使用这种自定义的方式将 client-go 的特性开关与现有的 --feature-gates 命令行标别、特性启用度量指标和日志记录集成在一起。

 

在 client-go v1.30 中引入的特性开关改进了推出新特性的过程。它允许用户和开发人员控制他们对新 client-go 特性的采用,并通过提供一致的方法来管理发布,从而简化了 Kubernetes 贡献者的工作。

 

如需了解更多,请查看官方的Feature Gates文档。

 

作者介绍:

 Aditya Kulkarni 是一名技术专家,他曾与不同的组织合作,共同实现敏捷。作为一名狂热的读者,他总是对关注最新、最伟大的技术感兴趣!

 

原文链接:

https://www.infoq.com/news/2024/09/kubernetes-client-go-ga/

2024-10-23 08:0010228

评论

发布
暂无评论
发现更多内容

【教程】第十章:任务仪表盘(2) —— 各有千秋

NocoBase

开源 项目管理 低代码 任务管理 无代码

BOE(京东方)亮相世界显示产业创新发展大会 以创新科技全面引领行业风向标

爱极客侠

年底了,如何与领导谈绩效

老张

绩效考核 工作汇报

为什么生成式AI的工作被称为“推理”而不是“预测”?

JustYan

人工智能 AI大模型 生成式AI

云起无垠荣获第八届“强网杯”高阶技术专项赛优秀奖

云起无垠

【YashanDB知识库】单机部署报错:prohibited operation, please check if the IP and username are correct

YashanDB

数据库 yashandb

【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页

YashanDB

数据库 yashandb

这份4577页的Java面试PDF,让我成功斩获阿里、字节等大厂offer

Summer

Java 程序员 面试 架构师 大厂

时代邻里携手华为云TaurusDB,打造智慧社区服务行业创新标杆

YG科技

网易伏羲亮相CCF程序员大会,有灵AOP平台首届编程挑战赛正式启幕

网易伏羲

人工智能 编程挑战赛 网易伏羲 ccf程序员大会

【YashanDB知识库】JDBC驱动的date类型字段结果集调用getString方法只返回日期,不返回时分秒

YashanDB

数据库 yashandb

【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页

YashanDB

数据库 yashandb

分布式系统架构:限流设计模式

不在线第一只蜗牛

Java 架构 分布式 设计模式

【YashanDB知识库】jdbc查询st_geometry类型的数据时抛出YAS-00101 cannot allocate 0 bytes for anlHeapMalloc异常

YashanDB

数据库 yashandb

阿里领导给的Java八股文,包括15条技术线,已助1900人进入大厂!

Summer

Java 程序员 面试 架构师 大厂

OpenAI 推出嵌入式硬件 SDK,支持 ESP32 语音开发;INFP:音频驱动的双人对话头像生成,自动区分说话者和倾听者

声网

区块链行业中Solidity编程语言速成:带你了解以太坊智能合约

chainwiseweb3

智能合约 Solidity dapp开发 dapp开发链游开发 去中心化产品开发

逻辑数据编织:实现多源异构的数据统一化管理、降本增效

Aloudata

数据分析 数据开发 数据管理 数据虚拟化 数据编织

Client-Go中的特性开关:增强控制并简化Kubernetes中的特性采用_云原生_InfoQ精选文章