Ошибка при импорте K8s портит Api модом go

Я хочу использовать 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/pkg/util/taints в k8s.io/kubernetes v1.19.0
go: k8s. io/[email protected] требует
k8s.io/[email protected]: чтение k8s.io/api/go.mod в версии v0.0.0: неизвестная версия 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)

Надеюсь, кто-то может помочь, спасибо ~


person Leslie__Joe    schedule 01.09.2020    source источник
comment
Отредактируйте вопрос, чтобы добавить свой код go и файл go.mod   -  person Arghya Sadhu    schedule 01.09.2020
comment
@Arghya Sadhu, Спасибо, я уже редактировал вопрос.   -  person Leslie__Joe    schedule 01.09.2020


Ответы (1)


Вы можете использовать скрипт, предложенный в упомянутой вами проблеме:

#!/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.

person Ilya    schedule 01.09.2020
comment
Да, я знаю это, но при создании моего проекта в совершенно новой среде мне нужно выполнить этот сценарий, не так ли? Это кажется неудобным. - person Leslie__Joe; 02.09.2020
comment
Нет, не нужно запускать скрипт каждый раз. Обновил ответ. TL; DR: вам нужно запустить сценарий только один раз, чтобы добавить все заменяемые элементы в go.mod, затем вы фиксируете go.mod, и сценарий больше не нужен. - person Ilya; 02.09.2020