如何优雅导入 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/kgo.mod 复制所有的 replace 并且替换 version 为所需版本。这很丑而且很麻烦。
一个例子就是 kube-scheduler-simulator

解决方案

按照上方 issue 的讨论,其实只需要让 k/k,不使用 replace,而是将 k8s.io/* 版本固定到发布的版本即可。

我写了一个工具专门来完成这个事情:kksyncer

只需要一次替换即可导入 k/k

example:

1
2
3
4
5
6
7
8
// in go.mod
require (
k8s.io/kubernetes v1.29.0
)

replace (
k8s.io/kubernetes => github.com/hunshcn/kubernetes v1.29.0-mod
)

Notice: Only version >= 1.26.0 will be provided.


如何优雅导入 k8s.io/kubernetes
https://hunsh.net/20240916/如何优雅导入-k8s.io-kubernetes/
发布于
2024年9月16日
许可协议