Пользовательский CRD Kubernetes: "Не удалось составить список...: серверу не удалось найти запрошенный ресурс"
Я пытаюсь создать пользовательское определение ресурса kubernetes (по имени Block
) но продолжайте нажимать следующую ошибку:
Failed to list *v1alpha1.Block: the server could
not find the requested resource (get
blocks.kubechain.com).
Эта проблема возникает из обращения к List
на контроллере для этого CRD:
indexer, controller := cache.NewIndexerInformer(
&cache.ListWatch{
ListFunc: func(lo metav1.ListOptions) (result k8sruntime.Object, err error) {
return clientSet.Block(ns).List(lo)
},
WatchFunc: func(lo metav1.ListOptions) (watch.Interface, error) {
return clientSet.Block(ns).Watch(lo)
},
},
&v1alpha1.Block{},
1*time.Minute,
cache.ResourceEventHandlerFuncs{},
cache.Indexers{},
)
Для некоторого контекста здесь есть register.go
файл, в котором я регистрирую вышеперечисленные ресурсы для создателя схемы:
// GroupName is the api prefix.
const GroupName = "kubechain.com"
// GroupVersion is the version of the api.
const GroupVersion = "v1alpha1"
// SchemeGroupVersion is the group version object.
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: GroupVersion}
var (
// SchemeBuilder adds the new CRDs Block and Blockchain.
SchemeBuilder = runtime.NewSchemeBuilder(AddKnownTypes)
// AddToScheme uses SchemeBuilder to add new CRDs.
AddToScheme = SchemeBuilder.AddToScheme
)
// AddKnownTypes .
func AddKnownTypes(scheme *runtime.Scheme) error {
scheme.AddKnownTypes(SchemeGroupVersion,
&Block{},
&BlockList{},
)
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
return nil
}
А вот и scheme.go
файл, где я на самом деле бегу AddToScheme
из предыдущего файла:
var Scheme = runtime.NewScheme()
var Codecs = serializer.NewCodecFactory(Scheme)
var ParameterCodec = runtime.NewParameterCodec(Scheme)
var localSchemeBuilder = runtime.SchemeBuilder{
v1alpha1.AddToScheme,
}
var AddToScheme = localSchemeBuilder.AddToScheme
func init() {
metav1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"})
if err := AddToScheme(Scheme); err != nil {
panic(err)
}
}
Может кто-нибудь поделиться какой-то информацией о том, что я здесь делаю не так??
Эта работа следует за этим сообщением в блоге.
1 ответ
Я видел похожую ошибку. Это была проблема RBAC. Но сообщение об ошибке вводило в заблуждение.
Если в вашем кластере включен RBAC, убедитесь, что ваш контроллер имеет get
,list
разрешение на blocks.kubechain.com
ресурс.