<p>First off, I'm completely new with Kubernetes so I may have missed something completely obvious but the documentation is exactly helping, so I'm turning to you guys for help.</p>

<p>I'm trying to figure out just how many types of "deployment files" there are for Kubernetes.  I call them "deployment files" because I really don't know what else to call them and they're usually associated with a deployment.</p>

<p>So far, every yml/yaml file I've seen start like this:</p>

<pre><code>apiVersion:
kind: &lt;&lt; this is what I'm asking about &gt;&gt;
metadata:
</code></pre>

<p>And so far I have seen this many "kind"(s)</p>

<pre><code>ClusterConfig
ClusterRole
ClusterRoleBinding
CronJob
Deployment
Job
PersistentVolumeClaim
Pod
ReplicationController
Role
RoleBinding
Secret
Service
ServiceAccount
</code></pre>

<p>I'm sure there are many more.  But I can't seem to find a location where they are listed and the contexts broken down.</p>

<p>So what I want to know is this, </p>

<ol>
<li>Where can I find an explanation for these yaml files?</li>
<li>Where can I learn about the different kinds?</li>
<li>Where can I get a broken down explanation of the minimum required fields/values are for any of these?</li>
<li>Are there templates for these files?</li>
</ol>

<p>Thanks</p>

luis.madrigal
<p>When you are talking about specific yaml file containing the definition of specific kubernetes object, you can call them <code>yaml manifests</code> or simply <code>yaml definition files</code>. Using word <code>Deployment</code> for all of them isn't a good idea as there is already specific resource type defined and called by this name in <strong>kubernetes</strong>. So it's better you don't call them all <code>deployments</code> for consistency.</p>

<blockquote>
  <p>I'm sure there are many more. But I can't seem to find a location
  where they are listed and the contexts broken down.</p>
</blockquote>

<p>Yes, there are a lot more of them and you can list those which are available by running:</p>

<pre><code>kubectl api-resources
</code></pre>

<p>These different objects are actually called <code>api-resources</code>. As you can see they are listed in three columns: NAME, SHORTNAMES, APIGROUP, NAMESPACED and KIND</p>

<pre><code>NAME                                       SHORTNAMES   APIGROUP                       NAMESPACED   KIND
bindings                                                                               true         Binding
componentstatuses                          cs                                          false        ComponentStatus
configmaps                                 cm                                          true         ConfigMap
endpoints                                  ep                                          true         Endpoints
events                                     ev                                          true         Event
limitranges                                limits                                      true         LimitRange
namespaces                                 ns                                          false        Namespace
nodes                                      no                                          false        Node
</code></pre>

<p>Note that the name of resource corresponds to its <code>KIND</code> but it is slightly different. <code>NAME</code> simply describes resource types as we are referring to them e.g. using <code>kubectl command line utility</code>. Just to give one example, when you want to list pods available in your cluster you simply type <code>kubectl get pods</code>. You don't have to use resource kind i.e. <code>Pod</code> in this context. You can but you don't have to. So <code>kubectl get Pod</code> or <code>kubectl get ConfigMap</code> will also return desired result. You can also refer to them by their shournames so <code>kubectl get daemonsets</code> and <code>kubectl get ds</code> are equivalent.</p>

<p>It's totally different when it comes to specific resource/object definition. In context of <code>yaml definition</code> file we must to use proper <code>KIND</code> of the resource. They are mostly start with capital letter and are written by co called <code>CamelCase</code> but there are exceptions from this rule.</p>

<p>I really recommend you to familiarize with kubernetes documentation. It is very user-friendly and nicely explains both key kubernetes concepts as well as all very tiny details.</p>

<p><a href="https://kubernetes.io/docs/reference/kubectl/cheatsheet/#resource-types" rel="nofollow noreferrer">Here</a> you have even more useful commands for exploring API resources:</p>

<blockquote>
<pre><code>kubectl api-resources --namespaced=true      # All namespaced resources
kubectl api-resources --namespaced=false     # All non-namespaced resources
kubectl api-resources -o name                # All resources with simple output (just the resource name)
kubectl api-resources -o wide                # All resources with expanded (aka "wide") output
kubectl api-resources --verbs=list,get       # All resources that support the "list" and "get" request verbs
kubectl api-resources --api-group=extensions # All resources in the "extensions" API group
</code></pre>
</blockquote>

<p>As @wargre already suggested in his comment, kubernetes official documentetion is definitely the best place to start as you will find there very detailed description of every resource.</p>
