<p>I've worked through <a href="https://kubernetes.io/docs/tutorials/hello-minikube/" rel="nofollow noreferrer">my first Kubernetes tutorial</a>.</p>
<p>Near the end, this tutorial introduced the concept of &quot;add-ons&quot; -- for example, you can install the <code>metrics-server</code> add-on by running</p>
<pre><code>$ minikube addons enable metrics-server
</code></pre>
<p>What are these add-ons?  Are they a feature that's specifically related to minikube, or can they be used with any kubernetes cluster and <code>minikube addons</code> is just some syntactic sugar that points at some shell scripts that can do anything?</p>
<p>Put another way -- what is happening behind the scenes when I run</p>
<pre><code>$ minikube addons enable some-add-on
</code></pre>
<p>Are all add-ons enabled the same way (like, maybe they create a deployment?) -- or will different add-ons be installed in different ways depending on their functionality?</p>
<p>I'm basically trying to understand <em>how</em> a programmer could extend kubernetes themselves. When I go looking for documentation on this I find either lists of add-ons <a href="https://kubernetes.io/docs/concepts/cluster-administration/addons/" rel="nofollow noreferrer">I can use</a> (which point to add-ons being more than a <code>minikube</code> thing), or <a href="https://kubernetes.io/docs/concepts/extend-kubernetes/" rel="nofollow noreferrer">very broad documentation on ways to extend kubernetes</a> that don't make any mention of &quot;add-ons&quot; by name.</p>

Alana Storm
<blockquote>
<p>What are these add-ons? Are they a feature that's specifically related to minikube</p>
</blockquote>
<p>Yes, this is specific to Minikube.</p>
<p>Kubernetes is manly a container orchestrator. It is typically installed in an environment with lots of servers, e.g. a Cloud Provider like AWS or GCP. Kubernetes does not work isolated, it has abstractions and need <em>real</em> infrastructure from outside.</p>
<p>Some examples:</p>
<ul>
<li>Load Balancer were your app traffic arrives through</li>
<li>Virtual Machine or Physical Machines to e.g scale out your cluster with more Nodes when you want autoscaling.</li>
<li>Disk volumes, either local volumes on the node, or storage via a network protocol.</li>
</ul>
<p>In a cloud environment like e.g. Amazon Web Services, these things would be provided with other AWS services like e.g. <a href="https://aws.amazon.com/elasticloadbalancing/" rel="nofollow noreferrer">Elastic Load Balancer</a>, <a href="https://aws.amazon.com/ec2/" rel="nofollow noreferrer">EC2</a> virtual machines or <a href="https://aws.amazon.com/ebs/" rel="nofollow noreferrer">Elastic Block Storage</a>. Other providers like e.g. RedHat OpenShift, specialized on Kubernetes for on-prem environments has other ways to provide these resources, e.g. via <a href="https://www.vmware.com/products/vsphere.html" rel="nofollow noreferrer">VMWare vSphere</a></p>
<p><strong>Minikube</strong> is specialized for running Kubernetes on your local machine and to allow you use Kubernetes as how it would appear in a environment with many servers, it need to mimic those features, e.g. use your local machine for <a href="https://kubernetes.io/docs/concepts/storage/persistent-volumes/" rel="nofollow noreferrer">Persistent Volumes</a>.</p>
<p>You can see the Minikube add-ons with this command:</p>
<pre><code>minikube addons list
</code></pre>
