如何优雅导入 k8s.io/kubernetes
kubernetes 项目结构
主仓库一般简称为 k/k,当前使用 go work 进行项目组织。
staging/src/k8s.io/* 将由 publishing-bot 发布到 github.com/kubernetes/*(importpath k8s.io/*)。
Use of the k8s.io/kubernetes module or k8s.io/kubernetes/… packages as libraries is not supported.
k/k 的导入将不会得到支持。
问题
但是在实际使用中,某些情况依然会需要导入 k/k 的代码,比如使用 Custom Scheduler Plugin。
于社区讨论后,k/k 的导入不受支持的问题得到明确。
现状
如果我们需要导入 k/k,需要从 k/k 的 go.mod 复制所有的 replace 并且替换 version 为所需版本。这很丑而且很麻烦。
一个例子就是 kube-scheduler-simulator。
解决方案
按照上方 issue 的讨论,其实只需要让 k/k,不使用 replace,而是将 k8s.io/* 版本固定到发布的版本即可。
我写了一个工具专门来完成这个事情:kksyncer。
只需要一次替换即可导入 k/k。
example:
1 | |
Notice: Only version >= 1.26.0 will be provided.
如何优雅导入 k8s.io/kubernetes
https://hunsh.net/20240916/如何优雅导入-k8s.io-kubernetes/