У меня есть следующий файл yaml, где я создаю CRD kubernetes и пользовательский ресурс в качестве экземпляра этого 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 отлично работает с первой попытки.
Я знаю, что могу добиться этого с помощью сценария оболочки, например:
kubectl create crd.yaml
kubectl wait until crd is published
kubectl create crdInstance.yaml
Но я не хочу делать это и хочу один файл yaml без сопровождающего скрипта. Это возможно?