cloud-ark / kubeplus

Kubernetes Operator for multi-instance multi-tenancy
https://cloudark.io/
Apache License 2.0
652 stars 78 forks source link

[RFE] Submitting kubeplus kublet plugins to Krew plugin index #1328

Open chiukapoor opened 2 months ago

chiukapoor commented 2 months ago

Proposal

I want to propose submitting KubePlus to the Krew plugin index. Krew is a package manager for kubectl plugins, making it easier for users to discover, install, and manage kubectl plugins. By submitting KubePlus to Krew, we can significantly increase its visibility and adoption within the Kubernetes community.

Benefits:

Requirements:

This is not an exhaustive list of requirements but some that I gathered from https://krew.sigs.k8s.io/docs/developer-guide/release/new-plugin/

Plugin Naming:

Platform Support:

Plugin Manifest:

Compliance with Krew Guidelines:

Installation and Uninstallation:

devdattakulkarni commented 2 months ago

Thanks @chiukapoor for asking about krew.

Previously we have considered submitting kubeplus kubectl plugins to krew. But, we did not go through with it mainly due to the reason that kubeplus plugins cannot be used without kubeplus being first installed on the cluster. The utility of kubeplus kubectl plugins is for the specific use-case of multi-instance multi-tenancy. My understanding is that the plugins that are in the krew index are more generic in nature. They can be used on any k8s cluster, without requiring any component to be installed on the cluster first.

If there are any plugins in the krew index that are not generic and require some component to be installed on the cluster first, we can follow that example. Otherwise, I would say we can revisit this sometime in the future (possibly when non-generic plugins start getting included more and more into krew).

Let me know your thoughts.

chiukapoor commented 2 months ago

@devdattakulkarni Thank you for the perspective and for pointing out that Krew mostly indexes generic plugins.

I went through the Krew plugin index and found non-generic plugins which require some component to be installed, for example cost plugin which requires kubecost to be installed which is mentioned in the caveats

https://github.com/kubernetes-sigs/krew-index/blob/da9bb5ad8cbd16d0bb3be0e777f62a080a993859/plugins/cost.yaml#L18-L20

The same applies to datadog plugin https://github.com/kubernetes-sigs/krew-index/blob/master/plugins/datadog.yaml

Similarly we may add kubeplus plugin to krew-index with a requirement for kubeplus operator to be installed.

devdattakulkarni commented 1 month ago

Thanks @chiukapoor

We can potentially consider contributing following plugins to krew:

These plugins provide the overall experience of multi-instance multi-tenancy. One can check all the application resources created (kubectl appresources), retrieve application url (kubectl appurl), get application logs (kubectl applogs) and get application metrics (kubectl metrics).

kubectl connections uses compiled binary from kubediscovery project (which is a separate project from CloudARK). We used to main the binaries for MacOS and Linux for kubediscovery. But I haven't been able to test the MacOS binary with the latest version of MacOS. We can exclude this plugin for now. Also, we need to make sure that applogs, appresources, and metrics plugins do not use kubectl connections internally. In the original design we used to do that. We have changed it, but we should verify.

Other plugins (like kubectl retrieve kubeconfig provider) are too specific. Users can get these plugins from this repository.

What is involved in uploading the plugins to the krew repository/index? Do you know how the plugins are packaged? For each of the above plugins, there are bash files and python files. Do we have to create a tar gz file and upload it to krew repository?