Add your manifest YAML's to the directory you have created:
`cp *.yaml deploy/addons/<addon name>`
To make the addon appear in `minikube addons list`, add it to `pkg/addons/config.go`. Here is the entry used by the `registry` addon, which will work for any addon which does not require custom code:
```go
{
name:"registry",
set:SetBool,
callbacks:[]setFn{enableOrDisableAddon},
},
```
Then, add into `pkg/minikube/assets/addons.go` the list of files to copy into the cluster, including manifests. Here is the entry used by the `registry` addon:
* boolean value representing if template substitution is required (often `false`)
The boolean value on the last line is whether the addon should be enabled by default. This should always be `false`.
To see other examples, see the [addons commit history](https://github.com/kubernetes/minikube/commits/master/deploy/addons) for other recent examples.
## "addons open" support
If your addon contains a NodePort Service, please add the `kubernetes.io/minikube-addons-endpoint: <addon name>` label, which is used by the `minikube addons open` command:
To add a new addon to minikube the following steps are required:
* For the new addon's .yaml file(s):
* Put the required .yaml files for the addon in the `minikube/deploy/addons` directory.
* Add the `kubernetes.io/minikube-addons: <NEW_ADDON_NAME>` label to each piece of the addon (ReplicationController, Service, etc.)
* Also, the `addonmanager.kubernetes.io/mode` annotation is needed so that your resources are picked up by the `addon-manager`.
* In order to have `minikube addons open <NEW_ADDON_NAME>` work properly, the `kubernetes.io/minikube-addons-endpoint: <NEW_ADDON_NAME>` label must be added to the appropriate endpoint service (what the user would want to open/interact with). This service must be of type NodePort.
* To add the addon into minikube commands/VM:
* Add the addon with appropriate fields filled into the `Addon` dictionary, see this [commit](https://github.com/kubernetes/minikube/commit/41998bdad0a5543d6b15b86b0862233e3204fab6#diff-e2da306d559e3f019987acc38431a3e8R133) and example.
```go
// cmd/minikube/cmd/config/config.go
varsettings=[]Setting{
...,
// add other addon setting
{
name:"efk",
set:SetBool,
validations:[]setFn{IsValidAddon},
callbacks:[]setFn{EnableOrDisableAddon},
},
}
```
* Add the addon to settings list, see this [commit](https://github.com/kubernetes/minikube/commit/41998bdad0a5543d6b15b86b0862233e3204fab6#diff-07ad0c54f98b231e68537d908a214659R89) and example.
```go
// pkg/minikube/assets/addons.go
varAddons=map[string]*Addon{
...,
// add other addon asset
"efk":NewAddon([]*BinAsset{
MustBinAsset(
"deploy/addons/efk/efk-configmap.yaml",
guestAddonsDir,
"efk-configmap.yaml",
"0640",
false),
MustBinAsset(
"deploy/addons/efk/efk-rc.yaml",
guestAddonsDir,
"efk-rc.yaml",
"0640",
false),
MustBinAsset(
"deploy/addons/efk/efk-svc.yaml",
guestAddonsDir,
"efk-svc.yaml",
"0640",
false),
},false,"efk"),
}
```
## Sending out your PR
Once you have tested your addon, click on [new pull request](https://github.com/kubernetes/minikube/compare) to send us your PR!