如何优雅导入 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/