我正在使用kustomize将清单通过管道传递到新的k8s集群(v1.17.2)上的kubectl。这包括CRD,但其他对象找不到它们。例如:
unable to recognize "STDIN": no matches for kind "Certificate" in version "cert-manager.io/v1alpha2"
unable to recognize "STDIN": no matches for kind "IngressRoute" in version "traefik.containo.us/v1alpha1"
CRD是在我的kubectl的resources
部分中定义的,它们在输出中显示了我正在管道传输到kubectl的位置,并且我确定这种将所有内容都放入一个文件中的方法在我上次执行时是可行的它。
如果我先应用CRD,然后分别应用主清单,则一切顺利。我可以同时做所有这些吗?如果是这样,我在做什么错;如果没有,为什么以前能起作用?
有人可以指出问题的根源吗?
示例CRD定义:
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: ingressroutetcps.traefik.containo.us
spec:
group: traefik.containo.us
names:
kind: IngressRouteTCP
plural: ingressroutetcps
singular: ingressroutetcp
scope: Namespaced
version: v1alpha1
答案 0 :(得分:0)
在尝试在Kubernetes上使用Kustomize调出Traefik时,我遇到了您的问题...我的问题已通过确保kustomization.yml文件中的命名空间正确而得以解决。就我而言,我必须对其进行更改以匹配部署中其他yml文件中的内容。不知道您是否最终想出了办法,但我想如果有的话我会回应...
答案 1 :(得分:0)
我遇到了同样的问题,我猜是因为如果尝试首先在集群上安装 kubetcl
,crd
找不到资源,为了验证这一点,可以运行命令 {{ 1}},新的 kubectl api-resources
不会在列表中,但是如果您先 crd
apply
,那么 crd
记录将在那里,然后 crd
可以正常工作。但是我真的不知道如何先添加资源。