【发布时间】:2021-01-08 13:51:45
【问题描述】:
我有以下 yaml 文件,我在其中创建了一个 kubernetes CRD 和一个自定义资源,作为该 CRD 的一个实例。
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: mycrds.example.com
spec:
group: example.com
version: v1
names:
kind: MyCrd
plural: mycrds
singular: mycrd
scope: Namespaced
---
apiVersion: example.com/v1
kind: MyCrd
metadata:
name: example-instance
namespace: default
spec:
selectors:
cluster:
matchName:
- '*'
如果我对这个文件执行kubectl apply 或kubectl create,有时我会收到no matches for kind "MyCrd" in version "example.com/v1" 的错误,因为CRD 注册尚未完成。这并不总是发生。
错误消息示例:
$ kubectl apply -f crd-and-instance.yaml
customresourcedefinition.apiextensions.k8s.io/mycrds.example.com created
error: unable to recognize "/home/psankar/Downloads/crd-and-instance.yaml": no matches for kind "MyCrd" in version "example.com/v1"
$ # Same command executed after 2-3 seconds
$ kubectl apply -f crd-and-instance.yaml
customresourcedefinition.apiextensions.k8s.io/mycrds.example.com unchanged
mycrd.example.com/example-instance created
这并不总是发生。有时,CRD 注册速度很快,并且 kubectl create/apply 命令在第一次尝试时运行良好。
我知道我可以通过以下 shell 脚本来实现:
kubectl create crd.yaml
kubectl wait until crd is published
kubectl create crdInstance.yaml
但我不想这样做,并且想要一个没有任何附带 shell 脚本的 yaml 文件。这可能吗?
【问题讨论】:
标签: kubernetes kubectl