I hit a problem implementing this, let me add some context
1. add a new type ServiceCIDRConfig, resurrecting v1alpha1, on the group
networking.k8s.io that only has v1 right now.
3.the apiserver fails trying to create the storage with the following error
E0623 09:53:42.745504 2777558 run.go:74] "command failed" err="problem initializing API group \"
networking.k8s.io\" : storage codec doesn't seem to match given type: Internal type not encodable: no kind \"ServiceCIDRConfig\" is registered for version \"
networking.k8s.io/v1\" in scheme \"pkg/api/legacyscheme/scheme.go:30\""
The whole stacktrace is
goroutine 1 [running]:
runtime/debug.Stack()
/usr/local/go/src/runtime/debug/stack.go:24 +0x65
runtime/debug.PrintStack()
/usr/local/go/src/runtime/debug/stack.go:16 +0x19
k8s.io/apiserver/pkg/registry/generic/registry.StorageWithCacher.func1(0xc004959b00, {0xc00074a2d0, 0x13}, 0xc001c52ca8, 0x4dd9d70, 0x4dd9d78, 0x4dd5368, 0x0, 0x0)
vendor/
k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go:73 +0x4d9
k8s.io/apiserver/pkg/registry/generic/registry.(*Store).CompleteWithOptions(0xc004bf2000, 0xc0005ce698)
vendor/
k8s.io/apiserver/pkg/registry/generic/registry/store.go:1442 +0x7e3
k8s.io/kubernetes/pkg/registry/networking/servicecidr/storage.NewREST({0x5422f80, 0xc000567b00})
pkg/registry/networking/servicecidr/storage/storage.go:49 +0x359
k8s.io/kubernetes/pkg/registry/networking/rest.RESTStorageProvider.v1alpha1Storage({}, {0x542f100, 0xc001106150}, {0x5422f80, 0xc000567b00})
pkg/registry/networking/rest/storage_settings.go:95 +0x10e
k8s.io/kubernetes/pkg/registry/networking/rest.RESTStorageProvider.NewRESTStorage({}, {0x542f100, 0xc001106150}, {0x5422f80, 0xc000567b00})
pkg/registry/networking/rest/storage_settings.go:48 +0x1b2
k8s.io/kubernetes/pkg/controlplane.(*Instance).InstallAPIs(0xc0001be850, {0x542f100, 0xc001106150}, {0x5422f80, 0xc000567b00}, {0xc0005cef38, 0x12, 0x1?})
pkg/controlplane/instance.go:566 +0x275
k8s.io/kubernetes/pkg/controlplane.completedConfig.New({{0xc00041d170}, 0xc0008bc608}, {0x5456b20, 0xc0012fcb00})
pkg/controlplane/instance.go:416 +0x87e
k8s.io/kubernetes/cmd/kube-apiserver/app.CreateKubeAPIServer(0x48a84a0?, {0x5456b20, 0xc0012fcb00})
cmd/kube-apiserver/app/server.go:217 +0x3e
k8s.io/kubernetes/cmd/kube-apiserver/app.CreateServerChain({0xc0006f0060?}) cmd/kube-apiserver/app/server.go:196 +0x2a8
k8s.io/kubernetes/cmd/kube-apiserver/app.Run({0xc0012fc000?}, 0x7f4e7fb6faa8?)
cmd/kube-apiserver/app/server.go:163 +0x2f2
k8s.io/kubernetes/cmd/kube-apiserver/app.NewAPIServerCommand.func2(0xc001334000?, {0xc0000fcd00?, 0x0?, 0x10?})
cmd/kube-apiserver/app/server.go:129 +0xc5
github.com/spf13/cobra.(*Command).execute(0xc001334000, {0xc00004c130, 0x10, 0x11})
vendor/
github.com/spf13/cobra/command.go:856 +0x67c
github.com/spf13/cobra.(*Command).ExecuteC(0xc001334000) vendor/
github.com/spf13/cobra/command.go:974 +0x3b4
github.com/spf13/cobra.(*Command).Execute(...)
vendor/
github.com/spf13/cobra/command.go:902k8s.io/component-base/cli.run(0xc001334000) vendor/
k8s.io/component-base/cli/run.go:146 +0x305
k8s.io/component-base/cli.Run(0xc0000021a0?)
vendor/
k8s.io/component-base/cli/run.go:46 +0x1d
main.main()
cmd/kube-apiserver/apiserver.go:34 +0x1e
I can't understand correctly how the to pass the right codec when create the RESTStorage, so it can differentiate between the old and new types and versions.
Doing a bit of archeology I've seen some related old issues, but I wanted to check with all of you if this comment from Clayton applies here
> ... is not supported in any way (versioning codec inside another).