Due to its popularity in the DevOps and container orchestration communities, many organisations and developers who use tools like Kubernetes, Ansible, and Docker are likely to be using YAML on a regular basis. YAML (Yet Another Markup Language) is a human-readable data serialization format that is often used for configuration files and data exchange between different systems. It’s popular for its simplicity and ease of use compared to other formats like XML or JSON.
Kubernetes, the popular open-source container orchestration system, uses YAML to define its configuration files, known as manifests. These manifests are used to define and deploy resources such as pods, services, and deployment configurations.
Why is YAML so popular?
YAML’s simplicity and ease of use make it a popular choice for Kubernetes configuration, as it allows developers to quickly and easily define and deploy their applications. Additionally, the hierarchical structure of YAML makes it easy to read and understand complex configurations.
YAML is important for Kubernetes because it provides a simple, human-readable format for defining and deploying complex configurations, making it easier for developers to work with the system.
Here are the top 10 Kubernetes YAML tips with examples:
1. Use namespaces for separation of resources
Namespaces allow you to logically group resources and manage access control for different parts of your application. For example, you can create a namespace for development, testing, and production environments:
apiVersion: v1
kind: Namespace
metadata:
name: development
2. Use labels and selectors for resource management:
Labels and selectors allow you to easily organize and select resources based on specific criteria. For example, you can label a deployment with an app name and use selectors to find all the pods that belong to that deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
3. Use ConfigMaps and Secrets for configuration management
ConfigMaps and Secrets allow you to manage configuration data separately from your containers and pods. For example, you can store environment variables in a ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: env-config
data:
ENV_VAR_1: "value1"
ENV_VAR_2: "value2"
4. Use Resource Limits and Requests for Pod and Container Resource Management
Resource limits and requests allow you to specify the amount of resources your pods and containers need. For example, you can specify CPU and memory limits for a container:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: myimage
resources:
limits:
memory: "64Mi"
cpu: "500m"
requests:
memory: "32Mi"
cpu: "250m"
5. Use InitContainers for Pre-configuration Tasks
InitContainers allow you to run tasks before your main container starts. For example, you can use an InitContainer to install packages before your main container starts:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
initContainers:
- name: init-container
image: busybox
command: ["/bin/sh", "-c", "apt-get update && apt-get install -y mypackage"]
containers:
- name: mycontainer
image: myimage
6. Use Readiness and Liveness Probes for Container Health Checks
Readiness and liveness probes allow you to check the health of your containers and ensure that they are ready to serve traffic. For example, you can use a liveness probe to ensure that your container is running correctly:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: myimage
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
periodSeconds: 5
7. Use Rollouts and Rollbacks for Deployment Updates
Rollouts and rollbacks allow you to manage changes to your deployment and ensure that
Use rolling updates to deploy changes gradually:
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: example-app
template:
8. Use YAML comments to make your files more readable:
# This is a comment in a YAML file
apiVersion: v1
kind: Pod
metadata:
name: example-pod
labels:
app: example-app
9. Use anchor & alias to avoid duplicating code
# Anchor definition
anchors:
pod_template: &pod_template
apiVersion: v1
kind: Pod
metadata:
labels:
app: example-app
# Aliased resource definition
apiVersion: v1
kind: Pod
metadata:
name: example-pod1
<<: *pod_template
apiVersion: v1
kind: Pod
metadata:
name: example-pod2
<<: *pod_template
10.Use environment variables instead of hardcoded values in YAML files
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: example-image
env:
- name: EXAMPLE_VAR
value: example-value
11. Use ConfigMaps and Secrets to store sensitive information:
apiVersion: v1
kind: ConfigMap
metadata:
name: example-configmap
data:
key: value
apiVersion: v1
kind: Secret
metadata:
name: example-secret
stringData:
username: user
password: pass