【问题标题】:Error Occured When Import K8s Taints Api by go modgo mod导入K8s Taints Api时出错
【发布时间】:2020-12-20 06:52:17
【问题描述】:

我想使用 api 向(从)k8s 节点添加(删除)污点,代码如下:

import (
     taints "k8s.io/kubernetes/pkg/util/taints"
)

newNode, updated, err := taints.AddOrUpdateTaint(node,taint)
newNode, removed, err := taints.RemoveTaint(node,taint)

但是当我通过 GoLand 同步依赖项时,发生了错误:

go: 查找包 k8s.io/kubernetes/pkg/util/taints 的模块
go: 在 k8s.io/kubernetes v1.19.0 中找到 k8s.io/kubernetes/pkg/util/taints
前往:k8s.io/kubernetes@v1.19.0 需要
k8s.io/api@v0.0.0:在版本 v0.0.0 读取 k8s.io/api/go.mod:未知版本 v0.0.0

go.mod 在我的项目中是这样的:

go 1.14

require (
    github.com/gammazero/workerpool v1.0.0
    github.com/glc v0.0.0-00010101000000-000000000000
    github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
    github.com/mediocregopher/radix.v2 v0.0.0-20181115013041-b67df6e626f9
    github.com/robfig/cron v1.2.0
    github.com/spf13/pflag v1.0.5
    gopkg.in/yaml.v2 v2.3.0
    k8s.io/api v0.19.0
    k8s.io/apiextensions-apiserver v0.19.0
    k8s.io/apimachinery v0.19.0
    k8s.io/client-go v0.19.0
    k8s.io/metrics v0.19.0
    sigs.k8s.io/controller-runtime v0.6.2
)

我发现了一些关于此错误的问题,但它似乎对我不起作用。(https://github.com/kubernetes/kubernetes/issues/79384)

希望有人能帮忙,谢谢~

【问题讨论】:

  • 编辑问题以添加您的 go 代码和 go.mod 文件
  • @Arghya Sadhu,谢谢,我已经编辑了问题。

标签: go kubernetes client-go


【解决方案1】:

您可以使用您提到的问题中建议的script

#!/bin/sh
set -euo pipefail

VERSION=${1#"v"}
if [ -z "$VERSION" ]; then
    echo "Must specify version!"
    exit 1
fi
MODS=($(
    curl -sS https://raw.githubusercontent.com/kubernetes/kubernetes/v${VERSION}/go.mod |
    sed -n 's|.*k8s.io/\(.*\) => ./staging/src/k8s.io/.*|k8s.io/\1|p'
))
for MOD in "${MODS[@]}"; do
    V=$(
        go mod download -json "${MOD}@kubernetes-${VERSION}" |
        sed -n 's|.*"Version": "\(.*\)".*|\1|p'
    )
    go mod edit "-replace=${MOD}=${MOD}@${V}"
done
go get "k8s.io/kubernetes@v${VERSION}"

将其另存为upgrade-k8s.sh,与go.mod在同一目录下,并按如下方式运行sh upgrade-k8s.sh 1.19.0。然后提交对go.mod 文件所做的所有更改。现在您可以删除upgrade-k8s.sh 或保留以供将来升级k8s.io/kubernetes 模块使用。

【讨论】:

  • 是的,我知道。但是在一个全新的环境中构建我的项目时,我需要执行这个 scipt,对吗?这似乎不方便。
  • 不,您不需要每次都运行脚本。更新了答案。 TLDR:您只需要运行一次脚本即可在go.mod 中添加所有替换项,然后您提交go.mod 并且不再需要该脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
相关资源
最近更新 更多