Create PODs using YAML
Basically YAML is based on a key-value system. Where the key is a string, and the value is essentially a container that can hold all kinds of things, such as:
- A string
- An array of values (which in turn are containers)
- Another key value pair
- A dictionary (a set of key value pairs).
One of the nice things about YAML is that it’s relatively human readable when compared to XML or JSON.
YAML files are space sensitive. So need to always make sure all your indents are correct.
A Kubernetes definition file always contains 4 top level fields.
apiVersion: kind: metadata: spec:
These are the top level/root level properties. These are all required fields. So you must have them in your configuration file. Let us discuss on each one of them.
Here key names (apiVersion, kind etc) are all case sensitive.
The apiVersion, kind, metadata, and spec, are the required fields, for all kubernetes object files.
apiVersion – This is the version of the Kubernetes API you’re using to create this object. Depending on what we are trying to create, we must use the right api version.
The different possible values for apiVersion are
kind – The kind refers to the type of object you want to create. The different possible values for kind are
metadata – The metadata is the data about the object like name, labels etc. metadata.name is used to assign a name to the object. metadata.labels is also another really important feature. It not only lets you organize your resources, but it also offers a means to filter your resources, and can be used as a way to refer to a group of resources.
spec – The spec property is used to describe what exactly you want Kubernetes to build.
The first 2 property (apiVersion and kind) values are in the form of String only and next 2 values (metadata and spec) are in the form of dictionary.
apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: containers: - name: nginx-container image: nginx - name: backend-container image: redis
Once the above YAML file is created, we will save the file with the name of myapp-pod-definition.yml and run the create command to run the document.
kubectl create –f myapp-pod-definition.yml
kubectl get pods NAME READY STATUS RESTARTS AGE myapp-pod 1/1 Running 0 45s
Kubernetes is smart enough to identify which objects have been created by a particular config file. It does so by using the configs about the ‘kind’ and metadata.name info. The YAML descriptors filename itself doesn’t matter, as long as it ends with the .yml/.yaml extension. You can make changes to the YAML files (as long as it isn’t changing the ‘kind’ or ‘metadata.name’ fields) and just apply them again for the changes to take affect.