写点什么

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:0010103

评论

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

研发流程走出低谷,靠老一套肯定不行了

禅道项目管理

运维 开发 研发流程 禅道项目管理软件 禅道DevOps解决方案

YashanDB 单机部署时报错:prohibited operation?

数据库砖家

数据库

HyperMesh视觉控制

智造软件

仿真软件 Hypermesh hyperworks

Android App 的上线流程

北京木奇移动技术有限公司

软件外包公司 APP外包公司 APP开发公司

快手上线鸿蒙应用高性能解决方案:数据反序列化性能提升90%

HarmonyOS开发者

CodeBuddy 开发者福音!在线简历0元搞定,再也不怕面试翻车!

不惑

CodeBuddy

【YashanDB 知识库】Mybatis-Plus 如何正确配置分页?Oracle 和 MySQL 写法都能用!

数据库砖家

数据库

YashanDB|YMP 报错“OCI 版本为空或架构不一致”?一文快速排查

数据库砖家

数据库

CodeBuddy暴改漏洞实录

VyrnSynx

CodeBuddy首席试玩官

CST如何快速获得微带线或带状线简单分析模型

思茂信息

cst CST软件 CST Studio Suite

《算法导论(第4版)》阅读笔记:p59-p75

codists

算法

YashanDB 部署报错:YAS-05721 节点名非法怎么办?

数据库砖家

数据库

Mybatis-Plus 集成 YashanDB 时分页功能怎么配置?

数据库砖家

数据库

天翼云助力中国交建,引领交通基建迈入数智新时代!

天翼云开发者社区

交通 大模型 数智化转型

YashanDB 报错 YAS-07301:通过 dblink 查询 Oracle 超时?可能是系统资源瓶颈

数据库砖家

数据库

联想携手ISV“行业私厨”,让智能体落地实践端上行业“餐桌”

脑极体

AI

vivo 互联网研发效能关键技术与实践

vivo互联网技术

DevOps 研发效能 CI/CD 测试工具

捷报!天翼云CTyunOS系统入选中央国家机关采购名单!

天翼云开发者社区

操作系统 天翼云 CTyunOS系统

YashanDB|使用 leading hint 优化 SQL 报 YAS-04522 错误的应对方法

数据库砖家

数据库

YashanDB 使用 leading hint 报错 YAS-04522?当前版本不支持该写法

数据库砖家

数据库

YashanDB|使用触发器复制 varchar(4000 char) 数据出现乱码问题的处理方案

数据库砖家

数据库

原生 iOS App 开发的优势

北京木奇移动技术有限公司

软件外包公司 APP外包 APP开发公司

如何检测网站是否支持IPv6?有哪些指标?

国科云

YashanDB 如何限制用户连接数?三步搞定!

数据库砖家

数据库

SDP架构在零信任中的实践

天翼云开发者社区

安全 零信任 sdp

高性能、高可用的 Lustre 解决方案:使用 xiRAID 4.1 在双节点共享 NVMe 环境下

Sergey Platonov

性能测试 Lustre 高可用性 安装指南

【YashanDB 知识库】JDBC 查询 date 字段不返回时分秒?别只用 getString!

数据库砖家

数据库

原生 Android App 开发的优势

北京木奇移动技术有限公司

软件外包公司 APP外包公司 APP开发公司

YashanDB 启动报错:control file 版本不兼容,怎么处理?

数据库砖家

数据库

为开源鸿蒙开发者而生,开鸿Bot系列今日预售启动

科技热闻

数据中心里的AI:从幕后工具到智能大脑的蜕变

ScaleFlux

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