To enable plugin support in the dashboard you must register a custom CRD in your cluster.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/test-resources/plugin-crd.yml
In order to take advantage of AOT compilation, sharing the code across plugins and not ship the core Angular packages with the plugin bundle, there is a custom build process to compile the plugins.
You can clone this repository and checkout to plugin/base
branch. The build process is specified under builders
directory.
On this branch, you can compile the plugin with following command
ng build plugin && ng build --project custom-plugin --prod --modulePath="k8s-plugin#PluginModule" --pluginName="k8s-plugin" --outputPath="./dist/bundle"
ng build --project custom-plugin --prod --modulePath="./plugin1/plugin1.module#Plugin1Module" --pluginName="plugin1" --sharedLibs="k8s-plugin" --outputPath="./dist/bundle"
The key thing here is that we specify the custom-plugin
project in the angular.json
to use our custom builder. Make sure to keep the config similar when developing your own plugins.
Once the custom CRD is registered we can now create instances of the CRD which will hold the spec for plugin.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/test-resources/plugin-test.yml
Note: The backend reads the compiled plugin source from a ConfigMap and we need to create that also.
We can now create config-maps to hold the compiled plugin source code.
kubectl create configmap k8s-plugin-src --from-file="./dist/bundle/k8s-plugin.js"
kubectl create configmap plugin1-src --from-file="./dist/bundle/plugin1.js"
After following all the above steps, your new plugin should be available in the dashboard.