首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入Kubectl描述符会导致Kustomize不兼容错误。

导入Kubectl描述符会导致Kustomize不兼容错误。
EN

Stack Overflow用户
提问于 2021-08-12 12:30:16
回答 2查看 307关注 0票数 1

我的项目引用了许多公共API,看起来它们相互冲突,结果编译错误。

这是我的go.mod

代码语言:javascript
复制
 module github.com/apulis/job-scheduler

go 1.16

require (
    github.com/GoogleCloudPlatform/spark-on-k8s-operator v0.0.0-20210804054248-85b549ebc4ae
    github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
    github.com/apulis/sdk/go-utils v0.0.0
    github.com/apulis/simple-gin-logger v0.0.0
    github.com/gin-gonic/contrib v0.0.0-20201101042839-6a891bf89f19
    github.com/gin-gonic/gin v1.7.1
    github.com/google/uuid v1.1.1
    github.com/kubeflow/kfserving v0.6.0
    github.com/myesui/uuid v1.0.0 // indirect
    github.com/sirupsen/logrus v1.8.1
    github.com/spf13/viper v1.7.0
    github.com/stretchr/testify v1.7.0
    github.com/swaggo/gin-swagger v1.3.1
    github.com/swaggo/swag v1.7.1
    github.com/twinj/uuid v1.0.0
    gopkg.in/natefinch/lumberjack.v2 v2.0.0
    gopkg.in/stretchr/testify.v1 v1.2.2 // indirect
    gorm.io/driver/mysql v1.1.2
    gorm.io/driver/postgres v1.1.0
    gorm.io/gorm v1.21.13
    k8s.io/api v0.19.6
    k8s.io/apimachinery v0.19.6
    k8s.io/client-go v11.0.1-0.20190805182717-6502b5e7b1b5+incompatible
    k8s.io/klog/v2 v2.2.0
)

replace (
    k8s.io/api => k8s.io/api v0.19.6
    k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.19.6
    k8s.io/apimachinery => k8s.io/apimachinery v0.19.6
    k8s.io/apiserver => k8s.io/apiserver v0.19.6
    k8s.io/cli-runtime => k8s.io/cli-runtime v0.19.6
    k8s.io/client-go => k8s.io/client-go v0.19.6
    k8s.io/cloud-provider => k8s.io/cloud-provider v0.19.6
    k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.19.6
    k8s.io/code-generator => k8s.io/code-generator v0.19.6
    k8s.io/component-base => k8s.io/component-base v0.19.6
    k8s.io/cri-api => k8s.io/cri-api v0.19.6
    k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.19.6
    k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.19.6
    k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.19.6
    k8s.io/kube-proxy => k8s.io/kube-proxy v0.19.6
    k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.19.6
    k8s.io/kubectl => k8s.io/kubectl v0.19.6
    k8s.io/kubelet => k8s.io/kubelet v0.19.6
    k8s.io/kubernetes => k8s.io/kubernetes v1.19.6
    k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.19.6
    k8s.io/metrics => k8s.io/metrics v0.19.6
    k8s.io/node-api => k8s.io/node-api v0.19.6
    k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.19.6
    k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.19.6
    k8s.io/sample-controller => k8s.io/sample-controller v0.19.6
)

以下是产出:

代码语言:javascript
复制
git submodule init
git submodule update
go build -buildmode=pie  -o bin/scheduler cmd/main.go

# sigs.k8s.io/kustomize/pkg/transformers/config

/root/go/pkg/mod/sigs.k8s.io/kustomize@v2.0.3+incompatible/
pkg/transformers/config/factorycrd.go:71:47: 
cannot use api.Schema.SchemaProps.Properties (type 
spec.SchemaProperties) as type myProperties in argument to 
looksLikeAk8sType

该项目编译成功,直到我添加kubectl/pkg/描述符。我想使用那些来自kubectl的apis。

令我惊讶的是,下面的代码片段工作得很好!!

代码语言:javascript
复制
package main

import (
   desc   "k8s.io/kubectl/pkg/describe"
   "fmt"
)

func main()  {
    config := &desc.DescriberSettings{}
    fmt.Println(config)


    return 
 }

如何解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2021-08-20 08:31:43

如果带有过时依赖项的子项目是您的,那么您可以更新项目的依赖版本,然后它就可以工作了。

如果项目不是您的,那么您可以对项目进行分叉,更新它的依赖项,并从您的顶级项目导入from。

您的问题是一般性的,而不是Kubernetes特定的,但是您可以问维护人员为什么他们的包的一个小版本包含破坏性的更改。

票数 0
EN

Stack Overflow用户

发布于 2021-10-22 21:30:25

罪魁祸首是,在相对较新的Kubernetes版本(1.21)之前,kubectl集成了一个非常老的kustomize版本(2.0.3)。在您的例子中,您使用的kubernetes组件为0.19,只有一岁,而kustomize 2.0.3是三年前的。Kubernetes 1.21最终更新了在两个项目都使用了kustomize之后被内置到kubectl中的兼容依赖,这种问题很可能不会在最近构建的组件上发生。

您所面临的特殊问题可能是库斯托姆中记录的问题。如果是这样的话,您可以将Kubernetes组件更新为0.21的更新版本,也可以将k8s.io/kube-openapi降级。要确认是否是问题所在,请查看将哪个版本的k8s.io/kube-openapi拖到依赖关系图中:

代码语言:javascript
复制
go list -m k8s.io/kube-openapi

如果是在v0.0.0-20210323165736之后,可以尝试使用旧版本:

代码语言:javascript
复制
go mod edit -replace k8s.io/kube-openapi=k8s.io/kubeopenapi@v0.0.0-20210323165736-1a6458611d18

我认为这解决了这个问题,因为大多数人都会在不需要依赖版本的情况下使用它,但是如果没有帮助,您可能也会尝试降低其他依赖程序包的级别。您可以通过以下方法找到上述包的依赖路径:

代码语言:javascript
复制
go mod why -m k8s.io/kube-openapi
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68757553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档